VM: Add ASM_MUL for x86.
[bpt/guile.git] / libguile / mkstemp.c
index ce7c376..a7eaf10 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996, 1998, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1996, 1998, 2001, 2006, 2013 Free Software Foundation, Inc.
    This file is derived from mkstemps.c from the GNU Libiberty Library
    which in turn is derived from the GNU C Library.
 
 
    You should have received a copy of the GNU Library General Public
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA. 
+*/
 
-#include "libguile/scmconfig.h"
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "libguile/__scm.h"
 
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
-
-/* We need to provide a type for gcc_uint64_t.  */
-#ifdef __GNUC__
-typedef unsigned long long gcc_uint64_t;
-#else
-typedef unsigned long gcc_uint64_t;
+#ifdef __MINGW32__
+#include <process.h>
 #endif
 
 #ifndef TMP_MAX
 #define TMP_MAX 16384
 #endif
 
+/* We provide this prototype to avoid compiler warnings.  If this ever
+   conflicts with a declaration in a system header file, we'll find
+   out, because we should include that header file here.  */
+int mkstemp (char *);
+
 /* Generate a unique temporary file name from TEMPLATE.
 
    TEMPLATE has the form:
@@ -62,7 +68,7 @@ mkstemp (template)
 {
   static const char letters[]
     = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-  static gcc_uint64_t value;
+  static scm_t_uint64 value;
 #ifdef HAVE_GETTIMEOFDAY
   struct timeval tv;
 #endif
@@ -83,14 +89,14 @@ mkstemp (template)
 #ifdef HAVE_GETTIMEOFDAY
   /* Get some more or less random data.  */
   gettimeofday (&tv, NULL);
-  value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
+  value += ((scm_t_uint64) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
 #else
   value += getpid ();
 #endif
 
   for (count = 0; count < TMP_MAX; ++count)
     {
-      gcc_uint64_t v = value;
+      scm_t_uint64 v = value;
       int fd;
 
       /* Fill in the random bits.  */
@@ -106,7 +112,7 @@ mkstemp (template)
       v /= 62;
       XXXXXX[5] = letters[v % 62];
 
-      fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600);
+      fd = open (template, O_RDWR|O_CREAT|O_EXCL|O_BINARY, 0600);
       if (fd >= 0)
        /* The file does not exist.  */
        return fd;