aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-03-03 20:27:49 -0500
committerDavid Robillard <d@drobilla.net>2018-03-03 20:27:49 -0500
commitd818995cf91c9d632b2446022854529ac0f02835 (patch)
treedb194762a2331220ab3a6a482d834bb94e8ad2d9
parent3ebf6ae3658b57ba38dcd3a01ee929cc2895740c (diff)
downloadserd-d818995cf91c9d632b2446022854529ac0f02835.tar.gz
serd-d818995cf91c9d632b2446022854529ac0f02835.tar.bz2
serd-d818995cf91c9d632b2446022854529ac0f02835.zip
Add serd_realpath() utility function
-rw-r--r--src/serd_internal.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/serd_internal.h b/src/serd_internal.h
index cfcdc82c..bd30b8c4 100644
--- a/src/serd_internal.h
+++ b/src/serd_internal.h
@@ -18,12 +18,15 @@
#define SERD_INTERNAL_H
#define _POSIX_C_SOURCE 200809L /* for posix_memalign and posix_fadvise */
+#define _XOPEN_SOURCE 500 /* for realpath */
#include <assert.h>
#include <ctype.h>
#include <errno.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdlib.h>
#include <string.h>
#include "serd/serd.h"
@@ -73,6 +76,19 @@ serd_bufalloc(size_t size)
#endif
}
+static inline const uint8_t*
+serd_realpath(const uint8_t* path)
+{
+#if defined(_WIN32)
+ static uint8_t real[MAX_PATH];
+ GetFullPathName(path, MAX_PATH, real, NULL);
+ return real;
+#else
+ static char real[PATH_MAX];
+ return (const uint8_t*)realpath((const char*)path, real);
+#endif
+}
+
/* Byte source */
typedef struct {