freedreno/rnn: also look for .xml.gz
authorRob Clark <robdclark@chromium.org>
Sun, 2 Aug 2020 17:00:02 +0000 (10:00 -0700)
committerMarge Bot <eric+marge@anholt.net>
Mon, 3 Aug 2020 19:46:49 +0000 (19:46 +0000)
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>

src/freedreno/rnn/path.c

index 7b89a0420956ccf407688c95a743f47c1940fd5e..f8ef885d891d93be02708ec2b4707da9ab5be99f 100644 (file)
@@ -38,20 +38,25 @@ FILE *find_in_path(const char *name, const char *path, char **pfullname) {
                        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);
                        }
-                       free(fullname);
                }
                path = npath;
        }