From 4489800d000d008d3bf47ffcdc85349eff1aec14 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Fri, 25 Mar 2011 20:11:26 +0100 Subject: [PATCH] files.c (file_hash_eq): Use filename_cmp instead of strcmp. 2011-03-25 Kai Tietz * files.c (file_hash_eq): Use filename_cmp instead of strcmp. (nonexistent_file_hash_eq): Likewise. (remap_filename): Likewise. Handle absolute DOS-path, (append_file_to_dir): Check for IS_DIR_SEPARATOR instead of slash. (read_name_map): Likewise. * linemap.c (linemap_add): Use filename_cmp instead of strcmp. * mkdeps.c (apply_vpath): Use filename_ncmp instead of strncmp. (deps_restore): Use filename_cmp instead of strcmp. * init.c (read_original_directory): Use IS_DIR_SEPARATOR instead of checking for slash. From-SVN: r171521 --- libcpp/ChangeLog | 19 +++++++++++++++++++ libcpp/files.c | 20 ++++++++++++++------ libcpp/init.c | 5 +++-- libcpp/line-map.c | 2 +- libcpp/mkdeps.c | 4 ++-- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index c08e6fe139b..cfd07d4590b 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,22 @@ +2011-03-25 Kai Tietz + + * files.c (file_hash_eq): Use filename_cmp + instead of strcmp. + (nonexistent_file_hash_eq): Likewise. + (remap_filename): Likewise. + Handle absolute DOS-path, + (append_file_to_dir): Check for IS_DIR_SEPARATOR + instead of slash. + (read_name_map): Likewise. + * linemap.c (linemap_add): Use filename_cmp + instead of strcmp. + * mkdeps.c (apply_vpath): Use filename_ncmp + instead of strncmp. + (deps_restore): Use filename_cmp instead of + strcmp. + * init.c (read_original_directory): Use + IS_DIR_SEPARATOR instead of checking for slash. + 2011-03-21 Michael Meissner PR preprocessor/48192 diff --git a/libcpp/files.c b/libcpp/files.c index 456c0b0f1a5..e3cff498d8c 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -1155,7 +1155,7 @@ file_hash_eq (const void *p, const void *q) else hname = entry->u.dir->name; - return strcmp (hname, fname) == 0; + return filename_cmp (hname, fname) == 0; } /* Compare entries in the nonexistent file hash table. These are just @@ -1163,7 +1163,7 @@ file_hash_eq (const void *p, const void *q) static int nonexistent_file_hash_eq (const void *p, const void *q) { - return strcmp ((const char *) p, (const char *) q) == 0; + return filename_cmp ((const char *) p, (const char *) q) == 0; } /* Initialize everything in this source file. */ @@ -1413,7 +1413,7 @@ append_file_to_dir (const char *fname, cpp_dir *dir) flen = strlen (fname); path = XNEWVEC (char, dlen + 1 + flen + 1); memcpy (path, dir->name, dlen); - if (dlen && path[dlen - 1] != '/') + if (dlen && !IS_DIR_SEPARATOR (path[dlen - 1])) path[dlen++] = '/'; memcpy (&path[dlen], fname, flen + 1); @@ -1461,7 +1461,7 @@ read_name_map (cpp_dir *dir) len = dir->len; name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1); memcpy (name, dir->name, len); - if (len && name[len - 1] != '/') + if (len && !IS_DIR_SEPARATOR (name[len - 1])) name[len++] = '/'; strcpy (name + len, FILE_NAME_MAP_FILE); f = fopen (name, "r"); @@ -1532,10 +1532,18 @@ remap_filename (cpp_reader *pfile, _cpp_file *file) read_name_map (dir); for (index = 0; dir->name_map[index]; index += 2) - if (!strcmp (dir->name_map[index], fname)) + if (!filename_cmp (dir->name_map[index], fname)) return xstrdup (dir->name_map[index + 1]); - + if (IS_ABSOLUTE_PATH (fname)) + return NULL; p = strchr (fname, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strchr (fname, '\\'); + if (!p || (p > p2)) + p = p2; + } +#endif if (!p || p == fname) return NULL; diff --git a/libcpp/init.c b/libcpp/init.c index cfc16e8f8d4..5c6dacf205e 100644 --- a/libcpp/init.c +++ b/libcpp/init.c @@ -26,6 +26,7 @@ along with this program; see the file COPYING3. If not see #include "internal.h" #include "mkdeps.h" #include "localedir.h" +#include "filenames.h" static void init_library (void); static void mark_named_operators (cpp_reader *, int); @@ -640,8 +641,8 @@ read_original_directory (cpp_reader *pfile) if (token->type != CPP_STRING || ! (token->val.str.len >= 5 - && token->val.str.text[token->val.str.len-2] == '/' - && token->val.str.text[token->val.str.len-3] == '/')) + && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2]) + && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3]))) { _cpp_backup_tokens (pfile, 3); return; diff --git a/libcpp/line-map.c b/libcpp/line-map.c index a82c4286f07..86e2484fd0a 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -138,7 +138,7 @@ linemap_add (struct line_maps *set, enum lc_reason reason, else { from = INCLUDED_FROM (set, map - 1); - error = to_file && strcmp (from->to_file, to_file); + error = to_file && filename_cmp (from->to_file, to_file); } /* Depending upon whether we are handling preprocessed input or diff --git a/libcpp/mkdeps.c b/libcpp/mkdeps.c index faac1623dde..af11ac3a6e3 100644 --- a/libcpp/mkdeps.c +++ b/libcpp/mkdeps.c @@ -130,7 +130,7 @@ apply_vpath (struct deps *d, const char *t) unsigned int i; for (i = 0; i < d->nvpaths; i++) { - if (!strncmp (d->vpathv[i], t, d->vpathlv[i])) + if (!filename_ncmp (d->vpathv[i], t, d->vpathlv[i])) { const char *p = t + d->vpathlv[i]; if (!IS_DIR_SEPARATOR (*p)) @@ -421,7 +421,7 @@ deps_restore (struct deps *deps, FILE *fd, const char *self) buf[num_to_read] = '\0'; /* Generate makefile dependencies from .pch if -nopch-deps. */ - if (self != NULL && strcmp (buf, self) != 0) + if (self != NULL && filename_cmp (buf, self) != 0) deps_add_dep (deps, buf); }