aboutsummaryrefslogtreecommitdiff
path: root/libiberty/filename_cmp.c
diff options
context:
space:
mode:
authorAnthony Brandon <anthony.brandon@gmail.com>2014-11-11 23:33:25 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2014-11-11 23:33:25 +0000
commit3d00119cfbbcadccb56e5a0b8fe447ad7554d681 (patch)
treed4db9e599db1d46abb0414b25660560c2823a504 /libiberty/filename_cmp.c
parent3aa34c1d8f94fc56d66de3b8d09dbd8c2c9e8525 (diff)
downloadgcc-3d00119cfbbcadccb56e5a0b8fe447ad7554d681.zip
gcc-3d00119cfbbcadccb56e5a0b8fe447ad7554d681.tar.gz
gcc-3d00119cfbbcadccb56e5a0b8fe447ad7554d681.tar.bz2
re PR driver/36312 (should refuse to overwrite input file with output file)
gcc/testsuite/ChangeLog: 2014-11-11 Anthony Brandon <anthony.brandon@gmail.com> Manuel López-Ibáñez <manu@gcc.gnu.org> PR driver/36312 * gcc.misc-tests/output.exp: New test case for identical input and output files. include/ChangeLog: 2014-11-11 Anthony Brandon <anthony.brandon@gmail.com> Manuel López-Ibáñez <manu@gcc.gnu.org> PR driver/36312 * filenames.h: Add prototype for canonical_filename_eq. gcc/ChangeLog: 2014-11-11 Anthony Brandon <anthony.brandon@gmail.com> Manuel López-Ibáñez <manu@gcc.gnu.org> 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-11 Anthony Brandon <anthony.brandon@gmail.com> Manuel López-Ibáñez <manu@gcc.gnu.org> 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. Co-Authored-By: Manuel López-Ibáñez <manu@gcc.gnu.org> From-SVN: r217391
Diffstat (limited to 'libiberty/filename_cmp.c')
-rw-r--r--libiberty/filename_cmp.c29
1 files changed, 29 insertions, 0 deletions
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;
+}