From e2d31ba3f3b3bfd4cf39fe97636da5237e655f22 Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Tue, 12 Mar 2013 17:10:18 +0900 Subject: Rename STR_BUF_MIN_SIZE to MRB_STR_BUF_MIN_SIZE. Make it configurable. --- src/string.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/string.c') diff --git a/src/string.c b/src/string.c index bcf229388..95279a734 100644 --- a/src/string.c +++ b/src/string.c @@ -156,6 +156,10 @@ mrb_str_new_empty(mrb_state *mrb, mrb_value str) return mrb_obj_value(s); } +#ifndef MRB_STR_BUF_MIN_SIZE +# define MRB_STR_BUF_MIN_SIZE 128 +#endif + mrb_value mrb_str_buf_new(mrb_state *mrb, int capa) { @@ -163,8 +167,8 @@ mrb_str_buf_new(mrb_state *mrb, int capa) s = mrb_obj_alloc_string(mrb); - if (capa < STR_BUF_MIN_SIZE) { - capa = STR_BUF_MIN_SIZE; + if (capa < MRB_STR_BUF_MIN_SIZE) { + capa = MRB_STR_BUF_MIN_SIZE; } s->len = 0; s->aux.capa = capa; -- cgit v1.2.3 From be506de3fccb5b138140135668043d00b3fa3863 Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Tue, 12 Mar 2013 17:46:57 +0900 Subject: Remove mrb_str_new2(). Use mrb_str_new_cstr() instead. Make mrb_str_new_cstr() accept NULL pointer. It generates 0byte strings by NULL pointer. --- include/mruby.h | 1 - mrbgems/mruby-sprintf/src/sprintf.c | 2 +- mrbgems/mruby-struct/src/struct.c | 2 +- src/error.c | 6 +++--- src/string.c | 27 ++++++++++++++------------- 5 files changed, 19 insertions(+), 19 deletions(-) (limited to 'src/string.c') diff --git a/include/mruby.h b/include/mruby.h index ed746f409..b112b081c 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -203,7 +203,6 @@ void *mrb_free(mrb_state*, void*); mrb_value mrb_str_new(mrb_state *mrb, const char *p, int len); /* mrb_str_new */ mrb_value mrb_str_new_cstr(mrb_state*, const char*); -mrb_value mrb_str_new2(mrb_state *mrb, const char *p); mrb_state* mrb_open(void); mrb_state* mrb_open_allocf(mrb_allocf, void *ud); diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 12ed05d13..e40b5090a 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -110,7 +110,7 @@ mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base) } } - return mrb_str_new2(mrb, b); + return mrb_str_new_cstr(mrb, b); } #define FNONE 0 diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 33997b294..884d4cdc6 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -288,7 +288,7 @@ mrb_struct_define(mrb_state *mrb, const char *name, ...) char *mem; if (!name) nm = mrb_nil_value(); - else nm = mrb_str_new2(mrb, name); + else nm = mrb_str_new_cstr(mrb, name); ary = mrb_ary_new(mrb); va_start(ar, name); diff --git a/src/error.c b/src/error.c index ed30173bc..421321c3d 100644 --- a/src/error.c +++ b/src/error.c @@ -89,7 +89,7 @@ exc_to_s(mrb_state *mrb, mrb_value exc) { mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern(mrb, "mesg")); - if (mrb_nil_p(mesg)) return mrb_str_new2(mrb, mrb_obj_classname(mrb, exc)); + if (mrb_nil_p(mesg)) return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc)); return mesg; } @@ -140,7 +140,7 @@ exc_inspect(mrb_state *mrb, mrb_value exc) } } else { - str = mrb_str_new2(mrb, mrb_obj_classname(mrb, exc)); + str = mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc)); if (!mrb_nil_p(mesg) && RSTRING_LEN(mesg) > 0) { mrb_str_cat2(mrb, str, ": "); mrb_str_append(mrb, str, mesg); @@ -218,7 +218,7 @@ void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg) { mrb_value mesg; - mesg = mrb_str_new2(mrb, msg); + mesg = mrb_str_new_cstr(mrb, msg); mrb_exc_raise(mrb, mrb_exc_new3(mrb, c, mesg)); } diff --git a/src/string.c b/src/string.c index bcf229388..c0172091e 100644 --- a/src/string.c +++ b/src/string.c @@ -224,17 +224,6 @@ mrb_str_new(mrb_state *mrb, const char *p, int len) return mrb_obj_value(s); } -mrb_value -mrb_str_new2(mrb_state *mrb, const char *ptr) -{ - struct RString *s; - if (!ptr) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "NULL pointer given"); - } - s = str_new(mrb, ptr, strlen(ptr)); - return mrb_obj_value(s); -} - /* * call-seq: (Caution! NULL string) * String.new(str="") => new_str @@ -246,11 +235,23 @@ mrb_value mrb_str_new_cstr(mrb_state *mrb, const char *p) { struct RString *s; - int len = strlen(p); + size_t len; + + if (p) { + len = strlen(p); + if (len > MRB_INT_MAX) { + len = MRB_INT_MAX; + } + } + else { + len = 0; + } s = mrb_obj_alloc_string(mrb); s->ptr = (char *)mrb_malloc(mrb, len+1); - memcpy(s->ptr, p, len); + if (p) { + memcpy(s->ptr, p, len); + } s->ptr[len] = 0; s->len = len; s->aux.capa = len; -- cgit v1.2.3 From 3af128c742c6d68f4b88bbc950f3219a071ca87c Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Tue, 12 Mar 2013 18:08:40 +0900 Subject: Remove mrb_str_sublen() as it is not used. --- include/mruby/string.h | 1 - src/string.c | 9 --------- 2 files changed, 10 deletions(-) (limited to 'src/string.c') diff --git a/include/mruby/string.h b/include/mruby/string.h index 4ba4ce544..b1882a858 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -55,7 +55,6 @@ mrb_value mrb_str_buf_cat(mrb_state *mrb, mrb_value str, const char *ptr, int le char *mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr); char *mrb_string_value_ptr(mrb_state *mrb, mrb_value ptr); -int mrb_str_sublen(mrb_state *mrb, mrb_value str, int pos); int mrb_str_offset(mrb_state *mrb, mrb_value str, int pos); mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str); /* mrb_str_dup */ mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self); diff --git a/src/string.c b/src/string.c index bcf229388..836c659bf 100644 --- a/src/string.c +++ b/src/string.c @@ -1661,15 +1661,6 @@ mrb_str_rindex(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int pos) } } -#ifdef INCLUDE_ENCODING -/* byte offset to char offset */ -int -mrb_str_sublen(mrb_state *mrb, mrb_value str, long pos) -{ - return pos; -} -#endif //INCLUDE_ENCODING - /* 15.2.10.5.31 */ /* * call-seq: -- cgit v1.2.3 From 588f51508bcb05c0a38a53eea9a7acd31046164f Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Tue, 12 Mar 2013 18:21:23 +0900 Subject: Remove str_alloc(). Use mrb_obj_alloc_string instead. --- src/string.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'src/string.c') diff --git a/src/string.c b/src/string.c index bcf229388..2e9225f13 100644 --- a/src/string.c +++ b/src/string.c @@ -104,21 +104,6 @@ str_mod_check(mrb_state *mrb, mrb_value str, char *p, mrb_int len) #define mrb_obj_alloc_string(mrb) ((struct RString*)mrb_obj_alloc((mrb), MRB_TT_STRING, (mrb)->string_class)) -static struct RString* -str_alloc(mrb_state *mrb, struct RClass *c) -{ - struct RString* s; - - s = mrb_obj_alloc_string(mrb); - - s->c = c; - s->ptr = 0; - s->len = 0; - s->aux.capa = 0; - - return s; -} - /* char offset to byte offset */ int mrb_str_offset(mrb_state *mrb, mrb_value str, int pos) @@ -129,8 +114,9 @@ mrb_str_offset(mrb_state *mrb, mrb_value str, int pos) static struct RString* str_new(mrb_state *mrb, const char *p, int len) { - struct RString *s = str_alloc(mrb, mrb->string_class); + struct RString *s; + s = mrb_obj_alloc_string(mrb); s->len = len; s->aux.capa = len; s->ptr = (char *)mrb_malloc(mrb, len+1); @@ -302,7 +288,7 @@ mrb_str_literal(mrb_state *mrb, mrb_value str) struct RString *s, *orig; mrb_shared_string *shared; - s = str_alloc(mrb, mrb->string_class); + s = mrb_obj_alloc_string(mrb); orig = mrb_str_ptr(str); if (!(orig->flags & MRB_STR_SHARED)) { str_make_shared(mrb, mrb_str_ptr(str)); @@ -311,6 +297,7 @@ mrb_str_literal(mrb_state *mrb, mrb_value str) shared->refcnt++; s->ptr = shared->ptr; s->len = shared->len; + s->aux.capa = 0; s->aux.shared = shared; s->flags |= MRB_STR_SHARED; -- cgit v1.2.3