emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/fileio.c,v [EMACS_22_BASE]


From: Jason Rumney
Subject: [Emacs-diffs] Changes to emacs/src/fileio.c,v [EMACS_22_BASE]
Date: Wed, 05 Mar 2008 10:05:43 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Branch:         EMACS_22_BASE
Changes by:     Jason Rumney <jasonr>   08/03/05 10:05:42

Index: fileio.c
===================================================================
RCS file: /sources/emacs/emacs/src/fileio.c,v
retrieving revision 1.580.2.9
retrieving revision 1.580.2.10
diff -u -b -r1.580.2.9 -r1.580.2.10
--- fileio.c    5 Mar 2008 00:19:53 -0000       1.580.2.9
+++ fileio.c    5 Mar 2008 10:05:42 -0000       1.580.2.10
@@ -1408,19 +1408,6 @@
        }
     }
 
-  /* Environment variables and pwnam entries may need decoding.  */
-  if (newdir)
-    {
-      Lisp_Object orig, decoded;
-      orig = make_unibyte_string (newdir, strlen (newdir));
-      decoded = DECODE_FILE (orig);
-      if (decoded != orig)
-        {
-          newdir = SDATA (decoded);
-          multibyte = 1;
-        }
-    }
-
 #ifdef DOS_NT
   /* On DOS and Windows, nm is absolute if a drive name was specified;
      use the drive's current directory as the prefix if needed.  */
@@ -2162,14 +2149,11 @@
   unsigned char *target = NULL;
   int total = 0;
   int substituted = 0;
-  int multibyte;
   unsigned char *xnm;
   Lisp_Object handler;
 
   CHECK_STRING (filename);
 
-  multibyte = STRING_MULTIBYTE (filename);
-
   /* If the file name has special constructs in it,
      call the corresponding file handler.  */
   handler = Ffind_file_name_handler (filename, Qsubstitute_in_file_name);
@@ -2191,7 +2175,8 @@
        again.  Important with filenames like "/home/foo//:/hello///there"
        which whould substitute to "/:/hello///there" rather than "/there".  */
     return Fsubstitute_in_file_name
-      (make_specified_string (p, -1, endp - p, multibyte));
+      (make_specified_string (p, -1, endp - p,
+                             STRING_MULTIBYTE (filename)));
 
 #ifdef VMS
   return filename;
@@ -2242,10 +2227,7 @@
        o = (unsigned char *) egetenv (target);
        if (o)
          {
-            Lisp_Object orig, decoded;
-            orig = make_unibyte_string (o, strlen (o));
-            decoded = DECODE_FILE (orig);
-           total += SBYTES (decoded);
+           total += strlen (o);
            substituted = 1;
          }
        else if (*p == '}')
@@ -2303,26 +2285,21 @@
            *x++ = '$';
            strcpy (x, target); x+= strlen (target);
          }
-       else
+       else if (STRING_MULTIBYTE (filename))
+         {
+           /* If the original string is multibyte,
+              convert what we substitute into multibyte.  */
+           while (*o)
          {
-            Lisp_Object orig, decoded;
-            orig = make_unibyte_string (o, strlen (o));
-            decoded = DECODE_FILE (orig);
-            strncpy (x, SDATA (decoded), SBYTES (decoded));
-            x += SBYTES (decoded);
-
-            /* If environment variable needed decoding, return value
-               needs to be multibyte.  */
-            if (decoded != orig)
-              multibyte = 1;
+               int c = unibyte_char_to_multibyte (*o++);
+               x += CHAR_STRING (c, x);
+             }
          }
-#if 0
        else
          {
            strcpy (x, o);
            x += strlen (o);
          }
-#endif
       }
 
   *x = 0;
@@ -2334,7 +2311,7 @@
        need to quote some $ to $$ first.  */
     xnm = p;
 
-  return make_specified_string (xnm, -1, x - xnm, multibyte);
+  return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename));
 
  badsubst:
   error ("Bad format environment-variable substitution");




reply via email to

[Prev in Thread] Current Thread [Next in Thread]