diff options
| author | Tomoyuki Sahara <[email protected]> | 2015-11-24 09:47:09 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2015-11-24 09:47:09 +0900 |
| commit | 1f4bd9fd9f0cfc9a67c5fd92f4e5fdde5facf7a1 (patch) | |
| tree | 7f2adbdee16c9abbc760ec428a95f629f0a46d95 /src | |
| parent | 14cdff075dd4e0e6f39a397a399a28ef0a13933f (diff) | |
| parent | 2cc674e58e04a0ae403e0429013ef79e129afeb4 (diff) | |
| download | mruby-1f4bd9fd9f0cfc9a67c5fd92f4e5fdde5facf7a1.tar.gz mruby-1f4bd9fd9f0cfc9a67c5fd92f4e5fdde5facf7a1.zip | |
Merge pull request #50 from takahashim/file-symlink
add File.symlink
Diffstat (limited to 'src')
| -rw-r--r-- | src/file.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/file.c b/src/file.c index feb8558ed..9054b67aa 100644 --- a/src/file.c +++ b/src/file.c @@ -290,6 +290,26 @@ mrb_file_flock(mrb_state *mrb, mrb_value self) } #endif +static mrb_value +mrb_file_s_symlink(mrb_state *mrb, mrb_value klass) +{ +#if defined(_WIN32) || defined(_WIN64) + mrb_raise(mrb, E_NOTIMP_ERROR, "symlink is not supported on this platform"); +#else + mrb_value from, to; + const char *src, *dst; + + mrb_get_args(mrb, "SS", &from, &to); + src = mrb_string_value_cstr(mrb, &from); + dst = mrb_string_value_cstr(mrb, &to); + + if (symlink(src, dst) < 0) { + mrb_sys_fail(mrb, mrb_str_to_cstr(mrb, mrb_format(mrb, "(%S, %S)", from, to))); + } +#endif + return mrb_fixnum_value(0); +} + void mrb_init_file(mrb_state *mrb) { @@ -302,6 +322,7 @@ mrb_init_file(mrb_state *mrb) mrb_define_class_method(mrb, file, "delete", mrb_file_s_unlink, MRB_ARGS_ANY()); mrb_define_class_method(mrb, file, "unlink", mrb_file_s_unlink, MRB_ARGS_ANY()); mrb_define_class_method(mrb, file, "rename", mrb_file_s_rename, MRB_ARGS_REQ(2)); + mrb_define_class_method(mrb, file, "symlink", mrb_file_s_symlink, MRB_ARGS_REQ(2)); mrb_define_class_method(mrb, file, "dirname", mrb_file_dirname, MRB_ARGS_REQ(1)); mrb_define_class_method(mrb, file, "basename", mrb_file_basename, MRB_ARGS_REQ(1)); |
