コード例 #1
0
ファイル: lcurlapi.c プロジェクト: Lua-cURL/Lua-cURLv3
static int lcurl_url_get(lua_State *L, CURLUPart what, CURLUcode empty) {
  lcurl_url_t *p = lcurl_geturl(L);
  CURLUcode code;
  char *part = NULL;
  unsigned int flags = 0;

  flags = (unsigned int)lutil_optint64(L, 2, 0);

  code = curl_url_get(p->url, what, &part, flags);
  if (code != CURLUE_OK) {
    if (part) {
      curl_free(part);
      part = NULL;
    }

    if (code != empty) {
      return lcurl_fail_ex(L, p->err_mode, LCURL_ERROR_URL, code);
    }
  }

  if (part == NULL) {
    lutil_push_null(L);
  }
  else {
    lua_pushstring(L, part);
    curl_free(part);
  }

  return 1;
}
コード例 #2
0
ファイル: lcurl.c プロジェクト: tongson/omnia
static int luaopen_lcurl_(lua_State *L, const struct luaL_Reg *func){
  if(!LCURL_INIT){
    /* Note from libcurl documentation.
     *
     * The environment it sets up is constant for the life of the program
     * and is the same for every program, so multiple calls have the same
     * effect as one call. ... This function is not thread safe.
     */
    curl_global_init(CURL_GLOBAL_DEFAULT);
    LCURL_INIT = 1;
  }

  lua_rawgetp(L, LUA_REGISTRYINDEX, LCURL_REGISTRY);
  if(!lua_istable(L, -1)){ /* registry */
    lua_pop(L, 1);
    lua_newtable(L);
  }

  lua_rawgetp(L, LUA_REGISTRYINDEX, LCURL_USERVAL);
  if(!lua_istable(L, -1)){ /* usevalues */
    lua_pop(L, 1);
    lcurl_util_new_weak_table(L, "k");
  }

#if LCURL_CURL_VER_GE(7,56,0)
  lua_rawgetp(L, LUA_REGISTRYINDEX, LCURL_MIME_EASY_MAP);
  if(!lua_istable(L, -1)){ /* Mime->Easy */
    lua_pop(L, 1);
    lcurl_util_new_weak_table(L, "v");
  }
#endif

  lua_newtable(L); /* library  */

  LCURL_PUSH_NUP(L); luaL_setfuncs(L, func, NUP);
  LCURL_PUSH_NUP(L); lcurl_error_initlib(L, NUP);
  LCURL_PUSH_NUP(L); lcurl_hpost_initlib(L, NUP);
  LCURL_PUSH_NUP(L); lcurl_easy_initlib (L, NUP);
  LCURL_PUSH_NUP(L); lcurl_mime_initlib (L, NUP);
  LCURL_PUSH_NUP(L); lcurl_multi_initlib(L, NUP);
  LCURL_PUSH_NUP(L); lcurl_share_initlib(L, NUP);

  LCURL_PUSH_NUP(L);

#if LCURL_CURL_VER_GE(7,56,0)
  lua_rawsetp(L, LUA_REGISTRYINDEX, LCURL_MIME_EASY_MAP);
#endif

  lua_rawsetp(L, LUA_REGISTRYINDEX, LCURL_USERVAL);
  lua_rawsetp(L, LUA_REGISTRYINDEX, LCURL_REGISTRY);

  lcurl_util_set_const(L, lcurl_flags);

  lutil_push_null(L);
  lua_setfield(L, -2, "null");

  return 1;
}