]> git.ipfire.org Git - people/ms/strongswan.git/commitdiff
Implemented generic enum name to enum value mapping
authorMartin Willi <martin@revosec.ch>
Fri, 20 Aug 2010 18:45:05 +0000 (20:45 +0200)
committerMartin Willi <martin@revosec.ch>
Mon, 23 Aug 2010 07:47:03 +0000 (09:47 +0200)
src/libstrongswan/enum.c
src/libstrongswan/enum.h

index 946a54deb8e51e77305abd6c088676028feedb78..258a5b410f9703f001c921b00d5b870d14392c96 100644 (file)
 #include <stddef.h>
 #include <stdio.h>
 
+#include <library.h>
+
 #include "enum.h"
 
 /**
- * get the name of an enum value in a enum_name_t list
+ * See header.
  */
-static char *enum_name(enum_name_t *e, int val)
+char *enum_to_name(enum_name_t *e, int val)
 {
        do
        {
@@ -34,6 +36,27 @@ static char *enum_name(enum_name_t *e, int val)
        return NULL;
 }
 
+/**
+ * See header.
+ */
+int enum_from_name(enum_name_t *e, char *name)
+{
+       do
+       {
+               int i, count = e->last - e->first;
+
+               for (i = 0; i < count; i++)
+               {
+                       if (strcaseeq(name, e->names[i]))
+                       {
+                               return e->first + i;
+                       }
+               }
+       }
+       while ((e = e->next));
+       return -1;
+}
+
 /**
  * Described in header.
  */
@@ -43,7 +66,7 @@ int enum_printf_hook(char *dst, size_t len, printf_hook_spec_t *spec,
        enum_name_t *ed = *((enum_name_t**)(args[0]));
        int val = *((int*)(args[1]));
 
-       char *name = enum_name(ed, val);
+       char *name = enum_to_name(ed, val);
 
        if (name == NULL)
        {
index 691f9f2bcbcdfca97ed9bde795b31bf59bcc3d71..d5f169772b7b48bee3b2ffad8e49c0207c5a6216 100644 (file)
@@ -106,6 +106,24 @@ struct enum_name_t {
  */
 #define ENUM(name, first, last, ...) ENUM_BEGIN(name, first, last, __VA_ARGS__); ENUM_END(name, last)
 
+/**
+ * Convert a enum value to its string representation.
+ *
+ * @param e            enum names for this enum value
+ * @param val  enum value to get string for
+ * @return             string for enum, NULL if not found
+ */
+char *enum_to_name(enum_name_t *e, int val);
+
+/**
+ * Convert a enum string back to its enum value.
+ *
+ * @param e            enum names for this enum value
+ * @param name name to get enum value for
+ * @return             enum value, -1 if not found
+ */
+int enum_from_name(enum_name_t *e, char *name);
+
 /**
  * printf hook function for enum_names_t.
  *