Adding a helper function that translates single characters in a string.
authorTobias Brunner <tobias@strongswan.org>
Mon, 8 Mar 2010 14:26:09 +0000 (15:26 +0100)
committerTobias Brunner <tobias@strongswan.org>
Mon, 8 Mar 2010 14:34:38 +0000 (15:34 +0100)
src/libstrongswan/plugins/plugin_loader.c
src/libstrongswan/utils.c
src/libstrongswan/utils.h

index 5dfeb87..abcb844 100644 (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))
index b1b8603..fd31384 100644 (file)
@@ -119,6 +119,28 @@ void *memstr(const void *haystack, const char *needle, size_t n)
 /**
  * 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.
+ */
 bool mkdir_p(const char *path, mode_t mode)
 {
        int len;
index d350025..607d077 100644 (file)
@@ -311,6 +311,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.
  *
  * @param path         path to the new directory