diff options
author | Ray Strode <rstrode@redhat.com> | 2017-11-10 09:23:15 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2017-11-14 10:05:23 -0500 |
commit | 03b48a39347041112a36d379d8d3c969372255c6 (patch) | |
tree | 460903a7faf957c90443c8e90d9a7ca174cf0c14 /glnx-fdio.h | |
parent | 016ea9168b1c372f9a09063245f9aab74434616f (diff) | |
download | libglnx-03b48a39347041112a36d379d8d3c969372255c6.tar.gz |
fdio: implement glnx_basename from scratch
At the top of glnx-fdio.h there's this comment:
/* When we include libgen.h because we need
* dirname() we immediately undefine
* basename() since libgen.h defines it as
* a macro to the XDG version which is really
* broken. */
and then it does #undef basename to try to
gain access to non-default basename implementation.
The problem is that this trick doesn't work on
some systems:
./libglnx/glnx-fdio.h: In function 'glnx_basename':
./libglnx/glnx-fdio.h:46:11: error: 'basename'
undeclared (first use in this function)
return (basename) (path);
Anyway, basename() is like 3 lines of code to
implement, so this commit just does that instead
of relying on glibc for it.
Diffstat (limited to 'glnx-fdio.h')
-rw-r--r-- | glnx-fdio.h | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/glnx-fdio.h b/glnx-fdio.h index dc93b68..8af54ff 100644 --- a/glnx-fdio.h +++ b/glnx-fdio.h @@ -29,12 +29,6 @@ #include <string.h> #include <stdio.h> #include <sys/xattr.h> -/* From systemd/src/shared/util.h */ -/* When we include libgen.h because we need dirname() we immediately - * undefine basename() since libgen.h defines it as a macro to the XDG - * version which is really broken. */ -#include <libgen.h> -#undef basename #include <glnx-macros.h> #include <glnx-errors.h> @@ -47,7 +41,14 @@ G_BEGIN_DECLS static inline const char *glnx_basename (const char *path) { - return (basename) (path); + gchar *base; + + base = strrchr (path, G_DIR_SEPARATOR); + + if (base) + return base + 1; + + return path; } /* Utilities for standard FILE* */ |