summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--file.c2
-rw-r--r--string.c8
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 96adb4ef91..5ef554a966 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Jul 23 15:49:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_lstrip_bang): strip NUL along with white
+ spaces. [ruby-talk:76659]
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
Wed Jul 23 14:19:17 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* lib/mkmf.rb (log_src, checking_for, create_header):
diff --git a/file.c b/file.c
index 3d2a88702c..1ef799c31c 100644
--- a/file.c
+++ b/file.c
@@ -1536,7 +1536,7 @@ file_expand_path(fname, dname, result)
long buflen;
int tainted;
- s = StringValueCStr(fname);
+ s = StringValuePtr(fname);
BUFINIT();
tainted = OBJ_TAINTED(fname);
diff --git a/string.c b/string.c
index c7b5ddd9f2..eb7b347447 100644
--- a/string.c
+++ b/string.c
@@ -1643,6 +1643,7 @@ str_gsub(argc, argv, str, bang)
bp += len;
memcpy(bp, RSTRING(val)->ptr, RSTRING(val)->len);
bp += RSTRING(val)->len;
+ offset = END(0);
if (BEG(0) == END(0)) {
/*
* Always consume at least one character of the input string
@@ -1654,9 +1655,6 @@ str_gsub(argc, argv, str, bang)
bp += len;
offset = END(0) + len;
}
- else {
- offset = END(0);
- }
cp = RSTRING(str)->ptr + offset;
if (offset > RSTRING(str)->len) break;
beg = rb_reg_search(pat, str, offset, 0);
@@ -2924,7 +2922,7 @@ rb_str_lstrip_bang(str)
if (!s || RSTRING(str)->len == 0) return Qnil;
e = t = s + RSTRING(str)->len;
/* remove spaces at head */
- while (s < t && ISSPACE(*s)) s++;
+ while (s < t && (ISSPACE(*s) || !*s)) s++;
RSTRING(str)->len = t-s;
if (s > RSTRING(str)->ptr) {
@@ -2956,7 +2954,7 @@ rb_str_rstrip_bang(str)
e = t = s + RSTRING(str)->len;
/* remove trailing spaces */
- while (s < t && ISSPACE(*(t-1))) t--;
+ while (s < t && (ISSPACE(*(t-1)) || !*(t-1))) t--;
RSTRING(str)->len = t-s;
if (t < e) {