XEmacs 21.4.4 "Artificial Intelligence".
[chise/xemacs-chise.git.1] / src / sysdep.c
index e327cff..ff64273 100644 (file)
@@ -33,7 +33,7 @@ Boston, MA 02111-1307, USA.  */
 
 #ifdef WIN32_NATIVE
 #ifdef MINGW
-#include <mingw32/process.h>
+#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
@@ -2337,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))
@@ -2985,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
@@ -3010,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 */
@@ -3346,17 +3346,26 @@ 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)
 {
-#if defined (HAVE_UTIME)
+#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);
 #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. */