X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Futils.c;h=a5faaa64e6ddebf12a2215b9c8a8843485421025;hb=9aee4cbccec780463362ace7fd611d7b591934b9;hp=004523502cde8a2ace14829610c767e1e3c9b33b;hpb=f0bbedf750f1530ec05bf2b8122479c924bbf2fe;p=ashd.git diff --git a/lib/utils.c b/lib/utils.c index 0045235..a5faaa6 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -17,7 +17,11 @@ */ #include +#include +#ifdef HAVE_CONFIG_H +#include +#endif #include void _sizebuf(struct buffer *buf, size_t wanted, size_t el) @@ -38,3 +42,64 @@ void _sizebuf(struct buffer *buf, size_t wanted, size_t el) buf->s = n; } +char *decstr(char **p, size_t *len) +{ + char *p2, *ret; + + for(p2 = *p; (p2 - *p) < *len; p2++) { + if(*p2 == 0) + break; + } + if((p2 - *p) == *len) + return(NULL); + p2++; + ret = *p; + *len -= p2 - *p; + *p = p2; + return(ret); +} + +char *vsprintf2(char *format, va_list al) +{ + int ret; + char *buf; + va_list al2; + + va_copy(al2, al); + ret = vsnprintf(NULL, 0, format, al2); + va_end(al2); + buf = smalloc(ret + 1); + va_copy(al2, al); + vsnprintf(buf, ret + 1, format, al2); + va_end(al2); + return(buf); +} + +char *sprintf2(char *format, ...) +{ + va_list args; + char *buf; + + va_start(args, format); + buf = vsprintf2(format, args); + va_end(args); + return(buf); +} + +char *sprintf3(char *format, ...) +{ + static char *buf = NULL; + va_list args; + + if(buf != NULL) + free(buf); + va_start(args, format); + buf = vsprintf2(format, args); + va_end(args); + return(buf); +} + +off_t atoo(char *n) +{ + return((off_t)strtoll(n, NULL, 10)); +}