OSDN Git Service

* mkstemps.c (mkstemps): If open failed with errno other than
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Jul 2008 18:56:35 +0000 (18:56 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Jul 2008 18:56:35 +0000 (18:56 +0000)
EEXIST, return immediately.
* make-temp-file.c: Include errno.h.
(make_temp_file): If mkstemps failed, print an error message
before aborting.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@138429 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/make-temp-file.c
libiberty/mkstemps.c

index bf52f9e..da52583 100644 (file)
@@ -1,3 +1,11 @@
+2008-07-31  Denys Vlasenko  <dvlasenk@redhat.com>
+
+       * mkstemps.c (mkstemps): If open failed with errno other than
+       EEXIST, return immediately.
+       * make-temp-file.c: Include errno.h.
+       (make_temp_file): If mkstemps failed, print an error message
+       before aborting.
+
 2008-07-24  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * maint-tool (deps): Output config.h instead of stamp-h.
index 5e21414..94c76d7 100644 (file)
@@ -23,6 +23,7 @@ Boston, MA 02110-1301, USA.  */
 
 #include <stdio.h>     /* May get P_tmpdir.  */
 #include <sys/types.h>
+#include <errno.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -166,11 +167,14 @@ make_temp_file (const char *suffix)
   strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix);
 
   fd = mkstemps (temp_filename, suffix_len);
-  /* If mkstemps failed, then something bad is happening.  Maybe we should
-     issue a message about a possible security attack in progress?  */
+  /* Mkstemps failed.  It may be EPERM, ENOSPC etc.  */
   if (fd == -1)
-    abort ();
-  /* Similarly if we can not close the file.  */
+    {
+      fprintf (stderr, "Cannot create temporary file in %s: %s\n",
+              base, strerror (errno));
+      abort ();
+    }
+  /* We abort on failed close out of sheer paranoia.  */
   if (close (fd))
     abort ();
   return temp_filename;
index 6c2e472..093b67a 100644 (file)
@@ -127,6 +127,9 @@ mkstemps (char *pattern, int suffix_len)
       if (fd >= 0)
        /* The file does not exist.  */
        return fd;
+      if (errno != EEXIST)
+       /* Fatal error (EPERM, ENOSPC etc).  Doesn't make sense to loop.  */
+       break;
 
       /* This is a random value.  It is only necessary that the next
         TMP_MAX values generated by adding 7777 to VALUE are different