ruby-changes:4487
From: ko1@a...
Date: Sat, 12 Apr 2008 03:13:53 +0900 (JST)
Subject: [ruby-changes:4487] nobu - Ruby:r15979 (trunk): * file.c (file_expand_path): set external encoding.
nobu 2008-04-12 03:13:40 +0900 (Sat, 12 Apr 2008) New Revision: 15979 Modified files: trunk/ChangeLog trunk/file.c Log: * file.c (file_expand_path): set external encoding. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=15979&r2=15978&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15979&r2=15978&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15978) +++ ChangeLog (revision 15979) @@ -1,5 +1,7 @@ -Sat Apr 12 03:12:16 2008 Nobuyoshi Nakada <nobu@r...> +Sat Apr 12 03:13:38 2008 Nobuyoshi Nakada <nobu@r...> + * file.c (file_expand_path): set external encoding. + * file.c (rb_file_s_basename, rb_file_s_dirname, rb_file_s_extname): copy encoding. Index: file.c =================================================================== --- file.c (revision 15978) +++ file.c (revision 15979) @@ -2551,6 +2551,11 @@ buflen = RSTRING_LEN(result),\ pend = p + buflen) +#define SET_EXTERNAL_ENCODING() (\ + (void)(extenc || (extenc = rb_default_external_encoding())),\ + rb_enc_associate(result, extenc),\ + rb_enc_check(fname, result)) + static int is_absolute_path(const char*); static VALUE @@ -2559,6 +2564,7 @@ char *s, *buf, *b, *p, *pend, *root; long buflen, dirlen; int tainted; + rb_encoding *extenc = 0; FilePathValue(fname); s = StringValuePtr(fname); @@ -2586,6 +2592,7 @@ #endif s++; tainted = 1; + SET_EXTERNAL_ENCODING(); } else { #ifdef HAVE_PWD_H @@ -2641,6 +2648,7 @@ BUFCHECK(dirlen > buflen); strcpy(buf, dir); free(dir); + SET_EXTERNAL_ENCODING(); } p = chompdirsep(skiproot(buf)); s += 2; @@ -2660,6 +2668,7 @@ BUFCHECK(dirlen > buflen); strcpy(buf, dir); free(dir); + SET_EXTERNAL_ENCODING(); } #if defined DOSISH || defined __CYGWIN__ if (isdirsep(*s)) { @@ -2749,13 +2758,14 @@ if (tainted) OBJ_TAINT(result); rb_str_set_len(result, p - buf); + rb_enc_check(fname, result); return result; } VALUE rb_file_expand_path(VALUE fname, VALUE dname) { - return file_expand_path(fname, dname, rb_str_new(0, MAXPATHLEN + 2)); + return file_expand_path(fname, dname, rb_usascii_str_new(0, MAXPATHLEN + 2)); } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/