summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-21 09:18:34 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-21 09:18:34 +0000
commitb6ef272d025387e6707088ba2f9cef3b9031d2db (patch)
tree190b49f514b59163a44d62dccdaec4f0cc89176b /string.c
parentd423b884b8d95b878d66de1abc2efa300f8971e2 (diff)
* ext/zlib/zlib.c: remove obsolete prototype macros.
* ext/zlib/zlib.c (struct gzfile): add encoding field to gzfile structure. * ext/zlib/zlib.c (rb_gzreader_getc): now works on characters. * ext/zlib/zlib.c (rb_gzreader_getbyte): new method to retrieve single byte. * ext/zlib/zlib.c (rb_gzreader_readbyte): ditto. * ext/zlib/zlib.c (rb_gzreader_each_byte): renamed from each_char * ext/zlib/zlib.c (rb_gzreader_ungetc): allow unget strings. * ext/zlib/zlib.c (rb_gzreader_ungetbyte): renamed from ungetc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19869 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/string.c b/string.c
index fe6d1d600e..76f9c8d147 100644
--- a/string.c
+++ b/string.c
@@ -472,8 +472,8 @@ rb_tainted_str_new_cstr(const char *ptr)
RUBY_ALIAS_FUNCTION(rb_tainted_str_new2(const char *ptr), rb_tainted_str_new_cstr, (ptr))
#define rb_tainted_str_new2 rb_tainted_str_new_cstr
-static VALUE
-str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to)
+VALUE
+rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to)
{
rb_econv_t *ec;
rb_econv_result_t ret;
@@ -484,8 +484,13 @@ str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to)
if (!to) return str;
if (from == to) return str;
- if (rb_enc_asciicompat(to) && ENC_CODERANGE(str) == ENC_CODERANGE_7BIT)
+ if (rb_enc_asciicompat(to) && ENC_CODERANGE(str) == ENC_CODERANGE_7BIT) {
+ if (STR_ENC_GET(str) != to) {
+ str = rb_str_dup(str);
+ rb_enc_associate(str, to);
+ }
return str;
+ }
len = RSTRING_LEN(str);
newstr = rb_str_new(0, len);
@@ -526,7 +531,7 @@ rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *eenc)
if (len == 0 && !ptr) len = strlen(ptr);
str = rb_tainted_str_new(ptr, len);
rb_enc_associate(str, eenc);
- return str_conv_enc(str, eenc, rb_default_internal_encoding());
+ return rb_str_conv_enc(str, eenc, rb_default_internal_encoding());
}
VALUE
@@ -544,13 +549,13 @@ rb_locale_str_new(const char *ptr, long len)
VALUE
rb_str_export(VALUE str)
{
- return str_conv_enc(str, STR_ENC_GET(str), rb_default_external_encoding());
+ return rb_str_conv_enc(str, STR_ENC_GET(str), rb_default_external_encoding());
}
VALUE
rb_str_export_to_enc(VALUE str, rb_encoding *enc)
{
- return str_conv_enc(str, STR_ENC_GET(str), enc);
+ return rb_str_conv_enc(str, STR_ENC_GET(str), enc);
}
static VALUE