diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-20 15:42:28 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-20 15:42:28 -0700 |
| commit | d9d404e3b0f2f39b1195e8c5828550d67be8fa34 (patch) | |
| tree | f5cb47e7aa014f67fc288e181fb915225c4b9aa7 | |
| parent | c79172dfd5a7600300ac215cce1ccc766ec9aa98 (diff) | |
| parent | 49d945bb59695ee9e05b4116301b15801245b287 (diff) | |
| download | mruby-d9d404e3b0f2f39b1195e8c5828550d67be8fa34.tar.gz mruby-d9d404e3b0f2f39b1195e8c5828550d67be8fa34.zip | |
Merge pull request #1195 from monaka/pr-cleanup-string.c-20130421
Cleanup string.c 20130421
| -rw-r--r-- | include/mruby/string.h | 8 | ||||
| -rw-r--r-- | src/string.c | 35 |
2 files changed, 21 insertions, 22 deletions
diff --git a/include/mruby/string.h b/include/mruby/string.h index bc92cfe32..c62d79563 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -46,16 +46,16 @@ void mrb_str_concat(mrb_state*, mrb_value, mrb_value); mrb_value mrb_str_plus(mrb_state*, mrb_value, mrb_value); mrb_value mrb_ptr_to_str(mrb_state *, void *); mrb_value mrb_obj_as_string(mrb_state *mrb, mrb_value obj); -mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, int len); /* mrb_str_resize */ +mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, mrb_int len); mrb_value mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len); mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str); -mrb_value mrb_str_buf_new(mrb_state *mrb, int capa); +mrb_value mrb_str_buf_new(mrb_state *mrb, mrb_int capa); mrb_value mrb_str_buf_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len); 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_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_dup(mrb_state *mrb, mrb_value str); mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self); mrb_value mrb_str_cat_cstr(mrb_state *, mrb_value, const char *); mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, int base, int badcheck); @@ -66,7 +66,7 @@ mrb_value mrb_str_buf_append(mrb_state *mrb, mrb_value str, mrb_value str2); mrb_value mrb_str_inspect(mrb_state *mrb, mrb_value str); int mrb_str_equal(mrb_state *mrb, mrb_value str1, mrb_value str2); mrb_value mrb_str_dump(mrb_state *mrb, mrb_value str); -mrb_value mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, mrb_int len); +mrb_value mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len); mrb_value mrb_str_append(mrb_state *mrb, mrb_value str, mrb_value str2); int mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2); diff --git a/src/string.c b/src/string.c index 860551ce8..0a2e2d06b 100644 --- a/src/string.c +++ b/src/string.c @@ -73,7 +73,7 @@ mrb_str_modify(mrb_state *mrb, struct RString *s) } mrb_value -mrb_str_resize(mrb_state *mrb, mrb_value str, int len) +mrb_str_resize(mrb_state *mrb, mrb_value str, mrb_int len) { int slen; struct RString *s = mrb_str_ptr(str); @@ -111,14 +111,14 @@ mrb_str_offset(mrb_state *mrb, mrb_value str, int pos) } static struct RString* -str_new(mrb_state *mrb, const char *p, int len) +str_new(mrb_state *mrb, const char *p, mrb_int len) { struct RString *s; s = mrb_obj_alloc_string(mrb); s->len = len; s->aux.capa = len; - s->ptr = (char *)mrb_malloc(mrb, len+1); + s->ptr = (char *)mrb_malloc(mrb, (size_t)len+1); if (p) { memcpy(s->ptr, p, len); } @@ -146,7 +146,7 @@ mrb_str_new_empty(mrb_state *mrb, mrb_value str) #endif mrb_value -mrb_str_buf_new(mrb_state *mrb, int capa) +mrb_str_buf_new(mrb_state *mrb, mrb_int capa) { struct RString *s; @@ -176,7 +176,7 @@ str_buf_cat(mrb_state *mrb, struct RString *s, const char *ptr, size_t len) } if (len == 0) return; capa = s->aux.capa; - if (s->len >= MRB_INT_MAX - len) { + if (s->len >= MRB_INT_MAX - (mrb_int)len) { mrb_raise(mrb, E_ARGUMENT_ERROR, "string sizes too big"); } total = s->len+len; @@ -244,8 +244,8 @@ mrb_str_new_cstr(mrb_state *mrb, const char *p) memcpy(s->ptr, p, len); } s->ptr[len] = 0; - s->len = len; - s->aux.capa = len; + s->len = (mrb_int)len; + s->aux.capa = (mrb_int)len; return mrb_obj_value(s); } @@ -253,17 +253,17 @@ mrb_str_new_cstr(mrb_state *mrb, const char *p) char * mrb_str_to_cstr(mrb_state *mrb, mrb_value str0) { - mrb_value str; + struct RString *s; if (!mrb_string_p(str0)) { mrb_raise(mrb, E_TYPE_ERROR, "expected String"); } - str = mrb_str_new(mrb, RSTRING_PTR(str0), RSTRING_LEN(str0)); - if (strlen(RSTRING_PTR(str)) != RSTRING_LEN(str)) { + s = str_new(mrb, RSTRING_PTR(str0), RSTRING_LEN(str0)); + if ((strlen(s->ptr) ^ s->len) != 0) { mrb_raise(mrb, E_ARGUMENT_ERROR, "string contains null byte"); } - return RSTRING_PTR(str); + return s->ptr; } static void @@ -339,7 +339,7 @@ void mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other) { struct RString *s1 = mrb_str_ptr(self), *s2; - int len; + mrb_int len; mrb_str_modify(mrb, s1); if (!mrb_string_p(other)) { @@ -554,11 +554,10 @@ mrb_str_cmp_m(mrb_state *mrb, mrb_value str1) static int str_eql(mrb_state *mrb, const mrb_value str1, const mrb_value str2) { - const size_t len = RSTRING_LEN(str1); + const mrb_int len = RSTRING_LEN(str1); - /* assert(SIZE_MAX >= MRB_INT_MAX) */ if (len != RSTRING_LEN(str2)) return FALSE; - if (memcmp(RSTRING_PTR(str1), RSTRING_PTR(str2), len) == 0) + if (memcmp(RSTRING_PTR(str1), RSTRING_PTR(str2), (size_t)len) == 0) return TRUE; return FALSE; } @@ -633,7 +632,7 @@ noregexp(mrb_state *mrb, mrb_value self) static void regexp_check(mrb_state *mrb, mrb_value obj) { - if (!strcmp(mrb_obj_classname(mrb, obj), REGEXP_CLASS)) { + if (!memcmp(mrb_obj_classname(mrb, obj), REGEXP_CLASS, sizeof(REGEXP_CLASS) - 1)) { noregexp(mrb, obj); } } @@ -2368,9 +2367,9 @@ mrb_str_dump(mrb_state *mrb, mrb_value str) } mrb_value -mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, mrb_int len) +mrb_str_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len) { - if (len < 0) { + if ((mrb_int)len < 0) { mrb_raise(mrb, E_ARGUMENT_ERROR, "negative string size (or size too big)"); } str_buf_cat(mrb, mrb_str_ptr(str), ptr, len); |
