mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Reorganize mrb_string_value_cstr and related functions.
`mrb_string_value_cstr` and `mrb_string_value_len`: obsolete `mrb_string_cstr`: new function to retrieve NULL terminated C string `RSTRING_CSTR`: wrapper macro of `mrb_string_cstr`
This commit is contained in:
@@ -96,6 +96,7 @@ struct RString {
|
|||||||
#define RSTRING_CAPA(s) RSTR_CAPA(RSTRING(s))
|
#define RSTRING_CAPA(s) RSTR_CAPA(RSTRING(s))
|
||||||
#define RSTRING_END(s) (RSTRING_PTR(s) + RSTRING_LEN(s))
|
#define RSTRING_END(s) (RSTRING_PTR(s) + RSTRING_LEN(s))
|
||||||
MRB_API mrb_int mrb_str_strlen(mrb_state*, struct RString*);
|
MRB_API mrb_int mrb_str_strlen(mrb_state*, struct RString*);
|
||||||
|
#define RSTRING_CSTR(mrb,s) mrb_string_cstr(mrb, s)
|
||||||
|
|
||||||
#define MRB_STR_SHARED 1
|
#define MRB_STR_SHARED 1
|
||||||
#define MRB_STR_FSHARED 2
|
#define MRB_STR_FSHARED 2
|
||||||
@@ -337,16 +338,13 @@ MRB_API mrb_value mrb_string_type(mrb_state *mrb, mrb_value str);
|
|||||||
MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa);
|
MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa);
|
||||||
MRB_API mrb_value mrb_str_buf_new(mrb_state *mrb, size_t capa);
|
MRB_API mrb_value mrb_str_buf_new(mrb_state *mrb, size_t capa);
|
||||||
|
|
||||||
MRB_API const char *mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr);
|
/* NULL terminated C string from mrb_value */
|
||||||
|
MRB_API const char *mrb_string_cstr(mrb_state *mrb, mrb_value str);
|
||||||
|
/* NULL terminated C string from mrb_value; `str` will be updated */
|
||||||
|
MRB_API const char *mrb_string_value_cstr(mrb_state *mrb, mrb_value *str);
|
||||||
|
/* obslete: use RSTRING_PTR() */
|
||||||
MRB_API const char *mrb_string_value_ptr(mrb_state *mrb, mrb_value str);
|
MRB_API const char *mrb_string_value_ptr(mrb_state *mrb, mrb_value str);
|
||||||
/*
|
/* obslete: use RSTRING_LEN() */
|
||||||
* Returns the length of the Ruby string.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param [mrb_state] mrb The current mruby state.
|
|
||||||
* @param [mrb_value] str Ruby string.
|
|
||||||
* @return [mrb_int] The length of the passed in Ruby string.
|
|
||||||
*/
|
|
||||||
MRB_API mrb_int mrb_string_value_len(mrb_state *mrb, mrb_value str);
|
MRB_API mrb_int mrb_string_value_len(mrb_state *mrb, mrb_value str);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
+10
-10
@@ -116,7 +116,7 @@ mrb_file_s_unlink(mrb_state *mrb, mrb_value obj)
|
|||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
const char *utf8_path;
|
const char *utf8_path;
|
||||||
pathv = mrb_ensure_string_type(mrb, argv[i]);
|
pathv = mrb_ensure_string_type(mrb, argv[i]);
|
||||||
utf8_path = mrb_string_value_cstr(mrb, &pathv);
|
utf8_path = RSTRING_CSTR(mrb, pathv);
|
||||||
path = mrb_locale_from_utf8(utf8_path, -1);
|
path = mrb_locale_from_utf8(utf8_path, -1);
|
||||||
if (UNLINK(path) < 0) {
|
if (UNLINK(path) < 0) {
|
||||||
mrb_locale_free(path);
|
mrb_locale_free(path);
|
||||||
@@ -134,8 +134,8 @@ mrb_file_s_rename(mrb_state *mrb, mrb_value obj)
|
|||||||
char *src, *dst;
|
char *src, *dst;
|
||||||
|
|
||||||
mrb_get_args(mrb, "SS", &from, &to);
|
mrb_get_args(mrb, "SS", &from, &to);
|
||||||
src = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &from), -1);
|
src = mrb_locale_from_utf8(RSTRING_CSTR(mrb, from), -1);
|
||||||
dst = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &to), -1);
|
dst = mrb_locale_from_utf8(RSTRING_CSTR(mrb, to), -1);
|
||||||
if (rename(src, dst) < 0) {
|
if (rename(src, dst) < 0) {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
if (CHMOD(dst, 0666) == 0 && UNLINK(dst) == 0 && rename(src, dst) == 0) {
|
if (CHMOD(dst, 0666) == 0 && UNLINK(dst) == 0 && rename(src, dst) == 0) {
|
||||||
@@ -146,7 +146,7 @@ mrb_file_s_rename(mrb_state *mrb, mrb_value obj)
|
|||||||
#endif
|
#endif
|
||||||
mrb_locale_free(src);
|
mrb_locale_free(src);
|
||||||
mrb_locale_free(dst);
|
mrb_locale_free(dst);
|
||||||
mrb_sys_fail(mrb, RSTRING_PTR(mrb_format(mrb, "(%v, %v)", from, to)));
|
mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "(%v, %v)", from, to)));
|
||||||
}
|
}
|
||||||
mrb_locale_free(src);
|
mrb_locale_free(src);
|
||||||
mrb_locale_free(dst);
|
mrb_locale_free(dst);
|
||||||
@@ -248,7 +248,7 @@ mrb_file_realpath(mrb_state *mrb, mrb_value klass)
|
|||||||
s = mrb_str_append(mrb, s, pathname);
|
s = mrb_str_append(mrb, s, pathname);
|
||||||
pathname = s;
|
pathname = s;
|
||||||
}
|
}
|
||||||
cpath = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &pathname), -1);
|
cpath = mrb_locale_from_utf8(RSTRING_CSTR(mrb, pathname), -1);
|
||||||
result = mrb_str_buf_new(mrb, PATH_MAX);
|
result = mrb_str_buf_new(mrb, PATH_MAX);
|
||||||
if (realpath(cpath, RSTRING_PTR(result)) == NULL) {
|
if (realpath(cpath, RSTRING_PTR(result)) == NULL) {
|
||||||
mrb_locale_free(cpath);
|
mrb_locale_free(cpath);
|
||||||
@@ -300,7 +300,7 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass)
|
|||||||
mrb_raise(mrb, E_ARGUMENT_ERROR, "non-absolute home");
|
mrb_raise(mrb, E_ARGUMENT_ERROR, "non-absolute home");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const char *cuser = mrb_string_value_cstr(mrb, &username);
|
const char *cuser = RSTRING_CSTR(mrb, username);
|
||||||
struct passwd *pwd = getpwnam(cuser);
|
struct passwd *pwd = getpwnam(cuser);
|
||||||
if (pwd == NULL) {
|
if (pwd == NULL) {
|
||||||
return mrb_nil_value();
|
return mrb_nil_value();
|
||||||
@@ -393,12 +393,12 @@ mrb_file_s_symlink(mrb_state *mrb, mrb_value klass)
|
|||||||
int ai = mrb_gc_arena_save(mrb);
|
int ai = mrb_gc_arena_save(mrb);
|
||||||
|
|
||||||
mrb_get_args(mrb, "SS", &from, &to);
|
mrb_get_args(mrb, "SS", &from, &to);
|
||||||
src = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &from), -1);
|
src = mrb_locale_from_utf8(RSTRING_CSTR(mrb, from), -1);
|
||||||
dst = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &to), -1);
|
dst = mrb_locale_from_utf8(RSTRING_CSTR(mrb, to), -1);
|
||||||
if (symlink(src, dst) == -1) {
|
if (symlink(src, dst) == -1) {
|
||||||
mrb_locale_free(src);
|
mrb_locale_free(src);
|
||||||
mrb_locale_free(dst);
|
mrb_locale_free(dst);
|
||||||
mrb_sys_fail(mrb, RSTRING_PTR(mrb_format(mrb, "(%v, %v)", from, to)));
|
mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "(%v, %v)", from, to)));
|
||||||
}
|
}
|
||||||
mrb_locale_free(src);
|
mrb_locale_free(src);
|
||||||
mrb_locale_free(dst);
|
mrb_locale_free(dst);
|
||||||
@@ -416,7 +416,7 @@ mrb_file_s_chmod(mrb_state *mrb, mrb_value klass) {
|
|||||||
|
|
||||||
mrb_get_args(mrb, "i*", &mode, &filenames, &argc);
|
mrb_get_args(mrb, "i*", &mode, &filenames, &argc);
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
const char *utf8_path = mrb_string_value_cstr(mrb, &filenames[i]);
|
const char *utf8_path = RSTRING_CSTR(mrb, filenames[i]);
|
||||||
char *path = mrb_locale_from_utf8(utf8_path, -1);
|
char *path = mrb_locale_from_utf8(utf8_path, -1);
|
||||||
if (CHMOD(path, mode) == -1) {
|
if (CHMOD(path, mode) == -1) {
|
||||||
mrb_locale_free(path);
|
mrb_locale_free(path);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ mrb_stat0(mrb_state *mrb, mrb_value obj, struct stat *st, int do_lstat)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *path = mrb_locale_from_utf8(mrb_string_value_cstr(mrb, &obj), -1);
|
char *path = mrb_locale_from_utf8(RSTRING_CSTR(mrb, obj), -1);
|
||||||
int ret;
|
int ret;
|
||||||
if (do_lstat) {
|
if (do_lstat) {
|
||||||
ret = LSTAT(path, st);
|
ret = LSTAT(path, st);
|
||||||
|
|||||||
@@ -332,8 +332,8 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|||||||
mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
|
mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
|
||||||
io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
||||||
|
|
||||||
pname = mrb_string_value_cstr(mrb, &cmd);
|
pname = RSTRING_CSTR(mrb, cmd);
|
||||||
flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
|
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
||||||
|
|
||||||
doexec = (strcmp("-", pname) != 0);
|
doexec = (strcmp("-", pname) != 0);
|
||||||
opt_in = option_to_fd(mrb, opt, "in");
|
opt_in = option_to_fd(mrb, opt, "in");
|
||||||
@@ -428,8 +428,8 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
|
|||||||
mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
|
mrb_get_args(mrb, "S|SH", &cmd, &mode, &opt);
|
||||||
io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
|
||||||
|
|
||||||
pname = mrb_string_value_cstr(mrb, &cmd);
|
pname = RSTRING_CSTR(mrb, cmd);
|
||||||
flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
|
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
||||||
|
|
||||||
doexec = (strcmp("-", pname) != 0);
|
doexec = (strcmp("-", pname) != 0);
|
||||||
opt_in = option_to_fd(mrb, opt, "in");
|
opt_in = option_to_fd(mrb, opt, "in");
|
||||||
@@ -626,7 +626,7 @@ mrb_io_initialize(mrb_state *mrb, mrb_value io)
|
|||||||
opt = mrb_hash_new(mrb);
|
opt = mrb_hash_new(mrb);
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
|
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
||||||
|
|
||||||
mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
mrb_iv_set(mrb, io, mrb_intern_cstr(mrb, "@buf"), mrb_str_new_cstr(mrb, ""));
|
||||||
|
|
||||||
@@ -780,7 +780,7 @@ reopen:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mrb_sys_fail(mrb, RSTRING_PTR(mrb_format(mrb, "open %s", pathname)));
|
mrb_sys_fail(mrb, RSTRING_CSTR(mrb, mrb_format(mrb, "open %s", pathname)));
|
||||||
}
|
}
|
||||||
mrb_locale_free(fname);
|
mrb_locale_free(fname);
|
||||||
|
|
||||||
@@ -807,8 +807,8 @@ mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
|
|||||||
perm = 0666;
|
perm = 0666;
|
||||||
}
|
}
|
||||||
|
|
||||||
pat = mrb_string_value_cstr(mrb, &path);
|
pat = RSTRING_CSTR(mrb, path);
|
||||||
flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
|
flags = mrb_io_modestr_to_flags(mrb, RSTRING_CSTR(mrb, mode));
|
||||||
modenum = mrb_io_flags_to_modenum(mrb, flags);
|
modenum = mrb_io_flags_to_modenum(mrb, flags);
|
||||||
fd = mrb_cloexec_open(mrb, pat, modenum, perm);
|
fd = mrb_cloexec_open(mrb, pat, modenum, perm);
|
||||||
return mrb_fixnum_value(fd);
|
return mrb_fixnum_value(fd);
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass)
|
|||||||
mrb_get_args(mrb, "oo|oooi", &nodename, &service, &family, &socktype, &protocol, &flags);
|
mrb_get_args(mrb, "oo|oooi", &nodename, &service, &family, &socktype, &protocol, &flags);
|
||||||
|
|
||||||
if (mrb_string_p(nodename)) {
|
if (mrb_string_p(nodename)) {
|
||||||
hostname = mrb_string_value_cstr(mrb, &nodename);
|
hostname = RSTRING_CSTR(mrb, nodename);
|
||||||
} else if (mrb_nil_p(nodename)) {
|
} else if (mrb_nil_p(nodename)) {
|
||||||
hostname = NULL;
|
hostname = NULL;
|
||||||
} else {
|
} else {
|
||||||
@@ -139,7 +139,7 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mrb_string_p(service)) {
|
if (mrb_string_p(service)) {
|
||||||
servname = mrb_string_value_cstr(mrb, &service);
|
servname = RSTRING_CSTR(mrb, service);
|
||||||
} else if (mrb_fixnum_p(service)) {
|
} else if (mrb_fixnum_p(service)) {
|
||||||
servname = RSTRING_PTR(mrb_fixnum_to_str(mrb, service, 10));
|
servname = RSTRING_PTR(mrb_fixnum_to_str(mrb, service, 10));
|
||||||
} else if (mrb_nil_p(service)) {
|
} else if (mrb_nil_p(service)) {
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ vf_s_format(mrb_state *mrb, mrb_value klass)
|
|||||||
{
|
{
|
||||||
mrb_value fmt_str, args[2];
|
mrb_value fmt_str, args[2];
|
||||||
mrb_int argc = mrb_get_args(mrb, "S|oo", &fmt_str, args, args+1);
|
mrb_int argc = mrb_get_args(mrb, "S|oo", &fmt_str, args, args+1);
|
||||||
const char *fmt = mrb_string_value_cstr(mrb, &fmt_str);
|
const char *fmt = RSTRING_CSTR(mrb, fmt_str);
|
||||||
|
|
||||||
VF_FORMAT_INIT(klass);
|
VF_FORMAT_INIT(klass);
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -770,7 +770,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
|
|||||||
}
|
}
|
||||||
if (i < argc) {
|
if (i < argc) {
|
||||||
ss = to_str(mrb, ARGV[arg_i++]);
|
ss = to_str(mrb, ARGV[arg_i++]);
|
||||||
*ps = mrb_string_value_cstr(mrb, &ss);
|
*ps = RSTRING_CSTR(mrb, ss);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-10
@@ -1060,6 +1060,7 @@ mrb_str_to_str(mrb_state *mrb, mrb_value str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* obslete: use RSTRING_PTR() */
|
||||||
MRB_API const char*
|
MRB_API const char*
|
||||||
mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
|
mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
|
||||||
{
|
{
|
||||||
@@ -1067,6 +1068,7 @@ mrb_string_value_ptr(mrb_state *mrb, mrb_value str)
|
|||||||
return RSTRING_PTR(str);
|
return RSTRING_PTR(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* obslete: use RSTRING_LEN() */
|
||||||
MRB_API mrb_int
|
MRB_API mrb_int
|
||||||
mrb_string_value_len(mrb_state *mrb, mrb_value ptr)
|
mrb_string_value_len(mrb_state *mrb, mrb_value ptr)
|
||||||
{
|
{
|
||||||
@@ -2352,6 +2354,7 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, mrb_int base, mrb_bool badchec
|
|||||||
return mrb_str_len_to_inum(mrb, str, strlen(str), base, badcheck);
|
return mrb_str_len_to_inum(mrb, str, strlen(str), base, badcheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* obslete: use RSTRING_CSTR() or mrb_string_cstr() */
|
||||||
MRB_API const char*
|
MRB_API const char*
|
||||||
mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
|
mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
|
||||||
{
|
{
|
||||||
@@ -2366,16 +2369,23 @@ mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr)
|
|||||||
if (p[len] == '\0') {
|
if (p[len] == '\0') {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
else {
|
if (MRB_FROZEN_P(ps) || RSTR_CAPA(ps) == len) {
|
||||||
if (MRB_FROZEN_P(ps)) {
|
ps = str_new(mrb, NULL, len+1);
|
||||||
ps = str_new(mrb, p, len);
|
memcpy(RSTR_PTR(ps), p, len);
|
||||||
*ptr = mrb_obj_value(ps);
|
RSTR_SET_LEN(ps, len);
|
||||||
}
|
*ptr = mrb_obj_value(ps);
|
||||||
else {
|
|
||||||
mrb_str_modify(mrb, ps);
|
|
||||||
}
|
|
||||||
return RSTR_PTR(ps);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
mrb_str_modify(mrb, ps);
|
||||||
|
}
|
||||||
|
RSTR_PTR(ps)[len] = '\0';
|
||||||
|
return RSTR_PTR(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
MRB_API const char*
|
||||||
|
mrb_string_cstr(mrb_state *mrb, mrb_value str)
|
||||||
|
{
|
||||||
|
return mrb_string_value_cstr(mrb, &str);
|
||||||
}
|
}
|
||||||
|
|
||||||
MRB_API mrb_value
|
MRB_API mrb_value
|
||||||
@@ -2489,7 +2499,7 @@ bad:
|
|||||||
MRB_API double
|
MRB_API double
|
||||||
mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck)
|
mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck)
|
||||||
{
|
{
|
||||||
return mrb_cstr_to_dbl(mrb, mrb_string_value_cstr(mrb, &str), badcheck);
|
return mrb_cstr_to_dbl(mrb, RSTRING_CSTR(mrb, str), badcheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 15.2.10.5.39 */
|
/* 15.2.10.5.39 */
|
||||||
|
|||||||
Reference in New Issue
Block a user