Commit 9817cf3f authored by Francesco Potortì's avatar Francesco Potortì
Browse files

(main): Use canonicalize_filename on tags file name.

(relative_filename): Revert 3.85: do not collapse slashes here.
(absolute_dirname): Remove useless call to canonicalize_filename.
(canonicalize_filename): Collapse multiple slashes here.
parent 228a8cfd
......@@ -75,11 +75,11 @@ University of California, as described above. */
/*
* If you want to add support for a new language, start by looking at the LUA
* language, which is the simplest. Alternatively, consider shipping a
* configuration file containing regexp definitions for etags.
* language, which is the simplest. Alternatively, consider distributing etags
* together with a configuration file containing regexp definitions for etags.
*/
char pot_etags_version[] = "@(#) pot revision number is 17.38";
char pot_etags_version[] = "@(#) pot revision number is 17.38.1.3";
#define TRUE 1
#define FALSE 0
......@@ -892,7 +892,7 @@ etags --help --lang=ada.");
# define EMACS_NAME "standalone"
#endif
#ifndef VERSION
# define VERSION "17.38"
# define VERSION "17.38.1.3"
#endif
static void
print_version ()
......@@ -1264,7 +1264,10 @@ main (argc, argv)
|| strneq (tagfile, "/dev/", 5))
tagfiledir = cwd;
else
{
canonicalize_filename (tagfile);
tagfiledir = absolute_dirname (tagfile, cwd);
}
init (); /* set up boolean "functions" */
......@@ -1420,7 +1423,7 @@ get_compressor_from_suffix (file, extptr)
compressor *compr;
char *slash, *suffix;
/* This relies on FN to be after canonicalize_filename,
/* File has been processed by canonicalize_filename,
so we don't need to consider backslashes on DOS_NT. */
slash = etags_strrchr (file, '/');
suffix = etags_strrchr (file, '.');
......@@ -6221,7 +6224,7 @@ readline (lbp, stream)
discard_until_line_directive = FALSE; /* found it */
name = lbp->buffer + start;
*endp = '\0';
canonicalize_filename (name); /* for DOS */
canonicalize_filename (name);
taggedabsname = absolute_filename (name, tagfiledir);
if (filename_is_absolute (name)
|| filename_is_absolute (curfdp->infname))
......@@ -6636,14 +6639,8 @@ relative_filename (file, dir)
/* Build a sequence of "../" strings for the resulting relative file name. */
i = 0;
while (*dp == '/')
++dp;
while ((dp = etags_strchr (dp + 1, '/')) != NULL)
{
i += 1;
while (*dp == '/')
++dp;
}
res = xnew (3*i + strlen (fp + 1) + 1, char);
res[0] = '\0';
while (i-- > 0)
......@@ -6730,7 +6727,6 @@ absolute_dirname (file, dir)
char *slashp, *res;
char save;
canonicalize_filename (file);
slashp = etags_strrchr (file, '/');
if (slashp == NULL)
return savestr (dir);
......@@ -6755,27 +6751,38 @@ filename_is_absolute (fn)
);
}
/* Translate backslashes into slashes. Works in place. */
/* Upcase DOS drive letter and collapse separators into single slashes.
Works in place. */
static void
canonicalize_filename (fn)
register char *fn;
{
register char* cp;
char sep = '/';
#ifdef DOS_NT
/* Canonicalize drive letter case. */
if (fn[0] != '\0' && fn[1] == ':' && ISLOWER (fn[0]))
fn[0] = upcase (fn[0]);
/* Convert backslashes to slashes. */
for (; *fn != '\0'; fn++)
if (*fn == '\\')
*fn = '/';
#else
/* No action. */
fn = NULL; /* shut up the compiler */
sep = '\\';
#endif
/* Collapse multiple separators into a single slash. */
for (cp = fn; *cp != '\0'; cp++, fn++)
if (*cp == sep)
{
*fn = '/';
while (cp[1] == sep)
cp++;
}
else
*fn = *cp;
*fn = '\0';
}
/* Initialize a linebuffer for use */
/* Initialize a linebuffer for use. */
static void
linebuffer_init (lbp)
linebuffer *lbp;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment