1.1 --- a/librazor/lua.c Thu May 14 05:55:19 2009 +0100
1.2 +++ b/librazor/lua.c Wed Jun 03 08:26:09 2009 +0100
1.3 @@ -328,6 +328,24 @@
1.4 ploader->func = loader;
1.5 }
1.6
1.7 +RAZOR_EXPORT void (*razor_get_lua_loader(const char *modname))()
1.8 +{
1.9 + uint32_t name;
1.10 + struct razor_lua_loader *ploader, *end;
1.11 +
1.12 + if (!razor_preload.init)
1.13 + return 0;
1.14 +
1.15 + name = hashtable_lookup(&razor_preload.modules, modname);
1.16 +
1.17 + end = razor_preload.loaders.data + razor_preload.loaders.size;
1.18 + for(ploader = razor_preload.loaders.data; ploader < end; ploader++)
1.19 + if (ploader->name == name)
1.20 + return ploader->func;
1.21 +
1.22 + return 0;
1.23 +}
1.24 +
1.25 static void razor_lua_preload(lua_State *L)
1.26 {
1.27 struct razor_lua_loader *ploader, *end;
2.1 --- a/librazor/razor.h Thu May 14 05:55:19 2009 +0100
2.2 +++ b/librazor/razor.h Wed Jun 03 08:26:09 2009 +0100
2.3 @@ -57,7 +57,12 @@
2.4 RAZOR_PROPERTY_PRE = 1 << 5,
2.5 RAZOR_PROPERTY_POST = 1 << 6,
2.6 RAZOR_PROPERTY_PREUN = 1 << 7,
2.7 - RAZOR_PROPERTY_POSTUN = 1 << 8
2.8 + RAZOR_PROPERTY_POSTUN = 1 << 8,
2.9 + RAZOR_PROPERTY_SCRIPT_MASK =
2.10 + RAZOR_PROPERTY_PRE |
2.11 + RAZOR_PROPERTY_POST |
2.12 + RAZOR_PROPERTY_PREUN |
2.13 + RAZOR_PROPERTY_POSTUN
2.14 };
2.15
2.16 /**
2.17 @@ -382,6 +387,7 @@
2.18 void razor_disable_root_name_checks(int disable);
2.19
2.20 void razor_set_lua_loader(const char *modname, void (*loader)());
2.21 +void (*razor_get_lua_loader(const char *modname))();
2.22
2.23
2.24 #endif /* _RAZOR_H_ */
3.1 --- a/librazor/transaction.c Thu May 14 05:55:19 2009 +0100
3.2 +++ b/librazor/transaction.c Wed Jun 03 08:26:09 2009 +0100
3.3 @@ -463,14 +463,25 @@
3.4 struct razor_property *p;
3.5 const char *pool;
3.6 int i, count;
3.7 + char *sub;
3.8
3.9 count = ts->set->properties.size / sizeof *p;
3.10 p = ts->set->properties.data;
3.11 pool = ts->set->string_pool.data;
3.12 for (i = 0; i < count; i++) {
3.13 ts->properties[i] &= ~TRANS_PROPERTY_SATISFIED;
3.14 - if (strncmp(&pool[p[i].name], "rpmlib(", 7) == 0)
3.15 - ts->properties[i] |= TRANS_PROPERTY_SATISFIED;
3.16 + sub = strchr(&pool[p[i].name], '(');
3.17 + if (sub && sub[strlen(sub) - 1] == ')') {
3.18 + sub = strdup(sub + 1);
3.19 + sub[strlen(sub) - 1] = '\0';
3.20 + if (strncmp(&pool[p[i].name], "rpmlib(", 7) == 0)
3.21 + ts->properties[i] |= TRANS_PROPERTY_SATISFIED;
3.22 + if (strncmp(&pool[p[i].name], "lua(", 4) == 0 &&
3.23 + razor_get_lua_loader(sub) &&
3.24 + p[i].flags & RAZOR_PROPERTY_SCRIPT_MASK)
3.25 + ts->properties[i] |= TRANS_PROPERTY_SATISFIED;
3.26 + free(sub);
3.27 + }
3.28 }
3.29 }
3.30