コード例 #1
0
ファイル: iotjs_module_fs.cpp プロジェクト: Vincent2015/iotjs
JHANDLER_FUNCTION(Stat, handler) {
  int argc = handler.GetArgLength();

  if (argc < 1) {
    JHANDLER_THROW_RETURN(handler, TypeError, "path required");
  }
  if (!handler.GetArg(0)->IsString()) {
    JHANDLER_THROW_RETURN(handler, TypeError, "path must be a string");
  }

  Environment* env = Environment::GetEnv();

  String path = handler.GetArg(0)->GetString();

  if (argc > 1 && handler.GetArg(1)->IsFunction()) {
    FS_ASYNC(env, stat, handler.GetArg(1), path.data());
  } else {
    FS_SYNC(env, stat, path.data());
    uv_stat_t* s = &(req_wrap.data()->statbuf);
    JObject ret(MakeStatObject(s));
    handler.Return(ret);
  }

  return true;
}
コード例 #2
0
ファイル: iotjs_module_fs.c プロジェクト: Samsung/iotjs
static void AfterAsync(uv_fs_t* req) {
  const jerry_value_t cb = *IOTJS_UV_REQUEST_JSCALLBACK(req);
  IOTJS_ASSERT(jerry_value_is_function(cb));

  jerry_value_t jargs[2] = { 0 };
  size_t jargc = 0;
  if (req->result < 0) {
    jerry_value_t jerror = iotjs_create_uv_exception(req->result, "open");
    jargs[jargc++] = jerror;
  } else {
    jargs[jargc++] = jerry_create_null();
    switch (req->fs_type) {
      case UV_FS_CLOSE: {
        break;
      }
      case UV_FS_OPEN:
      case UV_FS_READ:
      case UV_FS_WRITE: {
        jargs[jargc++] = jerry_create_number((double)req->result);
        break;
      }
      case UV_FS_SCANDIR: {
        int r;
        uv_dirent_t ent;
        uint32_t idx = 0;
        jargs[jargc++] = jerry_create_array(0);
        while ((r = uv_fs_scandir_next(req, &ent)) != UV_EOF) {
          jerry_value_t name =
              jerry_create_string((const jerry_char_t*)ent.name);
          iotjs_jval_set_property_by_index(jargs[1], idx, name);
          jerry_release_value(name);
          idx++;
        }
        break;
      }
      case UV_FS_FSTAT:
      case UV_FS_STAT: {
        uv_stat_t s = (req->statbuf);
        jargs[jargc++] = MakeStatObject(&s);
        break;
      }
      default: { break; }
    }
  }

  iotjs_invoke_callback(cb, jerry_create_undefined(), jargs, jargc);

  jerry_release_value(jargs[0]);
  jerry_release_value(jargs[1]);
  uv_fs_req_cleanup(req);
  iotjs_uv_request_destroy((uv_req_t*)req);
}
コード例 #3
0
ファイル: iotjs_module_fs.c プロジェクト: Samsung/iotjs
static jerry_value_t AfterSync(uv_fs_t* req, int err,
                               const char* syscall_name) {
  if (err < 0) {
    jerry_value_t jvalue = iotjs_create_uv_exception(err, syscall_name);
    jerry_value_t jerror = jerry_create_error_from_value(jvalue, true);
    return jerror;
  }

  switch (req->fs_type) {
    case UV_FS_CLOSE:
      break;
    case UV_FS_OPEN:
    case UV_FS_READ:
    case UV_FS_WRITE:
      return jerry_create_number(err);
    case UV_FS_FSTAT:
    case UV_FS_STAT: {
      uv_stat_t* s = &(req->statbuf);
      return MakeStatObject(s);
    }
    case UV_FS_MKDIR:
    case UV_FS_RMDIR:
    case UV_FS_UNLINK:
    case UV_FS_RENAME:
      return jerry_create_undefined();
    case UV_FS_SCANDIR: {
      int r;
      uv_dirent_t ent;
      uint32_t idx = 0;
      jerry_value_t ret = jerry_create_array(0);
      while ((r = uv_fs_scandir_next(req, &ent)) != UV_EOF) {
        jerry_value_t name = jerry_create_string((const jerry_char_t*)ent.name);
        iotjs_jval_set_property_by_index(ret, idx, name);
        jerry_release_value(name);
        idx++;
      }
      return ret;
    }
    default: {
      IOTJS_ASSERT(false);
      break;
    }
  }
  return jerry_create_undefined();
}
コード例 #4
0
ファイル: iotjs_module_fs.cpp プロジェクト: Vincent2015/iotjs
static void After(uv_fs_t* req) {
  FsReqWrap* req_wrap = static_cast<FsReqWrap*>(req->data);
  IOTJS_ASSERT(req_wrap != NULL);
  IOTJS_ASSERT(req_wrap->data() == req);

  JObject cb = req_wrap->jcallback();
  IOTJS_ASSERT(cb.IsFunction());

  JArgList jarg(2);
  if (req->result < 0) {
    JObject jerror(CreateUVException(req->result, "open"));
    jarg.Add(jerror);
  } else {
    jarg.Add(JObject::Null());
    switch (req->fs_type) {
      case UV_FS_CLOSE:
      {
        break;
      }
      case UV_FS_OPEN:
      case UV_FS_READ:
      case UV_FS_WRITE:
      {
        JObject arg1(static_cast<int>(req->result));
        jarg.Add(arg1);
        break;
      }
      case UV_FS_STAT: {
        uv_stat_t s = (req->statbuf);
        JObject ret(MakeStatObject(&s));
        jarg.Add(ret);
        break;
      }
      default:
        jarg.Add(JObject::Null());
    }
  }

  JObject res = MakeCallback(cb, JObject::Null(), jarg);

  uv_fs_req_cleanup(req);

  delete req_wrap;
}
コード例 #5
0
ファイル: iotjs_module_fs.c プロジェクト: MoonkiHong/iotjs
static void AfterAsync(uv_fs_t* req) {
  iotjs_fs_reqwrap_t* req_wrap = (iotjs_fs_reqwrap_t*)(req->data);
  IOTJS_ASSERT(req_wrap != NULL);
  IOTJS_ASSERT(&req_wrap->req == req);

  const jerry_value_t cb = iotjs_reqwrap_jcallback(&req_wrap->reqwrap);
  IOTJS_ASSERT(jerry_value_is_function(cb));

  iotjs_jargs_t jarg = iotjs_jargs_create(2);
  if (req->result < 0) {
    jerry_value_t jerror = iotjs_create_uv_exception(req->result, "open");
    iotjs_jargs_append_jval(&jarg, jerror);
    jerry_release_value(jerror);
  } else {
    iotjs_jargs_append_null(&jarg);
    switch (req->fs_type) {
      case UV_FS_CLOSE: {
        break;
      }
      case UV_FS_OPEN:
      case UV_FS_READ:
      case UV_FS_WRITE: {
        iotjs_jargs_append_number(&jarg, (double)req->result);
        break;
      }
      case UV_FS_SCANDIR: {
        int r;
        uv_dirent_t ent;
        uint32_t idx = 0;
        jerry_value_t ret = jerry_create_array(0);
        while ((r = uv_fs_scandir_next(req, &ent)) != UV_EOF) {
          jerry_value_t name =
              jerry_create_string((const jerry_char_t*)ent.name);
          iotjs_jval_set_property_by_index(ret, idx, name);
          jerry_release_value(name);
          idx++;
        }
        iotjs_jargs_append_jval(&jarg, ret);
        jerry_release_value(ret);
        break;
      }
      case UV_FS_FSTAT:
      case UV_FS_STAT: {
        uv_stat_t s = (req->statbuf);
        jerry_value_t ret = MakeStatObject(&s);
        iotjs_jargs_append_jval(&jarg, ret);
        jerry_release_value(ret);
        break;
      }
      default: {
        iotjs_jargs_append_null(&jarg);
        break;
      }
    }
  }

  iotjs_make_callback(cb, jerry_create_undefined(), &jarg);

  iotjs_jargs_destroy(&jarg);
  iotjs_fs_reqwrap_destroy(req_wrap);
}