Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
792c1add
Commit
792c1add
authored
Mar 19, 2014
by
Yukihiro "Matz" Matsumoto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
string functions arguments changed from mrb_int to size_t that would take strlen()
parent
180b3d56
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
38 deletions
+35
-38
include/mruby.h
include/mruby.h
+3
-3
include/mruby/string.h
include/mruby/string.h
+4
-4
src/string.c
src/string.c
+28
-31
No files found.
include/mruby.h
View file @
792c1add
...
...
@@ -263,10 +263,10 @@ void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory availa
struct
RBasic
*
mrb_obj_alloc
(
mrb_state
*
,
enum
mrb_vtype
,
struct
RClass
*
);
void
mrb_free
(
mrb_state
*
,
void
*
);
mrb_value
mrb_str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
mrb_in
t
len
);
mrb_value
mrb_str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
size_
t
len
);
mrb_value
mrb_str_new_cstr
(
mrb_state
*
,
const
char
*
);
mrb_value
mrb_str_new_static
(
mrb_state
*
mrb
,
const
char
*
p
,
mrb_in
t
len
);
#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit),
(mrb_int)
mrb_strlen_lit(lit))
mrb_value
mrb_str_new_static
(
mrb_state
*
mrb
,
const
char
*
p
,
size_
t
len
);
#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
mrb_state
*
mrb_open
(
void
);
mrb_state
*
mrb_open_allocf
(
mrb_allocf
,
void
*
ud
);
...
...
include/mruby/string.h
View file @
792c1add
...
...
@@ -65,8 +65,8 @@ 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_string_type
(
mrb_state
*
mrb
,
mrb_value
str
);
mrb_value
mrb_check_string_type
(
mrb_state
*
mrb
,
mrb_value
str
);
mrb_value
mrb_str_buf_new
(
mrb_state
*
mrb
,
mrb_in
t
capa
);
mrb_value
mrb_str_buf_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
mrb_in
t
len
);
mrb_value
mrb_str_buf_new
(
mrb_state
*
mrb
,
size_
t
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
);
...
...
@@ -81,9 +81,9 @@ 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
);
mrb_bool
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_in
t
len
);
mrb_value
mrb_str_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
size_
t
len
);
mrb_value
mrb_str_cat_cstr
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
);
#define mrb_str_cat_lit(mrb, str, lit) mrb_str_cat(mrb, str, lit,
(mrb_int)
mrb_strlen_lit(lit))
#define mrb_str_cat_lit(mrb, str, lit) mrb_str_cat(mrb, str, lit, mrb_strlen_lit(lit))
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
);
...
...
src/string.c
View file @
792c1add
...
...
@@ -20,7 +20,7 @@
#define STR_SET_EMBED_FLAG(s) ((s)->flags |= MRB_STR_EMBED)
#define STR_UNSET_EMBED_FLAG(s) ((s)->flags &= ~(MRB_STR_EMBED|MRB_STR_EMBED_LEN_MASK))
#define STR_SET_EMBED_LEN(s, n) do {\
mrb_in
t tmp_n = (n);\
size_
t tmp_n = (n);\
s->flags &= ~MRB_STR_EMBED_LEN_MASK;\
s->flags |= (tmp_n) << MRB_STR_EMBED_LEN_SHIFT;\
} while (0)
...
...
@@ -28,15 +28,16 @@
if (STR_EMBED_P(s)) {\
STR_SET_EMBED_LEN((s),(n));\
} else {\
s->as.heap.len = (n);\
mrb_assert((n) <= MRB_INT_MAX);\
s->as.heap.len = (mrb_int)(n);\
}\
} while (0)
#define RSTRING_EMBED_LEN(s) \
(
mrb_in
t)((RSTRING(s)->flags & MRB_STR_EMBED_LEN_MASK) >> MRB_STR_EMBED_LEN_SHIFT)
(
size_
t)((RSTRING(s)->flags & MRB_STR_EMBED_LEN_MASK) >> MRB_STR_EMBED_LEN_SHIFT)
#define STR_EMBED_LEN(s)\
(
mrb_in
t)(((s)->flags & MRB_STR_EMBED_LEN_MASK) >> MRB_STR_EMBED_LEN_SHIFT)
(
size_
t)(((s)->flags & MRB_STR_EMBED_LEN_MASK) >> MRB_STR_EMBED_LEN_SHIFT)
#define STR_PTR(s) ((STR_EMBED_P(s)) ? (s)->as.ary : (s)->as.heap.ptr)
#define STR_LEN(s) ((STR_EMBED_P(s)) ? STR_EMBED_LEN(s) : (s)->as.heap.len)
#define STR_LEN(s) ((STR_EMBED_P(s)) ? STR_EMBED_LEN(s) : (s
ize_t)(s
)->as.heap.len)
const
char
mrb_digitmap
[]
=
"0123456789abcdefghijklmnopqrstuvwxyz"
;
...
...
@@ -170,7 +171,7 @@ mrb_str_offset(mrb_state *mrb, mrb_value str, int pos)
}
static
struct
RString
*
str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
mrb_in
t
len
)
str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
size_
t
len
)
{
struct
RString
*
s
;
...
...
@@ -182,9 +183,12 @@ str_new(mrb_state *mrb, const char *p, mrb_int len)
memcpy
(
s
->
as
.
ary
,
p
,
len
);
}
}
else
{
if
(
len
>=
MRB_INT_MAX
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"string size too big"
);
}
s
->
as
.
heap
.
len
=
len
;
s
->
as
.
heap
.
aux
.
capa
=
len
;
s
->
as
.
heap
.
ptr
=
(
char
*
)
mrb_malloc
(
mrb
,
(
size_t
)
len
+
1
);
s
->
as
.
heap
.
ptr
=
(
char
*
)
mrb_malloc
(
mrb
,
len
+
1
);
if
(
p
)
{
memcpy
(
s
->
as
.
heap
.
ptr
,
p
,
len
);
}
...
...
@@ -213,12 +217,15 @@ mrb_str_new_empty(mrb_state *mrb, mrb_value str)
#endif
mrb_value
mrb_str_buf_new
(
mrb_state
*
mrb
,
mrb_in
t
capa
)
mrb_str_buf_new
(
mrb_state
*
mrb
,
size_
t
capa
)
{
struct
RString
*
s
;
s
=
mrb_obj_alloc_string
(
mrb
);
if
(
capa
>=
MRB_INT_MAX
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"string capacity size too big"
);
}
if
(
capa
<
MRB_STR_BUF_MIN_SIZE
)
{
capa
=
MRB_STR_BUF_MIN_SIZE
;
}
...
...
@@ -231,17 +238,17 @@ mrb_str_buf_new(mrb_state *mrb, mrb_int capa)
}
static
void
str_buf_cat
(
mrb_state
*
mrb
,
struct
RString
*
s
,
const
char
*
ptr
,
mrb_in
t
len
)
str_buf_cat
(
mrb_state
*
mrb
,
struct
RString
*
s
,
const
char
*
ptr
,
size_
t
len
)
{
mrb_in
t
capa
;
mrb_in
t
total
;
size_
t
capa
;
size_
t
total
;
ptrdiff_t
off
=
-
1
;
if
(
len
==
0
)
return
;
mrb_str_modify
(
mrb
,
s
);
if
(
ptr
>=
STR_PTR
(
s
)
&&
ptr
<=
STR_PTR
(
s
)
+
STR_LEN
(
s
))
{
if
(
ptr
>=
STR_PTR
(
s
)
&&
ptr
<=
STR_PTR
(
s
)
+
(
size_t
)
STR_LEN
(
s
))
{
off
=
ptr
-
STR_PTR
(
s
);
}
if
(
len
==
0
)
return
;
if
(
STR_EMBED_P
(
s
))
capa
=
RSTRING_EMBED_LEN_MAX
;
...
...
@@ -249,7 +256,7 @@ str_buf_cat(mrb_state *mrb, struct RString *s, const char *ptr, mrb_int len)
capa
=
s
->
as
.
heap
.
aux
.
capa
;
if
(
STR_LEN
(
s
)
>=
MRB_INT_MAX
-
(
mrb_int
)
len
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"string size
s
too big"
);
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"string size too big"
);
}
total
=
STR_LEN
(
s
)
+
len
;
if
(
capa
<=
total
)
{
...
...
@@ -271,7 +278,7 @@ str_buf_cat(mrb_state *mrb, struct RString *s, const char *ptr, mrb_int len)
}
mrb_value
mrb_str_buf_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
mrb_in
t
len
)
mrb_str_buf_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
size_
t
len
)
{
if
(
len
==
0
)
return
str
;
str_buf_cat
(
mrb
,
mrb_str_ptr
(
str
),
ptr
,
len
);
...
...
@@ -279,12 +286,9 @@ mrb_str_buf_cat(mrb_state *mrb, mrb_value str, const char *ptr, mrb_int len)
}
mrb_value
mrb_str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
mrb_in
t
len
)
mrb_str_new
(
mrb_state
*
mrb
,
const
char
*
p
,
size_
t
len
)
{
struct
RString
*
s
;
if
(
len
<
0
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"negative string size (or size too big)"
);
}
s
=
str_new
(
mrb
,
p
,
len
);
return
mrb_obj_value
(
s
);
...
...
@@ -305,28 +309,24 @@ mrb_str_new_cstr(mrb_state *mrb, const char *p)
if
(
p
)
{
len
=
strlen
(
p
);
if
((
mrb_int
)
len
<
0
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"argument too big"
);
}
}
else
{
len
=
0
;
}
s
=
str_new
(
mrb
,
p
,
(
mrb_int
)
len
);
s
=
str_new
(
mrb
,
p
,
len
);
return
mrb_obj_value
(
s
);
}
mrb_value
mrb_str_new_static
(
mrb_state
*
mrb
,
const
char
*
p
,
mrb_in
t
len
)
mrb_str_new_static
(
mrb_state
*
mrb
,
const
char
*
p
,
size_
t
len
)
{
struct
RString
*
s
;
if
(
len
<
0
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"
negative string size (or size too big)
"
);
if
(
len
>=
MRB_INT_MAX
)
{
mrb_raise
(
mrb
,
E_ARGUMENT_ERROR
,
"
string size too big
"
);
}
s
=
mrb_obj_alloc_string
(
mrb
);
s
->
as
.
heap
.
len
=
len
;
s
->
as
.
heap
.
aux
.
capa
=
0
;
/* nofree */
...
...
@@ -2453,11 +2453,8 @@ mrb_str_dump(mrb_state *mrb, mrb_value str)
}
mrb_value
mrb_str_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
mrb_in
t
len
)
mrb_str_cat
(
mrb_state
*
mrb
,
mrb_value
str
,
const
char
*
ptr
,
size_
t
len
)
{
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
);
return
str
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment