libxml2 can load gzip compressed files, so lets look for these too.
This will be useful for installing the register database so that an
installed cffdump/crashdec can use them. But it isn't too useful
to be able to edit the installed register database, so we can gzip
them to use less disk space.
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6154>
plen = strlen(path);
}
if (plen) {
plen = strlen(path);
}
if (plen) {
- char *fullname = malloc(strlen(name) + plen + 2);
- strncpy(fullname, path, plen);
- fullname[plen] = '/';
- fullname[plen+1] = 0;
- strcat(fullname, name);
- FILE *file = fopen(fullname, "r");
- if (file) {
- if (pfullname)
- *pfullname = fullname;
- else
- free(fullname);
- return file;
+ /* also look for .gz compressed xml: */
+ const char *exts[] = { "", ".gz" };
+ for (int i = 0; i < ARRAY_SIZE(exts); i++) {
+ char *fullname;
+
+ int ret = asprintf(&fullname, "%.*s/%s%s", (int)plen, path, name, exts[i]);
+ if (ret < 0)
+ return NULL;
+
+ FILE *file = fopen(fullname, "r");
+ if (file) {
+ if (pfullname)
+ *pfullname = fullname;
+ else
+ free(fullname);
+ return file;
+ }
+ free(fullname);