diff options
author | brobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-29 20:55:09 +0000 |
---|---|---|
committer | brobecke <brobecke@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-29 20:55:09 +0000 |
commit | c86c1cfc8ef0e6ced837690347359036e8504a38 (patch) | |
tree | 106ebdb208dd8b737d7e34ca9f4cbd3b5a5d00ac /libiberty/filename_cmp.c | |
parent | 1d8818820a052bfe2872cc7588a7bfb979a2027e (diff) | |
download | gcc-c86c1cfc8ef0e6ced837690347359036e8504a38.tar.gz |
* filename_cmp.c: New file.
* Makefile.in (CFILES): Add filename_cmp.c.
(REQUIRED_OFILES): Add filename_cmp.o
(filename_cmp.o): New rule.
* functions.texi: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123342 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libiberty/filename_cmp.c')
-rw-r--r-- | libiberty/filename_cmp.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c new file mode 100644 index 00000000000..5e12c82ca41 --- /dev/null +++ b/libiberty/filename_cmp.c @@ -0,0 +1,73 @@ +/* File name comparison routine. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#include <ctype.h> +#include "filenames.h" + +/* + +@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2}) + +Return zero if the two paths @var{s1} and @var{s2} are equivalent. +If not equivalent, the returned value is similar to what strcmp would +return. In other words, it returns a negative value if @var{s1} is less +than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}. + +This function does not normalize path names. As a result, this function +will treat filenames that are spelled differently as different even in +the case when the two filenames point to the same underlying file. +However, it does handle the fact that on DOS-like file systems, forward +and backward slashes are equal. + +@end deftypefn + +*/ + +int +filename_cmp (const char *s1, const char *s2) +{ +#ifndef HAVE_DOS_BASED_FILE_SYSTEM + return strcmp(s1, s2); +#else + for (;;) + { + int c1 = tolower (*s1); + int c2 = tolower (*s2); + + /* On DOS-based file systems, the '/' and the '\' are equivalent. */ + if (c1 == '/') + c1 = '\\'; + if (c2 == '/') + c2 = '\\'; + + if (c1 != c2) + return (c1 - c2); + + if (c1 == '\0') + return 0; + + s1++; + s2++; + } +#endif +} + |