]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Update gobject-introspection/grealpath.h from gobject-introspectio
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 30 Sep 2009 14:11:09 +0000 (16:11 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 30 Sep 2009 14:11:09 +0000 (16:11 +0200)
This fixes the build on Windows and GNU/Hurd

gobject-introspection/grealpath.h

index ca88190bcd7aae5db1f3312684e9d0670d7da24c..f5af7cb58c038293df3c46f1d3e643d44346c670 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __G_REALPATH_H__
 #define __G_REALPATH_H__
 
+#include <stdlib.h>
+
 /**
  * g_realpath:
  *
 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 <windows.h> 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