X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsysdep.c;h=c307469bdba9a1a9a2b697c7dfeffd68da71fdbc;hb=9f776219afb5a98c5461444d744e3ce7e2ad44ec;hp=12cd3de538f60532e574f568a798756fb352ab70;hpb=0c693dc08f0794304711787b2eb47c144ea4bef1;p=chise%2Fxemacs-chise.git.1 diff --git a/src/sysdep.c b/src/sysdep.c index 12cd3de..c307469 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -33,7 +33,7 @@ Boston, MA 02111-1307, USA. */ #ifdef WIN32_NATIVE #ifdef MINGW -#include +#include <../mingw/process.h> #else /* should not conflict with "process.h", as per ANSI definition. This is not true with visual c though. The trick below works with @@ -140,22 +140,6 @@ static void hft_reset (struct console *c); #include #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 - /************************************************************************/ /* subprocess control */ @@ -2353,7 +2337,11 @@ init_system_name (void) 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)) @@ -3001,23 +2989,22 @@ sys_readdir (DIR *dirp) 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 @@ -3026,9 +3013,6 @@ sys_readdir (DIR *dirp) 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 */ @@ -3174,9 +3158,11 @@ sys_rename (const char *old, const char *new) /* 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); } @@ -3362,19 +3348,31 @@ gettimeofday (struct timeval *tp, struct timezone *tzp) 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 } /* */ @@ -3586,7 +3584,7 @@ const char *sys_siglist[NSIG + 1] = 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 */ @@ -3625,7 +3623,7 @@ const char *sys_siglist[NSIG + 1] = 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 */