Exemplo n.º 1
0
mrb_value
mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
{
  mrb_value path = mrb_nil_value();
  mrb_value mode = mrb_nil_value();
  mrb_int fd, flags, perm = -1;
  const char *pat;
  int modenum;

  mrb_get_args(mrb, "S|Si", &path, &mode, &perm);
  if (mrb_nil_p(mode)) {
    mode = mrb_str_new_cstr(mrb, "r");
  }
  if (perm < 0) {
    perm = 0666;
  }

  pat = mrb_string_value_cstr(mrb, &path);
  flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
  modenum = mrb_io_flags_to_modenum(mrb, flags);

  fd = open(pat, modenum, perm);
  if (fd == -1) {
    mrb_sys_fail(mrb, pat);
  }

  return mrb_fixnum_value(fd);
}
Exemplo n.º 2
0
static int
io_open(mrb_state *mrb, mrb_value path, int flags, int perm)
{
  const char *pat;
  int modenum;

  pat = mrb_string_value_cstr(mrb, &path);
  modenum = mrb_io_flags_to_modenum(mrb, flags);

  return open(pat, modenum, perm);
}