# HG changeset patch # User J. Ali Harlow # Date 1244013969 -3600 # Node ID ea743486ba6f09d7b291bdba749eba24beba3605 # Parent e45f50e940b63a90984d0bb6a51262cbb60e695a Add automatic provides for lua pre-loaded modules diff -r e45f50e940b6 -r ea743486ba6f librazor/lua.c --- a/librazor/lua.c Thu May 14 05:55:19 2009 +0100 +++ b/librazor/lua.c Wed Jun 03 08:26:09 2009 +0100 @@ -328,6 +328,24 @@ ploader->func = loader; } +RAZOR_EXPORT void (*razor_get_lua_loader(const char *modname))() +{ + uint32_t name; + struct razor_lua_loader *ploader, *end; + + if (!razor_preload.init) + return 0; + + name = hashtable_lookup(&razor_preload.modules, modname); + + end = razor_preload.loaders.data + razor_preload.loaders.size; + for(ploader = razor_preload.loaders.data; ploader < end; ploader++) + if (ploader->name == name) + return ploader->func; + + return 0; +} + static void razor_lua_preload(lua_State *L) { struct razor_lua_loader *ploader, *end; diff -r e45f50e940b6 -r ea743486ba6f librazor/razor.h --- a/librazor/razor.h Thu May 14 05:55:19 2009 +0100 +++ b/librazor/razor.h Wed Jun 03 08:26:09 2009 +0100 @@ -57,7 +57,12 @@ RAZOR_PROPERTY_PRE = 1 << 5, RAZOR_PROPERTY_POST = 1 << 6, RAZOR_PROPERTY_PREUN = 1 << 7, - RAZOR_PROPERTY_POSTUN = 1 << 8 + RAZOR_PROPERTY_POSTUN = 1 << 8, + RAZOR_PROPERTY_SCRIPT_MASK = + RAZOR_PROPERTY_PRE | + RAZOR_PROPERTY_POST | + RAZOR_PROPERTY_PREUN | + RAZOR_PROPERTY_POSTUN }; /** @@ -382,6 +387,7 @@ void razor_disable_root_name_checks(int disable); void razor_set_lua_loader(const char *modname, void (*loader)()); +void (*razor_get_lua_loader(const char *modname))(); #endif /* _RAZOR_H_ */ diff -r e45f50e940b6 -r ea743486ba6f librazor/transaction.c --- a/librazor/transaction.c Thu May 14 05:55:19 2009 +0100 +++ b/librazor/transaction.c Wed Jun 03 08:26:09 2009 +0100 @@ -463,14 +463,25 @@ struct razor_property *p; const char *pool; int i, count; + char *sub; count = ts->set->properties.size / sizeof *p; p = ts->set->properties.data; pool = ts->set->string_pool.data; for (i = 0; i < count; i++) { ts->properties[i] &= ~TRANS_PROPERTY_SATISFIED; - if (strncmp(&pool[p[i].name], "rpmlib(", 7) == 0) - ts->properties[i] |= TRANS_PROPERTY_SATISFIED; + sub = strchr(&pool[p[i].name], '('); + if (sub && sub[strlen(sub) - 1] == ')') { + sub = strdup(sub + 1); + sub[strlen(sub) - 1] = '\0'; + if (strncmp(&pool[p[i].name], "rpmlib(", 7) == 0) + ts->properties[i] |= TRANS_PROPERTY_SATISFIED; + if (strncmp(&pool[p[i].name], "lua(", 4) == 0 && + razor_get_lua_loader(sub) && + p[i].flags & RAZOR_PROPERTY_SCRIPT_MASK) + ts->properties[i] |= TRANS_PROPERTY_SATISFIED; + free(sub); + } } }