[vala] Update gobject-introspection/grealpath.h from gobject-introspectio



commit 2ca47ca089f2a50b81ace057c19db506aea361e5
Author: Sebastian Dröge <sebastian droege collabora co uk>
Date:   Wed Sep 30 16:11:09 2009 +0200

    Update gobject-introspection/grealpath.h from gobject-introspectio
    
    This fixes the build on Windows and GNU/Hurd

 gobject-introspection/grealpath.h |   38 +++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/gobject-introspection/grealpath.h b/gobject-introspection/grealpath.h
index ca88190..f5af7cb 100644
--- a/gobject-introspection/grealpath.h
+++ b/gobject-introspection/grealpath.h
@@ -1,6 +1,8 @@
 #ifndef __G_REALPATH_H__
 #define __G_REALPATH_H__
 
+#include <stdlib.h>
+
 /**
  * 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 <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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]