X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Futils.c;h=2ecae5a6c0a1056135d029a4b54935736feaf902;hb=f812ea037b5c693977e83ace9ed7ac2515a4a6d0;hp=3dda9e5ed7e8955053e4e756b087b1056bccacb0;hpb=f2b26d44416abd494ce430659cfbbf254d9c3c55;p=ashd.git diff --git a/lib/utils.c b/lib/utils.c index 3dda9e5..2ecae5a 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -167,3 +167,50 @@ void freeca(char **ca) free(*c); free(ca); } + +int calen(char **a) +{ + int i; + + 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); +}