GLOBAL-6.5 DOS/Win Patches

Jason Hood <[email protected]>
Newsgroups gmane.comp.gnu.global.bugs
Message-ID <[email protected]>
Just a fix for some old path issues that came up (I hadn't ignored
case in abs2rel, nor translated backslashes in GTAGSLIBPATH).

-- 
Jason.

_______________________________________________
Bug-global mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-global
glo65.txt (text/plain, 4.1 KB)
diff -urp global-6.5/global/global.c global-6-5/global/global.c
--- global-6.5/global/global.c	2015-06-10 11:45:07 +1000
+++ global-6-5/global/global.c	2015-06-12 21:35:49 +1000
@@ -53,6 +53,29 @@
 #include "literal.h"
 #include "convert.h"
 
+/*
+ * ensure GTAGSLIBPATH compares correctly
+ */
+#if defined(_WIN32) || defined(__DJGPP__)
+#define STRCMP stricmp
+#define back2slash(sb) do {		\
+	char *p = strbuf_value(sb);	\
+	for (; *p; p++) 		\
+		if (*p == '\\')         \
+			*p = '/';       \
+} while (0)
+#else
+#define STRCMP strcmp
+#define back2slash(sb)
+#endif
+
+/*
+ * enable [set] globbing, if available
+ */
+#ifdef __CRT_GLOB_BRACKET_GROUPS__
+int _CRT_glob = __CRT_GLOB_USE_MINGW__ | __CRT_GLOB_BRACKET_GROUPS__;
+#endif
+
 /**
  * @file global.c
  * @NAME{global} - print locations of the specified object.
@@ -339,12 +362,13 @@ finish:
 
 		sb = strbuf_open(0);
 		strbuf_puts(sb, getenv("GTAGSLIBPATH"));
+		back2slash(sb);
 		for (libdir = strbuf_value(sb); libdir; libdir = nextp) {
 			 if ((nextp = locatestring(libdir, PATHSEP, MATCH_FIRST)) != NULL)
                                 *nextp++ = 0;
 			if (!gtagsexist(libdir, libdbpath, sizeof(libdbpath), 0))
 				continue;
-			if (!strcmp(dbpath, libdbpath))
+			if (!STRCMP(dbpath, libdbpath))
 				continue;
 			dbop = dbop_open(makepath(libdbpath, dbname(GTAGS), NULL), 0, 0, 0);
 			if (dbop == NULL)
@@ -997,15 +1021,16 @@ completion(const char *dbpath, const cha
 		char *libdir, *nextp = NULL;
 
 		strbuf_puts(sb, getenv("GTAGSLIBPATH"));
+		back2slash(sb);
 		/*
-		* search for each tree in the library path.
-		*/
+		 * search for each tree in the library path.
+		 */
 		for (libdir = strbuf_value(sb); libdir; libdir = nextp) {
 			if ((nextp = locatestring(libdir, PATHSEP, MATCH_FIRST)) != NULL)
 				*nextp++ = 0;
 			if (!gtagsexist(libdir, libdbpath, sizeof(libdbpath), 0))
 				continue;
-			if (!strcmp(dbpath, libdbpath))
+			if (!STRCMP(dbpath, libdbpath))
 				continue;
 			if (!test("f", makepath(libdbpath, dbname(db), NULL)))
 				continue;
@@ -1788,6 +1813,7 @@ tagsearch(const char *pattern, const cha
 		char *libdir, *nextp = NULL;
 
 		strbuf_puts(sb, getenv("GTAGSLIBPATH"));
+		back2slash(sb);
 		/*
 		 * search for each tree in the library path.
 		 */
@@ -1796,7 +1822,7 @@ tagsearch(const char *pattern, const cha
 				*nextp++ = 0;
 			if (!gtagsexist(libdir, libdbpath, sizeof(libdbpath), 0))
 				continue;
-			if (!strcmp(dbpath, libdbpath))
+			if (!STRCMP(dbpath, libdbpath))
 				continue;
 			if (!test("f", makepath(libdbpath, dbname(db), NULL)))
 				continue;
diff -urp global-6.5/gtags/gtags.c global-6-5/gtags/gtags.c
--- global-6.5/gtags/gtags.c	2015-06-10 11:45:07 +1000
+++ global-6-5/gtags/gtags.c	2015-06-12 21:35:49 +1000
@@ -56,6 +56,13 @@
 #include "parser.h"
 #include "const.h"
 
+/*
+ * enable [set] globbing, if available
+ */
+#ifdef __CRT_GLOB_BRACKET_GROUPS__
+int _CRT_glob = __CRT_GLOB_USE_MINGW__ | __CRT_GLOB_BRACKET_GROUPS__;
+#endif
+
 /**
  @file
  @NAME{gtags} - create tag files for @NAME{global}.
diff -urp global-6.5/libutil/abs2rel.c global-6-5/libutil/abs2rel.c
--- global-6.5/libutil/abs2rel.c	2015-06-10 11:45:09 +1000
+++ global-6-5/libutil/abs2rel.c	2015-06-12 22:10:31 +1000
@@ -38,6 +38,11 @@
 #include "path.h"
 #if defined(_WIN32) || defined(__DJGPP__)
 #include "checkalloc.h"
+#define LOCATEFLAG MATCH_AT_FIRST|IGNORE_CASE
+#define PATHCHAR(c) tolower(c)
+#else
+#define LOCATEFLAG MATCH_AT_FIRST
+#define PATHCHAR(c) c
 #endif
 
 #define COLOR_PATH
@@ -217,9 +222,9 @@ normalize(const char *path, const char *
 	 *      rootdir  /a/b/
 	 *      path     /a/b/c/d.c -> c/d.c -> ./c/d.c
 	 */
-	p = locatestring(abs, root, MATCH_AT_FIRST);
+	p = locatestring(abs, root, LOCATEFLAG);
 	if (p == NULL) {
-		p = locatestring(root, abs, MATCH_AT_FIRST);
+		p = locatestring(root, abs, LOCATEFLAG);
 		/*
 		 * abs == /usr/src should be considered to be equal to root == /usr/src/.
 		 */
@@ -402,7 +407,7 @@ abs2rel(const char *path, const char *ba
 				die("invalid escape sequence in the path. '%s'", path);
 		}
 #endif
-		if (*pp != *bp)
+		if (PATHCHAR(*pp) != PATHCHAR(*bp))
 			break;
 		if (*pp == '/')
 			branch = pp;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.