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

ruby-changes:2152

From: ko1@a...
Date: 6 Oct 2007 14:56:21 +0900
Subject: [ruby-changes:2152] nobu - Ruby:r13643 (trunk): * encoding.c (rb_enc_register): returns new index or -1 if failed.

nobu	2007-10-06 14:56:09 +0900 (Sat, 06 Oct 2007)

  New Revision: 13643

  Modified files:
    trunk/ChangeLog
    trunk/encoding.c
    trunk/string.c

  Log:
    * encoding.c (rb_enc_register): returns new index or -1 if failed.
    
    * encoding.c (rb_enc_alias): check if original name is registered.
    
    * encoding.c (rb_enc_init): register in same order as kcode options in
      re.c.  added new aliases.
    
    * string.c (rb_str_force_encoding): check if valid encoding name.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=13643&r2=13642
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13643&r2=13642
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/encoding.c?r1=13643&r2=13642

Index: encoding.c
===================================================================
--- encoding.c	(revision 13642)
+++ encoding.c	(revision 13643)
@@ -25,31 +25,45 @@
 static int enc_table_size;
 static st_table *enc_table_alias;
 
-void
+int
 rb_enc_register(const char *name, rb_encoding *encoding)
 {
     struct rb_encoding_entry *ent;
+    int newsize;
 
     if (!enc_table) {
-	enc_table = malloc(sizeof(struct rb_encoding_entry));
-	enc_table_size = 1;
+	ent = malloc(sizeof(*enc_table));
+	newsize = 1;
     }
     else {
-	enc_table_size++;
-	enc_table = realloc(enc_table, sizeof(struct rb_encoding_entry)*enc_table_size);
+	newsize = enc_table_size + 1;
+	ent = realloc(enc_table, sizeof(*enc_table)*newsize);
     }
-    ent = &enc_table[enc_table_size-1];
+    if (!ent) return -1;
+    enc_table = ent;
+    enc_table_size = newsize;
+    ent = &enc_table[--newsize];
     ent->name = name;
     ent->enc = encoding;
+    return newsize;
 }
 
-void
+int
 rb_enc_alias(const char *alias, const char *orig)
 {
+    st_data_t data;
+    int idx;
+
     if (!enc_table_alias) {
 	enc_table_alias = st_init_strcasetable();
     }
+    while ((idx = rb_enc_find_index(orig)) < 0) {
+	if (!st_lookup(enc_table_alias, (st_data_t)orig, &data))
+	    return -1;
+	orig = (const char *)data;
+    }
     st_insert(enc_table_alias, (st_data_t)alias, (st_data_t)orig);
+    return idx;
 }
 
 void
@@ -57,11 +71,13 @@
 {
 #define ENC_REGISTER(enc) rb_enc_register(rb_enc_name(enc), enc)
     ENC_REGISTER(ONIG_ENCODING_ASCII);
+    ENC_REGISTER(ONIG_ENCODING_EUC_JP);
     ENC_REGISTER(ONIG_ENCODING_SJIS);
-    ENC_REGISTER(ONIG_ENCODING_EUC_JP);
     ENC_REGISTER(ONIG_ENCODING_UTF8);
 #undef ENC_REGISTER
-    rb_enc_alias("binary", "ascii");
+    rb_enc_alias("ascii", "us-ascii");
+    rb_enc_alias("binary", "us-ascii");
+    rb_enc_alias("iso-8859-1", "us-ascii");
     rb_enc_alias("sjis", "shift_jis");
 }
 
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13642)
+++ ChangeLog	(revision 13643)
@@ -1,5 +1,16 @@
-Sat Oct  6 14:32:30 2007  U-nobu-PC\nobu  <nobu@r...>
+Sat Oct  6 14:56:02 2007  Nobuyoshi Nakada  <nobu@r...>
 
+	* encoding.c (rb_enc_register): returns new index or -1 if failed.
+
+	* encoding.c (rb_enc_alias): check if original name is registered.
+
+	* encoding.c (rb_enc_init): register in same order as kcode options in
+	  re.c.  added new aliases.
+
+	* string.c (rb_str_force_encoding): check if valid encoding name.
+
+Sat Oct  6 14:32:30 2007  Nobuyoshi Nakada  <nobu@r...>
+
 	* insns.def (opt_eq): get rid of gcc bug.
 
 Sat Oct  6 02:34:18 2007  Yukihiro Matsumoto  <matz@r...>
Index: string.c
===================================================================
--- string.c	(revision 13642)
+++ string.c	(revision 13643)
@@ -5114,8 +5114,17 @@
 static VALUE
 rb_str_force_encoding(VALUE str, VALUE encname)
 {
+    const char *name;
+    int idx;
+
+    if (NIL_P(encname)) {
+	idx = 0;
+    }
+    else if ((idx = rb_enc_find_index(name = StringValueCStr(encname))) < 0) {
+	rb_raise(rb_eArgError, "invalid encoding name - %s", name);
+    }
     str_modifiable(str);
-    rb_enc_associate(str, rb_enc_find(StringValueCStr(encname)));
+    rb_enc_associate_index(str, idx);
     return str;
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

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