From 005f01f2fc1b03a142ae04d4c94255fca15ddd33 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Thu, 3 Oct 2013 12:18:39 +0900 Subject: fix RSTRING_PTR usage. --- src/file.c | 59 +++++++++++++++++++++++++---------------------------------- test/file.rb | 17 +++++++++++------ 2 files changed, 36 insertions(+), 40 deletions(-) diff --git a/src/file.c b/src/file.c index 5c46aa965..ea45b2c0b 100644 --- a/src/file.c +++ b/src/file.c @@ -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 diff --git a/test/file.rb b/test/file.rb index 4b3458d1a..8865a30a9 100644 --- a/test/file.rb +++ b/test/file.rb @@ -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 -- cgit v1.2.3