Added a proper SIGHUP handler to patplex.
[ashd.git] / lib / utils.c
index e0dc22c..2b251e3 100644 (file)
@@ -163,6 +163,8 @@ void freeca(char **ca)
 {
     char **c;
     
+    if(ca == NULL)
+       return;
     for(c = ca; *c; c++)
        free(*c);
     free(ca);
@@ -175,3 +177,42 @@ int calen(char **a)
     for(i = 0; *a; a++, i++);
     return(i);
 }
+
+void bvprintf(struct charbuf *buf, char *format, va_list al)
+{
+    va_list al2;
+    int ret;
+    
+    while(1) {
+       va_copy(al2, al);
+       ret = vsnprintf(buf->b + buf->d, buf->s - buf->d, format, al2);
+       va_end(al2);
+       if(ret < buf->s - buf->d) {
+           buf->d += ret;
+           return;
+       }
+       sizebuf(*buf, buf->d + ret + 1);
+    }
+}
+
+void bprintf(struct charbuf *buf, char *format, ...)
+{
+    va_list args;
+    
+    va_start(args, format);
+    bvprintf(buf, format, args);
+    va_end(args);
+}
+
+void replstr(char **p, char *n)
+{
+    char *tmp;
+    
+    tmp = *p;
+    if(n)
+       *p = sstrdup(n);
+    else
+       *p = NULL;
+    if(tmp)
+       free(tmp);
+}