From 32d9c760b3ad78e6a62c2144647aac0a220c06fb Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 22 Nov 2012 13:53:40 +0100 Subject: Windows (MinGW32) compatibility changes * mainly we need a custom get_absolute_path() function using Win32 API * also the windows.h conflicts with some other headers (esp. BSD headers) * also there was a typo in the code setting file attributes --- qbuffers.cpp | 37 ++++++++++++++++++++++++++++++------- qbuffers.h | 5 +++++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/qbuffers.cpp b/qbuffers.cpp index 64a5fbd..9a12232 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -3,10 +3,6 @@ #include #include -#ifdef G_OS_WIN32 -#include -#endif - #include #include #include @@ -21,6 +17,16 @@ #include "goto.h" #include "qbuffers.h" +#ifdef G_OS_WIN32 +/* here it shouldn't cause conflicts with other headers */ +#include + +/* still need to clean up */ +#ifdef interface +#undef interface +#endif +#endif + namespace States { StateEditFile editfile; StateSaveFile savefile; @@ -555,7 +561,8 @@ make_savepoint(Buffer *buffer) token->attributes = GetFileAttributes((LPCTSTR)savepoint); if (token->attributes != INVALID_FILE_ATTRIBUTES) SetFileAttributes((LPCTSTR)savepoint, - attrs | FILE_ATTRIBUTE_HIDDEN); + token->attributes | + FILE_ATTRIBUTE_HIDDEN); #endif undo.push(token); } else { @@ -672,16 +679,32 @@ get_absolute_path(const gchar *path) return resolved; } +#elif defined(G_OS_WIN32) + +gchar * +get_absolute_path(const gchar *path) +{ + TCHAR buf[MAX_PATH]; + gchar *resolved = NULL; + + if (GetFullPathName(path, sizeof(buf), buf, NULL)) + resolved = g_strdup(buf); + + return resolved; +} + #else +/* + * FIXME: I doubt that works on any platform... + */ gchar * get_absolute_path(const gchar *path) { - /* FIXME: see Unix implementation */ return path ? g_file_read_link(path, NULL) : NULL; } -#endif +#endif /* !G_OS_UNIX && !G_OS_WIN32 */ /* * Command states diff --git a/qbuffers.h b/qbuffers.h index ace3358..2954388 100644 --- a/qbuffers.h +++ b/qbuffers.h @@ -24,6 +24,11 @@ is_glob_pattern(const gchar *str) return strchr(str, '*') || strchr(str, '?'); } +/* + * Get absolute/full version of a possibly relative path. + * Works with existing and non-existing paths (in the latter case, + * heuristics may be applied.) + */ gchar *get_absolute_path(const gchar *path); /* -- cgit v1.2.3