Adding a helper function that translates single characters in a string.

This commit is contained in:
Tobias Brunner 2010-03-08 15:26:09 +01:00
parent d14203b009
commit d543d9cadf
3 changed files with 32 additions and 19 deletions

View File

@ -50,23 +50,6 @@ struct private_plugin_loader_t {
linked_list_t *names;
};
/**
* Replace '-' with '_' to use str as identifier.
*/
static char* sanitize(char *str)
{
char *pos = str;
while (pos && *pos)
{
if (*pos == '-')
{
*pos = '_';
}
pos++;
}
return str;
}
#ifdef MONOLITHIC
/**
* load a single plugin in monolithic mode
@ -83,7 +66,7 @@ static plugin_t* load_plugin(private_plugin_loader_t *this,
{
return NULL;
}
sanitize(create);
translate(create, "-", "_");
constructor = dlsym(RTLD_DEFAULT, create);
if (constructor == NULL)
{
@ -120,7 +103,7 @@ static plugin_t* load_plugin(private_plugin_loader_t *this,
{
return NULL;
}
sanitize(create);
translate(create, "-", "_");
if (lib->integrity)
{
if (!lib->integrity->check_file(lib->integrity, name, file))

View File

@ -116,6 +116,28 @@ void *memstr(const void *haystack, const char *needle, size_t n)
return NULL;
}
/**
* Described in header.
*/
char* translate(char *str, const char *from, const char *to)
{
char *pos = str;
if (strlen(from) != strlen(to))
{
return str;
}
while (pos && *pos)
{
char *match;
if ((match = strchr(from, *pos)) != NULL)
{
*pos = to[match - from];
}
pos++;
}
return str;
}
/**
* Described in header.
*/

View File

@ -310,6 +310,14 @@ void memxor(u_int8_t dest[], u_int8_t src[], size_t n);
*/
void *memstr(const void *haystack, const char *needle, size_t n);
/**
* Translates the characters in the given string, searching for characters
* in 'from' and mapping them to characters in 'to'.
* The two characters sets 'from' and 'to' must contain the same number of
* characters.
*/
char *translate(char *str, const char *from, const char *to);
/**
* Creates a directory and all required parent directories.
*