vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Sun Feb 11 10:14:56 2018 +0200| [1168a84567ef5015b0f8a0bdd63b088be7395e65] | committer: Rémi Denis-Courmont
linux: fix datadir for some directory layouts This changes the computation of datadir from libdir to a more generic algorithm where we substitute the common prefix of both directory. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1168a84567ef5015b0f8a0bdd63b088be7395e65 --- src/linux/dirs.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/linux/dirs.c b/src/linux/dirs.c index 70753da967..736705ad50 100644 --- a/src/linux/dirs.c +++ b/src/linux/dirs.c @@ -111,20 +111,22 @@ char *config_GetDataDir (void) if (libdir == NULL) return NULL; /* OOM */ + /* Look for common prefix between lib and data directories. */ + size_t prefix_len = 0; + while (PKGLIBDIR[prefix_len] == PKGDATADIR[prefix_len]) + { + if (PKGLIBDIR[prefix_len] == '\0') + return libdir; /* corner case: directories are identical */ + prefix_len++; + } + char *datadir = NULL; - /* There are no clean ways to do this, are there? - * Due to multilibs, we cannot simply append ../share/. */ - char *p = strstr (libdir, "/lib/"); + char *p = strstr(libdir, PKGLIBDIR + prefix_len); if (p != NULL) { - char *p2; - /* Deal with nested "lib" directories. Grmbl. */ - while ((p2 = strstr (p + 4, "/lib/")) != NULL) - p = p2; - *p = '\0'; - - if (unlikely(asprintf (&datadir, "%s/share/"PACKAGE, libdir) == -1)) + if (unlikely(asprintf(&datadir, "%.*s%s", (int)(p - libdir), libdir, + PKGDATADIR + prefix_len) == -1)) datadir = NULL; } free (libdir); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits