From: J. Ali Harlow Date: Wed, 3 Jun 2009 07:26:09 +0000 (+0100) Subject: Add automatic provides for lua pre-loaded modules X-Git-Tag: 0.1~10 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=ba508ae6918dc551b955d28dcd358b42f4a8c746;p=razor2.git%2F.git Add automatic provides for lua pre-loaded modules --- diff --git a/librazor/lua.c b/librazor/lua.c index 97e08d7..dd33048 100644 --- a/librazor/lua.c +++ b/librazor/lua.c @@ -328,6 +328,24 @@ RAZOR_EXPORT void razor_set_lua_loader(const char *modname, void (*loader)()) 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 --git a/librazor/razor.h b/librazor/razor.h index cbe0f7a..64b1536 100644 --- a/librazor/razor.h +++ b/librazor/razor.h @@ -57,7 +57,12 @@ enum razor_property_flags { 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 @@ int razor_versioncmp(const char *s1, const char *s2); 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 --git a/librazor/transaction.c b/librazor/transaction.c index 04e1a08..e6e9bfb 100644 --- a/librazor/transaction.c +++ b/librazor/transaction.c @@ -463,14 +463,25 @@ clear_requires_flags(struct transaction_set *ts) 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); + } } }