Add automatic provides for lua pre-loaded modules
authorJ. Ali Harlow <ali@juiblex.co.uk>
Wed Jun 03 08:26:09 2009 +0100 (2009-06-03)
changeset 368ea743486ba6f
parent 367 e45f50e940b6
child 369 f8c27fe9fe63
Add automatic provides for lua pre-loaded modules
librazor/lua.c
librazor/razor.h
librazor/transaction.c
     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