#define DONT_ENCAPSULATE
#include <config.h>
-
-#ifdef WIN32_NATIVE
-#ifdef MINGW
-#include <mingw32/process.h>
-#else
-/* <process.h> should not conflict with "process.h", as per ANSI definition.
- This is not true with visual c though. The trick below works with
- VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of
- standard way, so include path ends with /include.
-
- Unfortunately, this must go before lisp.h, since process.h defines abort()
- which will conflict with the macro defined in lisp.h
-*/
-#include <../include/process.h>
-#endif /* MINGW */
-#endif /* WIN32_NATIVE */
-
#include "lisp.h"
/* ------------------------------- */
#include "nt.h"
#endif
+#ifdef WIN32_NATIVE
+#ifdef MINGW
+#include <../mingw/process.h>
+#else
+/* <process.h> should not conflict with "process.h", as per ANSI definition.
+ This is not true with visual c though. The trick below works with
+ VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of
+ standard way, so include path ends with /include.
+*/
+#include <../include/process.h>
+#endif /* MINGW */
+#endif /* WIN32_NATIVE */
+
/* ------------------------------- */
/* TTY definitions */
/* ------------------------------- */
#include <sys/termio.h>
#endif
-/* ------------------------------- */
-/* miscellaneous */
-/* ------------------------------- */
-
-#ifndef HAVE_UTIMES
-#ifndef HAVE_STRUCT_UTIMBUF
-/* We want to use utime rather than utimes, but we couldn't find the
- structure declaration. We'll use the traditional one. */
-struct utimbuf
-{
- long actime;
- long modtime;
-};
-#endif
-#endif
-
\f
/************************************************************************/
/* subprocess control */
sg.sg_ospeed = B9600;
if (ioctl (input_fd, TIOCGETP, &sg) < 0)
- abort ();
+ ABORT ();
DEVICE_TTY_DATA (d)->ospeed = sg.sg_ospeed;
#endif
}
#ifdef DATA_START
return ((char *) DATA_START);
#else
-#ifdef ORDINARY_LINK
+#if defined (ORDINARY_LINK) || defined(PDUMP)
/*
* This is a hack. Since we're not linking crt0.c or pre_crt0.c,
* data_start isn't defined. We take the address of environ, which
xzero (hints);
hints.ai_flags = AI_CANONNAME;
+#ifdef IPV6_CANONICALIZE
hints.ai_family = AF_UNSPEC;
+#else
+ hints.ai_family = PF_INET;
+#endif
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
if (!getaddrinfo (hostname, NULL, &hints, &res))
if (rtnval == NULL) /* End of directory */
return NULL;
{
- Extcount external_len;
- int ascii_filename_p = 1;
const Extbyte * const external_name = (const Extbyte *) rtnval->d_name;
-
- /* Optimize for the common all-ASCII case, computing len en passant */
- for (external_len = 0; external_name[external_len] ; external_len++)
- {
- if (!BYTE_ASCII_P (external_name[external_len]))
- ascii_filename_p = 0;
- }
- if (ascii_filename_p)
+ Extcount external_len = strlen (rtnval->d_name);
+ const Bufbyte *internal_name;
+ Bytecount internal_len;
+
+ TO_INTERNAL_FORMAT (DATA, (external_name, external_len),
+ ALLOCA, (internal_name, internal_len),
+ Qfile_name);
+
+ /* check for common case of ASCII filename */
+ if (internal_len == external_len &&
+ !memcmp (external_name, internal_name, internal_len))
return rtnval;
{ /* Non-ASCII filename */
static Bufbyte_dynarr *internal_DIRENTRY;
- const Bufbyte *internal_name;
- Bytecount internal_len;
if (!internal_DIRENTRY)
internal_DIRENTRY = Dynarr_new (Bufbyte);
else
Dynarr_add_many (internal_DIRENTRY, (Bufbyte *) rtnval,
offsetof (DIRENTRY, d_name));
- TO_INTERNAL_FORMAT (DATA, (external_name, external_len),
- ALLOCA, (internal_name, internal_len),
- Qfile_name);
Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len);
Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */
/* Windows rename fails if NEW exists */
if (rename (old, new) == 0)
return 0;
- if (errno != EEXIST)
+ /* In some cases errno is EACCES if NEW exists */
+ if (errno != EEXIST && errno != EACCES)
+ return -1;
+ if (unlink (new) != 0)
return -1;
- unlink (new);
#endif /* WIN32_NATIVE */
return rename (old, new);
}
access to those functions goes through the following. */
int
-set_file_times (char *filename, EMACS_TIME atime, EMACS_TIME mtime)
+set_file_times (Lisp_Object path, EMACS_TIME atime, EMACS_TIME mtime)
{
-#ifdef HAVE_UTIMES
- struct timeval tv[2];
- tv[0] = atime;
- tv[1] = mtime;
- return utimes (filename, tv);
-#else /* not HAVE_UTIMES */
+#if defined (WIN32_NATIVE)
struct utimbuf utb;
utb.actime = EMACS_SECS (atime);
utb.modtime = EMACS_SECS (mtime);
+ return mswindows_utime (path, &utb);
+#elif defined (HAVE_UTIME)
+ struct utimbuf utb;
+ Extbyte *filename;
+ utb.actime = EMACS_SECS (atime);
+ utb.modtime = EMACS_SECS (mtime);
+ LISP_STRING_TO_EXTERNAL (path, filename, Qfile_name);
return utime (filename, &utb);
-#endif /* not HAVE_UTIMES */
+#elif defined (HAVE_UTIMES)
+ struct timeval tv[2];
+ Extbyte *filename;
+ tv[0] = atime;
+ tv[1] = mtime;
+ LISP_STRING_TO_EXTERNAL (path, filename, Qfile_name);
+ return utimes (filename, tv);
+#else
+ /* No file times setting function available. */
+ return -1;
+#endif
}
/* */
get_random (void)
{
long val = random ();
-#if VALBITS > RAND_BITS
+#if INT_VALBITS > RAND_BITS
val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 2*RAND_BITS
+#if INT_VALBITS > 2*RAND_BITS
val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 3*RAND_BITS
+#if INT_VALBITS > 3*RAND_BITS
val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 4*RAND_BITS
+#if INT_VALBITS > 4*RAND_BITS
val = (val << RAND_BITS) ^ random ();
#endif /* need at least 5 */
#endif /* need at least 4 */
#endif /* need at least 3 */
#endif /* need at least 2 */
- return val & ((1L << VALBITS) - 1);
+ return val & (EMACS_INT) ((1UL << INT_VALBITS) - 1);
}
\f
DEFER_GETTEXT ("bad argument to system call"), /* 12 SIGSYS */
DEFER_GETTEXT ("write on a pipe with no one to read it"), /* 13 SIGPIPE */
DEFER_GETTEXT ("alarm clock"), /* 14 SIGALRM */
- DEFER_GETTEXT ("software termination signum"), /* 15 SIGTERM */
+ DEFER_GETTEXT ("software termination signal"), /* 15 SIGTERM */
DEFER_GETTEXT ("user defined signal 1"), /* 16 SIGUSR1 */
DEFER_GETTEXT ("user defined signal 2"), /* 17 SIGUSR2 */
DEFER_GETTEXT ("death of a child"), /* 18 SIGCLD */
DEFER_GETTEXT ("bad argument to system call"), /* 12 SIGSYS */
DEFER_GETTEXT ("write on a pipe with no one to read it"), /* 13 SIGPIPE */
DEFER_GETTEXT ("alarm clock"), /* 14 SIGALRM */
- DEFER_GETTEXT ("software termination signum"), /* 15 SIGTERM */
+ DEFER_GETTEXT ("software termination signal"), /* 15 SIGTERM */
DEFER_GETTEXT ("user defined signal 1"), /* 16 SIGUSR1 */
DEFER_GETTEXT ("user defined signal 2"), /* 17 SIGUSR2 */
DEFER_GETTEXT ("death of a child"), /* 18 SIGCLD */