]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix quoting of file names in 'ctags'
authorEli Zaretskii <eliz@gnu.org>
Fri, 1 Jul 2022 13:17:40 +0000 (16:17 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 1 Jul 2022 13:17:40 +0000 (16:17 +0300)
* lib-src/etags.c (main) [WINDOWSNT || MSDOS]: Quote file names
according to the rules of the system shells.

lib-src/etags.c

index 9a60714ecab365df7cbb1904fe4ba1169162fcd9..ef1125792645e6e0ac64e42b204b1667f62522d7 100644 (file)
@@ -1431,6 +1431,16 @@ main (int argc, char **argv)
           setenv ("LC_COLLATE", "C", 1);
           setenv ("LC_ALL", "C", 1); */
        char *cmd = xmalloc (8 * strlen (tagfile) + sizeof "sort -u -o '' ''");
+#if defined WINDOWSNT || defined MSDOS
+       /* Quote "like this".  No need to escape the quotes in the file name,
+          since it is not allowed in file names on these systems.  */
+       char *z = stpcpy (cmd, "sort -u -o \"");
+       z = stpcpy (z, tagfile);
+       z = stpcpy (z, "\" \"");
+       z = stpcpy (z, tagfile);
+       stpcpy (z, "\"");
+#else
+       /* Quote 'like this', and escape the apostrophe in the file name.  */
        char *z = stpcpy (cmd, "sort -u -o '");
        char *escaped_tagfile = z;
        for (; *tagfile; *z++ = *tagfile++)
@@ -1440,6 +1450,7 @@ main (int argc, char **argv)
        z = stpcpy (z, "' '");
        z = mempcpy (z, escaped_tagfile, escaped_tagfile_len);
        strcpy (z, "'");
+#endif
        return system (cmd);
       }
   return EXIT_SUCCESS;