summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-23 02:53:28 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-23 02:53:28 +0000
commit0c8106ded6cae22cc54ec07c469b6b15eac4ea32 (patch)
tree43426477b35ce1ce57d6e7aef8060bb57d7f52b1
parent3b6f862b3af128f1a17a88837b64390cb7a9be7a (diff)
* string.c (str_mod_check, str_nth, str_offset): consitfied.
* string.c (rb_str_dump): dump in ASCII-8BIT always. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15177 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--string.c27
2 files changed, 19 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 64b76e748d..67ddd26b2b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed Jan 23 11:53:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_mod_check, str_nth, str_offset): consitfied.
+
+ * string.c (rb_str_dump): dump in ASCII-8BIT always.
+
Wed Jan 23 10:18:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval_method.c (rb_export_method): set ruby_vm_redefined_flag for
diff --git a/string.c b/string.c
index 7d716f0523..56bf0fa759 100644
--- a/string.c
+++ b/string.c
@@ -228,7 +228,7 @@ int rb_enc_str_asciionly_p(VALUE str)
}
static inline void
-str_mod_check(VALUE s, char *p, long len)
+str_mod_check(VALUE s, const char *p, long len)
{
if (RSTRING_PTR(s) != p || RSTRING_LEN(s) != len){
rb_raise(rb_eRuntimeError, "string modified");
@@ -839,19 +839,19 @@ rb_str_s_try_convert(VALUE dummy, VALUE str)
}
static char*
-str_nth(char *p, char *e, int nth, rb_encoding *enc, int singlebyte)
+str_nth(const char *p, const char *e, int nth, rb_encoding *enc, int singlebyte)
{
if (singlebyte)
p += nth;
else
p = rb_enc_nth(p, e, nth, enc);
if (!p) return 0;
- if (p > e) return e;
- return p;
+ if (p > e) p = e;
+ return (char *)p;
}
static int
-str_offset(char *p, char *e, int nth, rb_encoding *enc, int singlebyte)
+str_offset(const char *p, const char *e, int nth, rb_encoding *enc, int singlebyte)
{
const char *pp = str_nth(p, e, nth, enc, singlebyte);
if (!pp) return e - p;
@@ -3263,16 +3263,15 @@ VALUE
rb_str_dump(VALUE str)
{
rb_encoding *enc0 = rb_enc_get(str);
- rb_encoding *enc = rb_enc_from_index(0);
long len;
- char *p, *pend;
+ const char *p, *pend;
char *q, *qend;
VALUE result;
len = 2; /* "" */
p = RSTRING_PTR(str); pend = p + RSTRING_LEN(str);
while (p < pend) {
- char c = *p++;
+ unsigned char c = *p++;
switch (c) {
case '"': case '\\':
case '\n': case '\r':
@@ -3286,11 +3285,11 @@ rb_str_dump(VALUE str)
break;
default:
- if (rb_enc_isprint(c, enc)) {
+ if (ISPRINT(c)) {
len++;
}
else {
- len += 4; /* \nnn */
+ len += 4; /* \xNN */
}
break;
}
@@ -3306,7 +3305,7 @@ rb_str_dump(VALUE str)
*q++ = '"';
while (p < pend) {
- char c = *p++;
+ unsigned char c = *p++;
if (c == '"' || c == '\\') {
*q++ = '\\';
@@ -3348,19 +3347,19 @@ rb_str_dump(VALUE str)
*q++ = '\\';
*q++ = 'e';
}
- else if (rb_enc_isprint(c, enc)) {
+ else if (ISPRINT(c)) {
*q++ = c;
}
else {
*q++ = '\\';
- sprintf(q, "x%02X", c&0xff);
+ sprintf(q, "x%02X", c);
q += 3;
}
}
*q++ = '"';
if (!rb_enc_asciicompat(enc0)) {
sprintf(q, ".force_encoding(\"%s\")", enc0->name);
- enc0 = enc;
+ enc0 = rb_enc_from_index(0);
}
OBJ_INFECT(result, str);