quirks: use basename in a POSIX compliant way

The POSIX version of basename modifies the string (and therefore crashes
on static strings), so use safe_strdup before calling it.

glibc provides a POSIX version when libgen.h is included.
FreeBSD 12 provides a POSIX version when nothing is included, which was
causing a segfault.

Using the POSIX version correctly is the right way to avoid any such issues.
This commit is contained in:
Greg V 2018-10-14 15:15:15 +03:00
parent 430ede8266
commit b0cd07bf75

View file

@ -34,6 +34,7 @@
#include <libudev.h>
#include <dirent.h>
#include <fnmatch.h>
#include <libgen.h>
#include "libinput-versionsort.h"
#include "libinput-util.h"
@ -413,7 +414,9 @@ section_new(const char *path, const char *name)
{
struct section *s = zalloc(sizeof(*s));
xasprintf(&s->name, "%s (%s)", name, basename(path));
char *path_dup = safe_strdup(path);
xasprintf(&s->name, "%s (%s)", name, basename(path_dup));
free(path_dup);
list_init(&s->link);
list_init(&s->properties);