> gtags: New --skip-symlink option.

Made this work with MinGW; ignore it with djgpp.

> gtags-cscope: 'Find assignments to this symbol:' was implemented.

Implemented for DOS & Windows (via sed).  Should it support compound
assignment ('+=' and the like)?

-- 
Jason.
diff -urp global-6.6.3/gtags-cscope/find.c global-6.6-3/gtags-cscope/find.c
--- global-6.6.3/gtags-cscope/find.c    2018-12-17 12:54:33 +1000
+++ global-6.6-3/gtags-cscope/find.c    2018-12-18 15:57:10 +1000
@@ -247,13 +247,27 @@ findinclude(char *pattern)
 /*
  * [display.c]
  *
- * {"Find", "assignments to this symbol (N/A)",    findassign},
+ * {"Find", "assignments to this symbol",    findassign},
  */
 char *
 findassign(char *pattern)
 {
-       /* Since this function has not yet been implemented, it always returns 
an error. */
-       return FAILED;
+       int status;
+       STATIC_STRBUF(sb);
+       strbuf_clear(sb);
+
+       strbuf_puts(sb, common());
+       strbuf_sprintf(sb, " -d %s | sed -n /\\b%s\\b\"[ \t]*=[^=]\"/p > %s", 
quote_shell(pattern), quote_shell(pattern), temp1);
+       status = mysystem("findassign_1", strbuf_value(sb));
+       if (status != 0)
+               return FAILED;
+       strbuf_reset(sb);
+       strbuf_puts(sb, common());
+       strbuf_sprintf(sb, " -rs %s | sed -n /\\b%s\\b\"[ \t]*=[^=]\"/p >> %s", 
quote_shell(pattern), quote_shell(pattern), temp1);
+       status = mysystem("findassign_2", strbuf_value(sb));
+       if (status != 0)
+               return FAILED;
+       return NULL;
 }
 #else /* UNIX */
 /*
diff -urp global-6.6.3/libutil/find.c global-6.6-3/libutil/find.c
--- global-6.6.3/libutil/find.c 2018-12-17 12:54:34 +1000
+++ global-6.6-3/libutil/find.c 2018-12-18 12:52:01 +1000
@@ -44,6 +44,11 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#undef SLIST_ENTRY
+#endif
 
 #include "gparam.h"
 #include "regex.h"
@@ -615,24 +620,32 @@ getdirs(const char *dir, STRBUF *sb)
                        warning("cannot read '%s'. ignored.", 
trimpath(dp->d_name));
                        continue;
                }
+#ifndef __DJGPP__
                if (skip_symlink > 0) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+                       DWORD attr = GetFileAttributes(makepath(dir, 
dp->d_name, NULL));
+                       if (attr != -1 && (attr & FILE_ATTRIBUTE_REPARSE_POINT))
+#else
                        struct stat st2;
 
                        if (lstat(makepath(dir, dp->d_name, NULL), &st2) < 0) {
                                warning("cannot lstat '%s'. ignored.", 
trimpath(dp->d_name));
                                continue;
                        }
-                       if (S_ISLNK(st2.st_mode)) {
+                       if (S_ISLNK(st2.st_mode))
+#endif
+                       {
                                if (((skip_symlink & SKIP_SYMLINK_FOR_DIR) && 
S_ISDIR(st.st_mode)) ||
                                    ((skip_symlink & SKIP_SYMLINK_FOR_FILE) && 
S_ISREG(st.st_mode)))
                                {
                                        if (find_explain)
-                                               fprintf(stderr, " - Symbolik 
link '%s' is skipped.\n",
+                                               fprintf(stderr, " - Symbolic 
link '%s' is skipped.\n",
                                                        trimpath(makepath(dir, 
dp->d_name, NULL)));
                                        continue;
                                }
                        }
                }
+#endif
                if (S_ISDIR(st.st_mode))
                        strbuf_putc(sb, 'd');
                else if (S_ISREG(st.st_mode))
_______________________________________________
Bug-global mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-global

Reply via email to