-/* Copyright (C) 1991, 1992, 1996, 1998, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1996, 1998, 2001, 2006, 2013,
+ 2014 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.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
-#include "libguile/scmconfig.h"
+#include "libguile/__scm.h"
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <process.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;
-#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:
{
static const char letters[]
= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- static gcc_uint64_t value;
+ static scm_t_uint64 value;
#ifdef HAVE_GETTIMEOFDAY
struct timeval tv;
#endif
#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. */
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;