+2004-08-20 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR 5620
+ * gcc.c (struct stat input_stat): Don't define if
+ HOST_LACKS_INODE_NUMBERS
+ (do_spec_1): If HOST_LACKS_INODE_NUMBERS, use lrealpath rather
+ than stat to determine if temp file is same as input file.
+ * doc/hostconfig.texi: Document HOST_LACKS_INODE_NUMBERS.
+ * config/i386/xm-mingw32.h: Define HOST_LACKS_INODE_NUMBERS
+
2004-08-20 Richard Sandiford <rsandifo@redhat.com>
* configure.ac (mips*-*-*): Print an error if not using GAS.
should define this macro if the default version does not reliably remove
the temp file as, for example, on VMS which allows multiple versions
of a file.
+
+@item HOST_LACKS_INODE_NUMBERS
+Define this macro if the host filesystem does not report meaningful inode
+numbers in struct stat.
@end ftable
@node Host Misc
static int suffixed_basename_length;
static const char *input_basename;
static const char *input_suffix;
+#ifndef HOST_LACKS_INODE_NUMBERS
static struct stat input_stat;
+#endif
static int input_stat_set;
/* The compiler used to process the current input file. */
*((char *) temp_filename + temp_filename_length) = '\0';
if (strcmp (temp_filename, input_filename) != 0)
{
+#ifndef HOST_LACKS_INODE_NUMBERS
struct stat st_temp;
/* Note, set_input() resets input_stat_set to 0. */
and we can do the stat for the temp_filename
then the they could still refer to the same
file if st_dev/st_ino's are the same. */
-
if (input_stat_set != 1
|| stat (temp_filename, &st_temp) < 0
|| input_stat.st_dev != st_temp.st_dev
|| input_stat.st_ino != st_temp.st_ino)
+#else
+ /* Just compare canonical pathnames. */
+ char* input_realname = lrealpath (input_filename);
+ char* temp_realname = lrealpath (temp_filename);
+ bool files_differ = strcmp (input_realname, temp_realname);
+ free (input_realname);
+ free (temp_realname);
+ if (files_differ)
+#endif
{
temp_filename = save_string (temp_filename,
temp_filename_length + 1);