summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2017-11-10 09:23:15 -0500
committerRay Strode <rstrode@redhat.com>2017-11-14 10:05:23 -0500
commit03b48a39347041112a36d379d8d3c969372255c6 (patch)
tree460903a7faf957c90443c8e90d9a7ca174cf0c14
parent016ea9168b1c372f9a09063245f9aab74434616f (diff)
downloadlibglnx-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.
-rw-r--r--glnx-fdio.h15
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* */