-void pa_namereg_free(pa_core *c) {
- assert(c);
- if (!c->namereg)
- return;
- assert(pa_hashmap_size(c->namereg) == 0);
- pa_hashmap_free(c->namereg, NULL, NULL);
+static pa_bool_t is_valid_char(char c) {
+ return
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ c == '.' ||
+ c == '-' ||
+ c == '_';
+}
+
+pa_bool_t pa_namereg_is_valid_name(const char *name) {
+ const char *c;
+
+ if (*name == 0)
+ return FALSE;
+
+ for (c = name; *c && (c-name < PA_NAME_MAX); c++)
+ if (!is_valid_char(*c))
+ return FALSE;
+
+ if (*c)
+ return FALSE;
+
+ return TRUE;
+}
+
+char* pa_namereg_make_valid_name(const char *name) {
+ const char *a;
+ char *b, *n;
+
+ if (*name == 0)
+ return NULL;
+
+ n = pa_xmalloc(strlen(name)+1);
+
+ for (a = name, b = n; *a && (a-name < PA_NAME_MAX); a++, b++)
+ *b = (char) (is_valid_char(*a) ? *a : '_');
+
+ *b = 0;
+
+ return n;