aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ext/strscan/strscan.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5a5e5faec8..3e00eba14d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,12 @@
-Sat Mar 6 14:27:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Mar 6 15:15:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/strscan/depend: depends on re.h and regex.h.
* ext/strscan/strscan.c: no version check needed.
+ * ext/strscan/strscan.c (strscan_init_copy): struct re_registers must
+ not be bitwise copied.
+
Sat Mar 6 11:14:33 2004 David Black <dblack@wobblini.net>
* lib/scanf.rb: refixed the previous fix in IO#block_scanf
diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c
index b60cdb852f..db1a9c64e6 100644
--- a/ext/strscan/strscan.c
+++ b/ext/strscan/strscan.c
@@ -240,7 +240,13 @@ strscan_init_copy(vself, vorig)
Data_Get_Struct(vself, struct strscanner, self);
check_strscan(vorig);
Data_Get_Struct(vorig, struct strscanner, orig);
- memmove(self, orig, sizeof(struct strscanner));
+ if (self != orig) {
+ self->flags = orig->flags;
+ self->str = orig->str;
+ self->prev = orig->prev;
+ self->curr = orig->curr;
+ re_copy_registers(&self->regs, &orig->regs);
+ }
return vself;
}