diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2010-12-15 10:09:35 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-09-15 17:13:07 +0000 |
commit | 08533d74fad85d1179b697655273dc6675e8d581 (patch) | |
tree | 1cbf0e2100839fea9f52f076ba1fc25315e1d87f | |
parent | 17b1e1aeca9ac569b763f4738687baadb51a301e (diff) | |
download | apk-tools-08533d74fad85d1179b697655273dc6675e8d581.tar.gz apk-tools-08533d74fad85d1179b697655273dc6675e8d581.tar.bz2 apk-tools-08533d74fad85d1179b697655273dc6675e8d581.tar.xz apk-tools-08533d74fad85d1179b697655273dc6675e8d581.zip |
lua: implement who_owns
-rw-r--r-- | src/lua-apk.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lua-apk.c b/src/lua-apk.c index a82ea9d..eae7869 100644 --- a/src/lua-apk.c +++ b/src/lua-apk.c @@ -1,3 +1,4 @@ +#include <features.h> #include <lua.h> #include <lualib.h> #include <lauxlib.h> @@ -83,6 +84,14 @@ static const char *get_opt_string_field(lua_State *L, int index, return value; } +static void set_string_field(lua_State *L, int index, const char *key, + const char *value) +{ + lua_pushstring(L, key); + lua_pushstring(L, value); + lua_settable(L, index); +} + static int get_opt_int_field(lua_State *L, int index, const char *key, int def) { int value; @@ -92,6 +101,13 @@ static int get_opt_int_field(lua_State *L, int index, const char *key, int def) return value; } +static void set_int_field(lua_State *L, int index, const char *key, int value) +{ + lua_pushstring(L, key); + lua_pushinteger(L, value); + lua_settable(L, index); +} + static int get_boolean_field(lua_State *L, int index, const char *key) { int value; @@ -153,11 +169,36 @@ static int Papk_db_close(lua_State *L) } +static int push_package(lua_State *L, struct apk_package *pkg) +{ + if (pkg == NULL) { + lua_pushnil(L); + return 1; + } + lua_newtable(L); + set_string_field(L, -3, "name", pkg->name->name); + set_string_field(L, -3, "version", apk_blob_cstr(*pkg->version)); + set_string_field(L, -3, "url", pkg->url); + set_string_field(L, -3, "license", apk_blob_cstr(*pkg->license)); + set_string_field(L, -3, "description", pkg->description); + set_string_field(L, -3, "filename", pkg->filename); + set_int_field(L, -3, "size", pkg->size); + return 1; +} +static int Papk_who_owns(lua_State *L) +{ + struct apk_database *db = checkdb(L, 1); + const char *path = luaL_checkstring(L, 2); + struct apk_package *pkg = apk_db_get_file_owner(db, APK_BLOB_STR(path)); + return push_package(L, pkg); +} + static const luaL_reg reg_apk_methods[] = { {"version_validate", Pversion_validate}, {"version_compare", Pversion_compare}, {"version_is_less", Pversion_is_less}, {"db_open", Papk_db_open}, + {"who_owns", Papk_who_owns}, {NULL, NULL} }; |