X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=lib%2Futil.c;h=72138a0668ac00b874f234077ecbe118dd9ec9a1;hb=ddbf6040e308bd5f3c5d6ac6445f5a0e58735d07;hp=0c70710dde0c28a9b1779862dd7c5a485ce1d0ac;hpb=84f7d34079fcc68bfa335adec9a4fbcb75d52bd4;p=sliver-openvswitch.git diff --git a/lib/util.c b/lib/util.c index 0c70710dd..72138a066 100644 --- a/lib/util.c +++ b/lib/util.c @@ -33,6 +33,7 @@ #include #include "util.h" +#include #include #include #include @@ -100,25 +101,47 @@ xstrdup(const char *s) } char * -xasprintf(const char *format, ...) +xvasprintf(const char *format, va_list args) { - va_list args; + va_list args2; size_t needed; char *s; - va_start(args, format); + va_copy(args2, args); needed = vsnprintf(NULL, 0, format, args); - va_end(args); s = xmalloc(needed + 1); + vsnprintf(s, needed + 1, format, args2); + va_end(args2); + + return s; +} + +char * +xasprintf(const char *format, ...) +{ + va_list args; + char *s; + va_start(args, format); - vsnprintf(s, needed + 1, format, args); + s = xvasprintf(format, args); va_end(args); return s; } +void +strlcpy(char *dst, const char *src, size_t size) +{ + if (size > 0) { + size_t n = strlen(src); + size_t n_copy = MIN(n, size - 1); + memcpy(dst, src, n_copy); + dst[n_copy] = '\0'; + } +} + void ofp_fatal(int err_no, const char *format, ...) { @@ -138,6 +161,7 @@ ofp_fatal(int err_no, const char *format, ...) void ofp_error(int err_no, const char *format, ...) { + int save_errno = errno; va_list args; fprintf(stderr, "%s: ", program_name); @@ -147,6 +171,8 @@ ofp_error(int err_no, const char *format, ...) if (err_no != 0) fprintf(stderr, " (%s)", strerror(err_no)); putc('\n', stderr); + + errno = save_errno; } /* Sets program_name based on 'argv0'. Should be called at the beginning of