From: Sebastian Dröge Date: Wed, 30 Sep 2009 14:11:09 +0000 (+0200) Subject: Update gobject-introspection/grealpath.h from gobject-introspectio X-Git-Tag: 0.7.8~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ca47ca089f2a50b81ace057c19db506aea361e5;p=thirdparty%2Fvala.git Update gobject-introspection/grealpath.h from gobject-introspectio This fixes the build on Windows and GNU/Hurd --- diff --git a/gobject-introspection/grealpath.h b/gobject-introspection/grealpath.h index ca88190bc..f5af7cb58 100644 --- a/gobject-introspection/grealpath.h +++ b/gobject-introspection/grealpath.h @@ -1,6 +1,8 @@ #ifndef __G_REALPATH_H__ #define __G_REALPATH_H__ +#include + /** * g_realpath: * @@ -10,11 +12,47 @@ static inline gchar* g_realpath (const char *path) { +#ifndef _WIN32 +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif char buffer [PATH_MAX]; if (realpath(path, buffer)) return g_strdup(buffer); else return NULL; +#else + /* We don't want to include as it clashes horribly + * with token names from scannerparser.h. So just declare + * GetFullPathNameA() here. + */ + extern __stdcall GetFullPathNameA(const char*, int, char*, char**); + char *buffer; + char dummy; + int rc, len; + + rc = GetFullPathNameA(path, 1, &dummy, NULL); + + if (rc == 0) + { + /* Weird failure, so just return the input path as such */ + return g_strdup(path); + } + + len = rc + 1; + buffer = g_malloc(len); + + rc = GetFullPathNameA(path, len, buffer, NULL); + + if (rc == 0 || rc > len) + { + /* Weird failure again */ + g_free(buffer); + return g_strdup(path); + } + + return buffer; +#endif } #endif