fix RSTRING_PTR usage.

This commit is contained in:
Tomoyuki Sahara
2013-10-03 12:18:39 +09:00
parent bf4c226232
commit 005f01f2fc
2 changed files with 36 additions and 40 deletions
+25 -34
View File
@@ -132,35 +132,29 @@ mrb_file_s_rename(mrb_state *mrb, mrb_value obj)
static mrb_value
mrb_file_dirname(mrb_state *mrb, mrb_value klass)
{
char *cp, *dname;
mrb_int n;
mrb_value fname;
char *dname, *path;
mrb_value s;
mrb_get_args(mrb, "s", &cp, &n);
fname = mrb_str_new(mrb, cp, n);
if ((dname = dirname(RSTRING_PTR(fname))) == NULL) {
mrb_sys_fail(mrb, "mrb_file_dirname failed.");
mrb_get_args(mrb, "S", &s);
path = mrb_str_to_cstr(mrb, s);
if ((dname = dirname(path)) == NULL) {
mrb_sys_fail(mrb, "dirname");
}
return mrb_str_new(mrb, dname, strlen(dname));
return mrb_str_new_cstr(mrb, dname);
}
static mrb_value
mrb_file_basename(mrb_state *mrb, mrb_value klass)
{
char *cp, *bname;
mrb_int n;
mrb_value fname;
char *bname, *path;
mrb_value s;
mrb_get_args(mrb, "s", &cp, &n);
fname = mrb_str_new(mrb, cp, n);
if ((bname = basename(RSTRING_PTR(fname))) == NULL) {
mrb_sys_fail(mrb, "mrb_file_basename failed.");
mrb_get_args(mrb, "S", &s);
path = mrb_str_to_cstr(mrb, s);
if ((bname = basename(path)) == NULL) {
mrb_sys_fail(mrb, "basename");
}
return mrb_str_new(mrb, bname, strlen(bname));
return mrb_str_new_cstr(mrb, bname);
}
static mrb_value
@@ -190,27 +184,26 @@ mrb_file_size(mrb_state *mrb, mrb_value klass)
{
char *cp;
FILE *fp;
mrb_int n;
mrb_int filesize;
mrb_value filename;
mrb_value s;
int saved_errno;
mrb_get_args(mrb, "s", &cp, &n);
filename = mrb_str_new(mrb, cp, n);
fp = fopen(RSTRING_PTR(filename), "rb");
mrb_get_args(mrb, "S", &s);
cp = mrb_str_to_cstr(mrb, s);
fp = fopen(cp, "rb");
if (fp == NULL) {
mrb_sys_fail(mrb, "mrb_file_size failed.");
mrb_sys_fail(mrb, "fopen");
return mrb_nil_value();
}
if (fseek(fp, 0, SEEK_END) != 0) {
mrb_sys_fail(mrb, "mrb_file_size failed.");
saved_errno = errno;
fclose(fp);
errno = saved_errno;
mrb_sys_fail(mrb, "fseek");
return mrb_nil_value();
}
filesize = (mrb_int) ftell(fp);
fclose(fp);
return mrb_fixnum_value(filesize);
}
@@ -230,9 +223,7 @@ mrb_file__getwd(mrb_state *mrb, mrb_value klass)
static int
mrb_file_is_absolute_path(const char *path)
{
if (path[0] == '/')
return 1;
return 0;
return (path[0] == '/');
}
static mrb_value
+11 -6
View File
@@ -30,14 +30,19 @@ assert('File#path', '15.2.21.4.2') do
io.closed?
end
assert('File.dirname') do
path = File.dirname("filename")
"." == path
assert('File.basename') do
assert_equal '/', File.basename('//')
assert_equal 'a', File.basename('/a/')
assert_equal 'b', File.basename('/a/b')
assert_equal 'b', File.basename('../a/b')
end
assert('File.basename') do
name = File.basename("../somewhere/filename")
name == "filename"
assert('File.dirname') do
assert_equal '.', File.dirname('')
assert_equal '.', File.dirname('a')
assert_equal '/', File.dirname('/a')
assert_equal 'a', File.dirname('a/b')
assert_equal '/a', File.dirname('/a/b')
end
assert('File.extname') do