diff options
author | Anthony Brandon <anthony.brandon@gmail.com> | 2014-11-05 17:23:46 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2014-11-05 17:23:46 +0000 |
commit | 9c7a77fcc3d2895ec72639aa7a2067280a612268 (patch) | |
tree | f8a561245dafdb2b46ed8280e973df9662ea69bd /libiberty | |
parent | 701cade1a260d5a78662e304a7cac0aaf2d77951 (diff) | |
download | gcc-9c7a77fcc3d2895ec72639aa7a2067280a612268.zip gcc-9c7a77fcc3d2895ec72639aa7a2067280a612268.tar.gz gcc-9c7a77fcc3d2895ec72639aa7a2067280a612268.tar.bz2 |
re PR driver/36312 (should refuse to overwrite input file with output file)
gcc/testsuite/ChangeLog:
2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
PR driver/36312
* gcc.misc-tests/output.exp: New test case for identical input and
output files.
include/ChangeLog:
2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
PR driver/36312
* filenames.h: Add prototype for canonical_filename_eq.
gcc/ChangeLog:
2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
PR driver/36312
* diagnostic-core.h: Add prototype for fatal_error.
* diagnostic.c (fatal_error): New function fatal_error.
* gcc.c (store_arg): Remove have_o_argbuf_index.
(process_command): Check if input and output files are the same.
* toplev.c (init_asm_output): Check if input and output files are
the same.
libiberty/ChangeLog:
2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
PR driver/36312
* filename_cmp.c (canonical_filename_eq): New function to check if
file names are the same.
* functions.texi: Updated with documentation for new function.
From-SVN: r217149
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 7 | ||||
-rw-r--r-- | libiberty/filename_cmp.c | 29 | ||||
-rw-r--r-- | libiberty/functions.texi | 18 |
3 files changed, 50 insertions, 4 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index ff06b18..738965c 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,10 @@ +2014-11-05 Anthony Brandon <anthony.brandon@gmail.com> + + PR driver/36312 + * filename_cmp.c (canonical_filename_eq): New function to check if + file names are the same. + * functions.texi: Updated with documentation for new function. + 2014-11-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * sigsetmask.c (_POSIX_SOURCE): Remove. diff --git a/libiberty/filename_cmp.c b/libiberty/filename_cmp.c index 9e16d24..150488c 100644 --- a/libiberty/filename_cmp.c +++ b/libiberty/filename_cmp.c @@ -24,8 +24,13 @@ #include <string.h> #endif +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + #include "filenames.h" #include "safe-ctype.h" +#include "libiberty.h" /* @@ -190,3 +195,27 @@ filename_eq (const void *s1, const void *s2) /* The casts are for -Wc++-compat. */ return filename_cmp ((const char *) s1, (const char *) s2) == 0; } + +/* + +@deftypefn Extension int canonical_filename_eq (const char *@var{a}, const char *@var{b}) + +Return non-zero if file names @var{a} and @var{b} are equivalent. +This function compares the canonical versions of the filenames as returned by +@code{lrealpath()}, so that so that different file names pointing to the same +underlying file are treated as being identical. + +@end deftypefn + +*/ + +int +canonical_filename_eq (const char * a, const char * b) +{ + char * ca = lrealpath(a); + char * cb = lrealpath(b); + int res = filename_eq (ca, cb); + free (ca); + free (cb); + return res; +} diff --git a/libiberty/functions.texi b/libiberty/functions.texi index 3627285..9ed9ff0 100644 --- a/libiberty/functions.texi +++ b/libiberty/functions.texi @@ -125,6 +125,16 @@ Uses @code{malloc} to allocate storage for @var{nelem} objects of @end deftypefn +@c filename_cmp.c:201 +@deftypefn Extension int canonical_filename_eq (const char *@var{a}, const char *@var{b}) + +Return non-zero if file names @var{a} and @var{b} are equivalent. +This function compares the canonical versions of the filenames as returned by +@code{lrealpath()}, so that so that different file names pointing to the same +underlying file are treated as being identical. + +@end deftypefn + @c choose-temp.c:45 @deftypefn Extension char* choose_temp_base (void) @@ -286,7 +296,7 @@ value 1). If @var{valu} is zero, zero is returned. @end deftypefn -@c filename_cmp.c:32 +@c filename_cmp.c:37 @deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2}) Return zero if the two file names @var{s1} and @var{s2} are equivalent. @@ -303,7 +313,7 @@ and backward slashes are equal. @end deftypefn -@c filename_cmp.c:178 +@c filename_cmp.c:183 @deftypefn Extension int filename_eq (const void *@var{s1}, const void *@var{s2}) Return non-zero if file names @var{s1} and @var{s2} are equivalent. @@ -311,7 +321,7 @@ This function is for use with hashtab.c hash tables. @end deftypefn -@c filename_cmp.c:147 +@c filename_cmp.c:152 @deftypefn Extension hashval_t filename_hash (const void *@var{s}) Return the hash value for file name @var{s} that will be compared @@ -320,7 +330,7 @@ This function is for use with hashtab.c hash tables. @end deftypefn -@c filename_cmp.c:89 +@c filename_cmp.c:94 @deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) Return zero if the two file names @var{s1} and @var{s2} are equivalent |