[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]