/* Utility and Unix shadow routines for GNU Emacs support programs on NT.
-Copyright (C) 1994, 2001-2013 Free Software Foundation, Inc.
+Copyright (C) 1994, 2001-2016 Free Software Foundation, Inc.
Author: Geoff Voelker (voelker@cs.washington.edu)
Created: 10-8-94
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "ntlib.h"
+char *sys_ctime (const time_t *);
+FILE *sys_fopen (const char *, const char *);
+int sys_chdir (const char *);
+int mkostemp (char *, int);
+int sys_rename (const char *, const char *);
+
/* MinGW64 defines _TIMEZONE_DEFINED and defines 'struct timespec' in
its system headers. */
#ifndef _TIMEZONE_DEFINED
};
#endif
+void gettimeofday (struct timeval *, struct timezone *);
+
#define MAXPATHLEN _MAX_PATH
/* Emulate sleep...we could have done this with a define, but that
stricmp (p, ".cmd") == 0));
}
-/* FIXME? This is in config.nt now - is this still needed? */
+/* FIXME? This is in configure.ac now - is this still needed? */
#define IS_DIRECTORY_SEP(x) ((x) == '/' || (x) == '\\')
/* We need this because nt/inc/sys/stat.h defines struct stat that is
}
/* Implementation of mkostemp for MS-Windows, to avoid race conditions
- when using mktemp.
+ when using mktemp. Copied from w32.c.
- Standard algorithm for generating a temporary file name seems to be
- use pid or tid with a letter on the front (in place of the 6 X's)
- and cycle through the letters to find a unique name. We extend
- that to allow any reasonable character as the first of the 6 X's,
- so that the number of simultaneously used temporary files will be
- greater. */
+ This is used only in update-game-score.c. It is overkill for that
+ use case, since update-game-score renames the temporary file into
+ the game score file, which isn't atomic on MS-Windows anyway, when
+ the game score already existed before running the program, which it
+ almost always does. But using a simpler implementation just to
+ make a point is uneconomical... */
int
mkostemp (char * template, int flags)
/* Template is badly formed or else we can't generate a unique name. */
return -1;
}
+
+/* On Windows, you cannot rename into an existing file. */
+int
+sys_rename (const char *from, const char *to)
+{
+ int retval = rename (from, to);
+
+ if (retval < 0 && errno == EEXIST)
+ {
+ if (unlink (to) == 0)
+ retval = rename (from, to);
+ }
+ return retval;
+}