From da5b5435a87be1409bf8c13ce781e3991c7080e0 Mon Sep 17 00:00:00 2001 From: Jason Rumney Date: Wed, 5 Mar 2008 10:09:03 +0000 Subject: [PATCH] Revert last change. --- src/ChangeLog | 3 --- src/fileio.c | 47 ++++++++++++----------------------------------- 2 files changed, 12 insertions(+), 38 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 6c428b0d803..0ddc633e61f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,9 +2,6 @@ * dispnew.c (adjust_glyph_matrix): Initialize window_height. - * fileio.c (Fexpand_file_name): Decode home directory names. - (Fsubstitute_in_file_name): Decode substituted variables. - 2008-03-03 YAMAMOTO Mitsuharu * xdisp.c (handle_single_display_spec): Undo 2007-10-16 changes. diff --git a/src/fileio.c b/src/fileio.c index d869bb0b2b6..c5bff5b8153 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1408,19 +1408,6 @@ See also the function `substitute-in-file-name'. */) } } - /* 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 @@ duplicates what `expand-file-name' does. */) 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 @@ duplicates what `expand-file-name' does. */) 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 @@ duplicates what `expand-file-name' does. */) 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 @@ duplicates what `expand-file-name' does. */) *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 @@ duplicates what `expand-file-name' does. */) 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"); -- 2.39.2