[#32182] 汚染された文字列の eval — 堀川 久 <vzw00011@...>

こんにちは。

18 messages 2001/11/03
[#32183] Re: 汚染された文字列の eval — matz@... (Yukihiro Matsumoto) 2001/11/03

まつもと ゆきひろです

[#32205] assert and assert_equal — Masaki Suketa <masaki.suketa@...>

助田です。

15 messages 2001/11/05

[#32263] fastcgi.rb and cgi.rb — 岡田 潤 <yun@...>

ゆんです。

37 messages 2001/11/08
[#32273] Re: fastcgi.rb and cgi.rb — Shugo Maeda <shugo@...> 2001/11/09

前田です。

[#32280] Re: fastcgi.rb and cgi.rb — Wakou Aoyama <wakou@...> 2001/11/09

青山です。

[#32308] Re: fastcgi.rb and cgi.rb — TAKAHASHI Masayoshi <maki@...> 2001/11/13

高橋征義です。

[#32359] Re: fastcgi.rb and cgi.rb — MoonWolf <moonwolf@...> 2001/11/15

> うーん、あんまり文字列一般が備えるべき機能ではないと

[#32377] Re: fastcgi.rb and cgi.rb — TAKAHASHI Masayoshi <maki@...> 2001/11/16

高橋征義です。

[#32380] Re: fastcgi.rb and cgi.rb — MoonWolf <moonwolf@...> 2001/11/16

> でも、128から255までの場合、ISO-8859-1を使っている人で、

[#32329] PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp>

94 messages 2001/11/14
[#32330] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/14

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32332] Re: PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/14

[#32346] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/15

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32349] Re: PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/15

[#32352] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/15

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32354] Re: PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/15

[#32357] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/15

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32363] Re: PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/15

[#32392] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/17

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32401] Re: PalmOS for Ruby — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/17

[#32402] Ruby Reference Manual for PalmOS — rubikitch <rubikitch@...> 2001/11/17

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32408] Re: Ruby Reference Manual for PalmOS — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/18

[#32423] Re: Ruby Reference Manual for PalmOS — rubikitch <rubikitch@...> 2001/11/19

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32426] Re: Ruby Reference Manual for PalmOS — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/19

[#32445] Re: Ruby Reference Manual for PalmOS — rubikitch <rubikitch@...> 2001/11/20

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32428] Re: Ruby Reference Manual for PalmOS — Takahiro Kambe <taca@...> 2001/11/19

In message <20011119230955.E9F7.TORU_M@h2.dion.ne.jp>

[#32432] Re: Ruby Reference Manual for PalmOS — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/19

[#32356] Re: PalmOS for Ruby — "Masatake E. Hori" <eddie@...> 2001/11/15

ほり@筑波大学といいます

[#32358] Re: PalmOS for Ruby — rubikitch <rubikitch@...> 2001/11/15

From: "Masatake E. Hori" <eddie@luft.geo.tsukuba.ac.jp>

[#32440] shibu-rug — KANDA Daisuke <MAP2303@...>

40 messages 2001/11/20
[#32451] Re: shibu-rug — rubikitch <rubikitch@...> 2001/11/20

From: KANDA Daisuke <MAP2303@mapletown.net>

[#32455] Re: shibu-rug — KANDA Daisuke <MAP2303@...> 2001/11/20

[#32545] Re: shibu-rug — KANDA Daisuke <MAP2303@...> 2001/11/26

[#32558] Re: shibu-rug — KANDA Daisuke <MAP2303@...> 2001/11/27

[#32623] Re: shibu-rug — TAKAHASHI Masayoshi <maki@...> 2001/11/29

高橋征義です。

[#32658] Re: shibu-rug — KANDA Daisuke <MAP2303@...> 2001/11/30

[#32661] Re: shibu-rug — TAKAHASHI Masayoshi <maki@...> 2001/11/30

高橋征義です。

[#32694] sandstorm (Re: Re: shibu-rug) — Dai <MAP2303@...> 2001/12/01

[#32716] RUG 用ドメインなど (Re: shibu-rug) — rubiben <ozaki@...> 2001/12/03

 rubiben です。

[#32465] Ruby for PalmOS に対する熱い想い — Toru MITANI <toru_m@...2.dion.ne.jp>

80 messages 2001/11/20
[#32519] Re: Ruby for PalmOS に対する熱い想い — "Nibu, Mitsunori." <nyu@...> 2001/11/23

newです.

[#32527] Re: Ruby for PalmOS に対する熱い想い — rubikitch <rubikitch@...> 2001/11/23

From: "Nibu, Mitsunori." <nyu@nk.rim.or.jp>

[#32533] Re: Ruby for PalmOS に対する熱い想い — "丹生 光則 Nibu,Mitsunori." <nyu@...> 2001/11/24

newです.

[#32537] Re: Ruby for PalmOS に対する熱い想い — rubikitch <rubikitch@...> 2001/11/25

From: "丹生 光則 Nibu,Mitsunori." <nyu@nk.rim.or.jp>

[#32542] Re: Ruby for PalmOS に対する熱い想い — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/11/26

newです.

[#32550] Re: Ruby for PalmOS に対する熱い想い — rubikitch <rubikitch@...> 2001/11/26

From: "丹生 光則 Nibu,Mitsunori." <nibu@tec.osaka.jip.co.jp>

[#32557] Re: Ruby for PalmOS に対する熱い想い — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/11/27

newです.

[#32566] Re: Ruby for PalmOS に対する熱い想い — Nakamura Akifumi <BXQ04723@...> 2001/11/27

[#32567] Linux カーネル 2.0 での make — Victor Alexander Debuque <victor@...> 2001/11/27

初めまして。オーストラリア在住のビクターと申します。ハンドルではなく本名です。(^^;)

[#32563] Re: Ruby for PalmOS に対する熱い想い — Toru MITANI <toru_m@...2.dion.ne.jp> 2001/11/27

[#32598] Re: Ruby for PalmOS に対する熱い想い — rubikitch <rubikitch@...> 2001/11/28

From: Toru MITANI <toru_m@h2.dion.ne.jp>

[#32609] Editor macro by Ruby (Re: Ruby for PalmOS に対する熱い想い) — shukaku@... 2001/11/29

At Wed, 28 Nov 2001 20:52:49 +0900,

[#32473] File.expand_path(" 一覧表 .xsl") — Take_tk <ggb03124@...>

File.expand_path で「表」の文字が化けたのですが、最新版ではOKでしょう

13 messages 2001/11/21

[#32551] ソースの readme をもう少し詳しく — "Mitsuo Igarashi" <mitsu5@...>

ソース中のREADMEをもう少し説明を詳しくしていただければ、

15 messages 2001/11/26

[#32578] cygwin database Ruby Install MySQL PostgreSQL other... MS-Access(blase) — "Inoue" <inoue@...>

井上です。

21 messages 2001/11/28

[#32632] Re: Ruby for PalmOS に対する熱い想い — Nagai T <idonagai@...>

29 messages 2001/11/29
[#32665] blade on Palm — sinara@... 2001/11/30

原です。

[#32666] Re: blade on Palm — "U.Nakamura" <usa@...> 2001/11/30

こんにちは、なかむら(う)です。

[#32669] ruby-talk.length > ruby-list.length (Re: Re: blade on Palm) — maili31s@... (SugHimsi == SUGIHARA Hiroshi) 2001/11/30

すぎむし%Rubyちゃんポータルも見直ししないと…

[#32691] Re: ruby-talk.length > ruby-list.length (Re: Re: blade on Palm) — sinara@... 2001/12/01

原です。

[#33608] Re: ruby-talk.length > ruby-list.length — nobu.nakada@... 2002/01/29

なかだです。

[#33614] Re: ruby-talk.length > ruby-list.length — Minero Aoki <aamine@...> 2002/01/29

あおきです。

[ruby-list:32180] Re: [ANN] WString 0.0.1

From: Masahiro Sakai (酒井政裕) <zvm01052@...>
Date: 2001-11-03 12:15:19 UTC
List: ruby-list #32180
> 小澤といいます。よろしくお願いします。

酒井といいます。
# 日記で「codecvt_byname使うと良いかも」とか書いた者です。> 小澤さん

> C++でワイド文字列ライブラリを書いてみました。文字列をバイト単位ではなく、
> 文字単位で扱うことができます。
(snip)
> インストールが面倒ですが、感想や動作報告等いただけるとうれしいです。

正規表現の方は試していませんが、
結構良い感じだと思います。

どうせなので、オブジェクトにlocale名を持たせることで、
複数のlocaleを同時に扱えるようにするパッチを作ってみました。

メモ
* 御指摘のようにlocaleヘッダが無い環境が多そうなので、setlocaleで頑張りました
* C++は書き慣れていないので僕のコードは変かも
* 正規表現の方には手が回ってません
* localeが異なるオブジェクト間の演算はどうすべき?
* wchar_tの表現がlocale依存に依存するBSD等の環境でのテストが必要そう…

それと、struct WStringStruct に struct RBasic を持たせていますが、
Data_Make_Structで作ったオブジェクトはstruct RDataでデータを持っているので、
ここでは不要のはずです。

--
酒井 政裕 / Masahiro Sakai
e-mail: s01397ms@sfc.keio.ac.jp, zvm01052@nifty.ne.jp

Attachments (1)

wstring-0.0.1-multi-locale-0.0.1.diff (11.6 KB, text/x-diff)
diff -u wstring-0.0.1.orig/wstring/detail.hpp wstring-0.0.1/wstring/detail.hpp
--- wstring-0.0.1.orig/wstring/detail.hpp	Thu Oct 25 00:19:16 2001
+++ wstring-0.0.1/wstring/detail.hpp	Sat Nov  3 20:08:21 2001
@@ -15,6 +15,8 @@
 #define __USE_ISOC99
 #include <wchar.h>
 
+#include "utility.hpp"
+
 // -----------------------------------------------------------------------------
 
 namespace detail {
@@ -163,6 +165,7 @@
 inline
 VALUE change_case(VALUE rb_wstring, const T& func)
 {
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(rb_wstring));
     std::wstring* wstring = get_wstring(rb_wstring);
     bool modified = false;
     transform(wstring->begin(), wstring->end(), wstring->begin(), func, modified);
Common subdirectories: wstring-0.0.1.orig/wstring/test and wstring-0.0.1/wstring/test
diff -u wstring-0.0.1.orig/wstring/utility.hpp wstring-0.0.1/wstring/utility.hpp
--- wstring-0.0.1.orig/wstring/utility.hpp	Thu Oct 25 00:19:16 2001
+++ wstring-0.0.1/wstring/utility.hpp	Sat Nov  3 00:55:11 2001
@@ -20,6 +20,26 @@
 
 namespace utility {
 
+class SetLocale {
+private:
+    int category;
+    char* old_locale;
+public:
+    SetLocale(int c, const char* locale): category(c)
+    {
+        old_locale = strdup(setlocale(category, NULL));
+        if (!setlocale(category, locale))
+            rb_raise(WStringError, "setlocale(%d, \"%s\") failed",
+                     category, locale);
+    }
+
+    ~SetLocale(){
+        setlocale(category, old_locale);
+        free(old_locale);
+    }
+};
+
+
 inline void call_setlocale(const char* locale)
 {
     if (setlocale(LC_CTYPE, locale) == 0)
diff -u wstring-0.0.1.orig/wstring/wstring.cpp wstring-0.0.1/wstring/wstring.cpp
--- wstring-0.0.1.orig/wstring/wstring.cpp	Thu Oct 25 00:19:16 2001
+++ wstring-0.0.1/wstring/wstring.cpp	Sat Nov  3 20:07:22 2001
@@ -37,6 +37,7 @@
 void ws_delete(WStringStruct* wss)
 {
     delete wss->wstring;
+    free(wss->locale);
     free(wss);
 }
 
@@ -63,6 +64,21 @@
     wss->wstring = wstring;
 }
 
+const char* get_wstring_locale(VALUE rb_wstring)
+{
+    WStringStruct* wss;
+    Data_Get_Struct(rb_wstring, WStringStruct, wss);
+    return wss->locale;
+}
+
+void set_wstring_locale(VALUE rb_wstring, const char* locale)
+{
+    WStringStruct* wss;
+    Data_Get_Struct(rb_wstring, WStringStruct, wss);
+    free(wss->locale);
+    wss->locale = strdup(locale);
+}
+
 VALUE make_wstring(const wchar_t* wc_str)
 {
     VALUE rb_wstring = make_wstring();
@@ -100,12 +116,14 @@
     
     Check_Type(argv[0], T_STRING);
     
-    if (argc == 1)
-        utility::call_setlocale("");
-    else if (argc == 2)
-        utility::call_setlocale(STR2CSTR(argv[1]));
-    
-    return make_wstring(RSTRING(argv[0])->ptr);
+    char* locale = "";
+    if (argc == 2)
+        locale = STR2CSTR(argv[1]);
+
+    utility::SetLocale l(LC_CTYPE, locale);
+    VALUE rb_wstring = make_wstring(RSTRING(argv[0])->ptr);
+    set_wstring_locale(rb_wstring, setlocale(LC_CTYPE, NULL));
+    return rb_wstring;
 }
 
 VALUE ws_bracket_aux(VALUE self_, VALUE index_)
@@ -118,7 +136,9 @@
             index = self->size() + index;
         if (index < 0 || self->size() <= index)
             return Qnil;
-        return make_wstring((*self)[index]);
+        VALUE result = make_wstring((*self)[index]);
+        set_wstring_locale(result, get_wstring_locale(self_));
+        return result;
     } else if (CLASS_OF(index_) == WString) {
         const std::wstring* index = get_wstring(index_);
         if (*index == L"")
@@ -133,6 +153,7 @@
         if (rb_wmatch == Qnil) return Qnil;
         VALUE rb_wstring = make_wstring();
         set_wstring(rb_wstring, get_match_data(rb_wmatch)->str());
+        set_wstring_locale(rb_wstring, get_wstring_locale(self_));
         return rb_wstring;
 #endif // WSTRING_NO_WREGEXP
     } else {
@@ -146,6 +167,7 @@
             VALUE rb_wstring = make_wstring();
             std::wstring* wstring = new std::wstring(*self, begin, length);
             set_wstring(rb_wstring, wstring);
+            set_wstring_locale(rb_wstring, get_wstring_locale(self_));
             return rb_wstring;
         }
     }
@@ -173,6 +195,7 @@
         VALUE rb_wstring = make_wstring();
         std::wstring* wstring = new std::wstring(*self, begin, length);
         set_wstring(rb_wstring, wstring);
+        set_wstring_locale(rb_wstring, get_wstring_locale(self_));
         return rb_wstring;
     } else if (argc ==1) {
         return ws_bracket_aux(self_, argv[0]);
@@ -260,18 +283,21 @@
 
 VALUE ws_to_s(VALUE self)
 {
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(self));
     const wchar_t* wc_str = get_wstring(self)->c_str();
     return detail::make_string(wc_str);
 }
 
 VALUE ws_to_i(VALUE self)
 {
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(self));
     const wchar_t* wc_str = get_wstring(self)->c_str();
     return rb_cstr2inum(detail::wcs_to_mbs(wc_str), 10);
 }
 
 VALUE ws_to_f(VALUE self)
 {
+    utility::SetLocale(LC_CTYPE, get_wstring_locale(self));
     const wchar_t* wc_str = get_wstring(self)->c_str();
     const double f = wcstod(wc_str, 0);
     return rb_float_new(f);
@@ -306,6 +332,7 @@
     VALUE rb_wstring = make_wstring();
     std::wstring* wstring = new std::wstring();
     set_wstring(rb_wstring, wstring);
+    set_wstring_locale(rb_wstring, get_wstring_locale(self_));
     
     const std::wstring* self = get_wstring(self_);
     wstring->append(L"L\"");
@@ -362,6 +389,7 @@
 
 VALUE ws_capitalize(VALUE self_)
 {
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(self_));
     std::wstring* self = get_wstring(self_);
     bool modified = false;
     detail::capitalize(self->begin(), self->end(), self->begin(), modified);
@@ -384,6 +412,7 @@
     VALUE rb_string = make_wstring();
     std::wstring* wstring = new std::wstring(*get_wstring(self_));
     set_wstring(rb_string, wstring);
+    set_wstring_locale(rb_string, get_wstring_locale(self_));
     
     RBASIC(rb_string)->klass = klass;
     return rb_string;
@@ -391,6 +420,7 @@
 
 VALUE ws_cmp(VALUE self, VALUE other)
 {
+    utility::SetLocale l(LC_CTYPE | LC_COLLATE, get_wstring_locale(self));
     utility::must_be_wstring(other);
     return INT2FIX(get_wstring(self)->compare(*get_wstring(other)));
 }
@@ -401,6 +431,7 @@
     VALUE rb_string = make_wstring();
     std::wstring* wstring = new std::wstring(*get_wstring(self));
     set_wstring(rb_string, wstring);
+    set_wstring_locale(rb_string, get_wstring_locale(self));
     wstring->append(*get_wstring(other));
     return rb_string;
 }
@@ -411,6 +442,7 @@
     if (length == 0) {
         VALUE rb_wstring = make_wstring();
         set_wstring(rb_wstring, new std::wstring());
+        set_wstring_locale(rb_wstring, get_wstring_locale(self_));
         return rb_wstring;
     }
     
@@ -424,6 +456,7 @@
     VALUE rb_string = make_wstring();
     std::wstring* wstring = new std::wstring();
     set_wstring(rb_string, wstring);
+    set_wstring_locale(rb_string, get_wstring_locale(self_));
     
     for (int i = 0; i < length; i++)
         wstring->append(*self);
@@ -476,6 +509,7 @@
         VALUE rb_wstring = make_wstring();
         std::wstring* wstring = new std::wstring(*self, from, length);
         set_wstring(rb_wstring, wstring);
+        set_wstring_locale(rb_wstring, get_wstring_locale(self_));
         rb_yield(rb_wstring);
     }
     
@@ -485,18 +519,37 @@
 VALUE ws_each_char(VALUE self_)
 {
     const std::wstring* self = get_wstring(self_);
-    for (size_t i = 0; i < self->size(); i++)
-        rb_yield(make_wstring((*self)[i]));
+    for (size_t i = 0; i < self->size(); i++){
+        VALUE wstring = make_wstring((*self)[i]);
+        set_wstring_locale(wstring, get_wstring_locale(self_));
+        rb_yield(wstring);
+    }
     return self_;
 }
 
-VALUE ws_locale(VALUE)
+VALUE ws_locale(VALUE self)
 {
-    return rb_str_new2(setlocale(LC_CTYPE, 0));
+    return get_wstring_locale(self) ? rb_str_new2(get_wstring_locale(self)) : Qnil;
 }
 
+// XXX
+#if 0
+#if defined(__STDC_ISO_10646__) || defined(_WIN32) || defined(_S1GLOBAL_H_)
+#define LOCALE_INDEPENDENT_WCHAR_T
+#endif
+#endif
+
+#ifdef LOCALE_INDEPENDENT_WCHAR_T
+VALUE ws_setlocale(VALUE self, VALUE locale)
+{
+    set_wstring_locale(self, STR2CSTR(locale));
+    return locale;
+}
+#endif
+
 VALUE ws_hex(VALUE self)
 {
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(self));
     const wchar_t* wc_str = get_wstring(self)->c_str();
     return rb_cstr2inum(detail::wcs_to_mbs(wc_str), 16);
 }
@@ -513,6 +566,7 @@
         else if (wc == L'b' || wc == 'B')
             base = 2;
     }
+    utility::SetLocale l(LC_CTYPE, get_wstring_locale(self));
     return rb_cstr2inum(detail::wcs_to_mbs(wstring->c_str()), base);
 }
 
@@ -734,6 +788,7 @@
     return rb_funcall(ws_to_s(self), rb_intern("intern"), 0);
 }
 
+// XXX: wcswidth?
 VALUE ws_center(VALUE self_, VALUE width_)
 {
     const int width = NUM2INT(width_);
@@ -745,12 +800,14 @@
     VALUE rb_wstring = make_wstring();
     std::wstring* wstring = new std::wstring();
     set_wstring(rb_wstring, wstring);
+    set_wstring_locale(rb_wstring, get_wstring_locale(self_));
     wstring->append(space_width / 2, L' ');
     wstring->append(*self);
     wstring->append(space_width - space_width / 2, L' ');
     return rb_wstring;
 }
 
+// XXX: wcswidth?
 VALUE ws_ljust(VALUE self_, VALUE width_)
 {
     const int width = NUM2INT(width_);
@@ -762,12 +819,14 @@
     VALUE rb_wstring = make_wstring();
     std::wstring* wstring = new std::wstring();
     set_wstring(rb_wstring, wstring);
+    set_wstring_locale(rb_wstring, get_wstring_locale(self_));
     wstring->append(*self);
     wstring->append(space_width, L' ');
     
     return rb_wstring;
 }
 
+// XXX: wcswidth?
 VALUE ws_rjust(VALUE self_, VALUE width_)
 {
     const int width = NUM2INT(width_);
@@ -779,6 +838,7 @@
     VALUE rb_wstring = make_wstring();
     std::wstring* wstring = new std::wstring();
     set_wstring(rb_wstring, wstring);
+    set_wstring_locale(rb_wstring, get_wstring_locale(self_));
     wstring->append(space_width, L' ');
     wstring->append(*self);
     
@@ -984,7 +1044,10 @@
     VALUE rb_new_wstring = make_wstring();
     std::wstring* new_wstring = new std::wstring();
     set_wstring(rb_new_wstring, new_wstring);
+    set_wstring_locale(rb_new_string, get_wstring_locale(self_));
     
+    utility::SetLocale l(LC_CTYPE, locale);
+
     ws_gsub_aux_aux(vector, self, new_wstring, replace, block_given);
     
     if (ret == 0) {
@@ -1030,6 +1093,7 @@
     if (block_given) {
         VALUE rb_wstring = make_wstring();
         set_wstring(rb_wstring, match->str());
+        set_wstring_locale(rb_wstring, get_wstring_locale(self_));
         gc_ref = rb_yield(rb_wstring);
         utility::must_be_wstring(gc_ref);
         expanded = get_wstring(gc_ref);
@@ -1369,6 +1433,9 @@
     rb_define_method(WString, "slice!", WS_CAST_FUNC(ws_slice), -1);
     
     rb_define_method(WString, "locale", WS_CAST_FUNC(ws_locale), 0);
+#ifdef LOCALE_INDEPENDENT_WCHAR_T
+    rb_define_method(WString, "locale=", WS_CAST_FUNC(ws_setlocale), 1);
+#endif
     
 #ifndef WSTRING_NO_WREGEXP
     rb_define_method(WString, "=~", WS_CAST_FUNC(ws_match_equal), 1);
diff -u wstring-0.0.1.orig/wstring/wstring.hpp wstring-0.0.1/wstring/wstring.hpp
--- wstring-0.0.1.orig/wstring/wstring.hpp	Thu Oct 25 00:19:16 2001
+++ wstring-0.0.1/wstring/wstring.hpp	Sat Nov  3 19:49:17 2001
@@ -16,7 +16,7 @@
 
 struct WStringStruct {
     std::wstring* wstring;
-    struct RBasic basic;
+    char* locale;
 };
 
 VALUE ws_dup(VALUE self);
@@ -28,5 +28,7 @@
 VALUE make_wstring();
 std::wstring* get_wstring(VALUE rb_wstring);
 void set_wstring(VALUE rb_wstring, std::wstring* wstring);
+const char* get_wstring_locale(VALUE rb_wstring);
+void set_wstring_locale(VALUE rb_wstring, const char* locale);
 
 #endif // WSTRING_WSTRING_HPP

In This Thread