-/*
- * Strechy string buffer (for easy string creation) -- this is fast, just
- * say no to strict aliasing.
- */
-//#define util_stringbuf_add(a,v) ((((a)==0 ||((int*)(a)-2)[1]+(1)>=((int*)(a)-2)[0])?util_stringbuf_grow((void**)&(a),(1),sizeof(*(a))):0),(a)[((int*)(a)-2)[1]++]=(v))
-//#define util_stringbuf_len(a) ((a)? ((int*)(a)-2)[1]:0)
-//#define util_stringbuf_del(a) ((a)?free (((int*)(a)-2)),0:0)
-void *util_stringbuf_grow(void **a, int in, int it) {
- int m = *a ? 2 * ((int*)(*a)-2)[0]+in : in+1;
- void *p = realloc(*a ? ((int*)(*a)-2) : 0, it * m + sizeof(int)*2);
- if (p) {
- if (!*a) ((int*)p)[1] = 0;
- *a = (void*)((int*)p+2);
- ((int*)(*a)-2)[0] = m;
+size_t util_strtocmd(const char *in, char *out, size_t outsz) {
+ size_t sz = 1;
+ for (; *in && sz < outsz; ++in, ++out, ++sz) {
+ if (*in == '-')
+ *out = '_';
+ else if (isalpha(*in) && !isupper(*in))
+ *out = *in + 'A' - 'a';
+ else
+ *out = *in;
+ }
+ *out = 0;
+ return sz-1;
+}
+
+size_t util_strtononcmd(const char *in, char *out, size_t outsz) {
+ size_t sz = 1;
+ for (; *in && sz < outsz; ++in, ++out, ++sz) {
+ if (*in == '_')
+ *out = '-';
+ else if (isalpha(*in) && isupper(*in))
+ *out = *in + 'a' - 'A';
+ else
+ *out = *in;