# HG changeset patch # User Jason Rumney # Date 1204711542 0 # Node ID 1c722a2da14e393ae98bc285ca243e4478217c44 # Parent 6d604eddb2c08c3cc457751f122e58ede596a874 Revert last change. diff -r 6d604eddb2c0 -r 1c722a2da14e src/fileio.c --- a/src/fileio.c Wed Mar 05 00:51:12 2008 +0000 +++ b/src/fileio.c Wed Mar 05 10:05:42 2008 +0000 @@ -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)) { - 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; + /* If the original string is multibyte, + convert what we substitute into multibyte. */ + while (*o) + { + 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");