summaryrefslogtreecommitdiff
path: root/name.c
diff options
context:
space:
mode:
Diffstat (limited to 'name.c')
-rw-r--r--name.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/name.c b/name.c
index 4b4b0b87d1..15e324c5f2 100644
--- a/name.c
+++ b/name.c
@@ -2,6 +2,7 @@
#include <assert.h>
#include <errno.h>
+#include <string.h>
#include "set.h"
#include "name.h"
@@ -30,6 +31,32 @@ NameType name_type_from_string(const char *n) {
return _NAME_TYPE_INVALID;
}
+#define VALID_CHARS \
+ "0123456789" \
+ "abcdefghijklmnopqrstuvwxyz" \
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+ "-_"
+
+bool name_is_valid(const char *n) {
+ NameType t;
+ const char *e, *i;
+
+ assert(n);
+
+ t = name_type_from_string(n);
+ if (t < 0 || t >= _NAME_TYPE_MAX)
+ return false;
+
+ if (!(e = strrchr(n, '.')))
+ return false;
+
+ for (i = n; i < e; i++)
+ if (!strchr(VALID_CHARS, *i))
+ return false;
+
+ return true;
+}
+
Name *name_new(Manager *m) {
Name *n;