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;
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
};
/**
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_ */
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);
+ }
}
}