[Libsysio-commit] HEAD: libsysio/src cprintf.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2008-04-07 18:59:56
|
Update of /cvsroot/libsysio/libsysio/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27524/src Modified Files: cprintf.c Log Message: Added routine and global definition for a rudimentary diagnostic printf called _sysio_diag_printf. Index: cprintf.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/src/cprintf.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -b -B -p -r1.1 -r1.2 --- cprintf.c 20 Aug 2007 16:02:56 -0000 1.1 +++ cprintf.c 7 Apr 2008 18:59:48 -0000 1.2 @@ -93,7 +93,6 @@ vasprintf(char **strp, const char *fmt, return n; } -#if 0 static int asprintf(char **strp, const char *fmt, ...) { @@ -105,7 +104,6 @@ asprintf(char **strp, const char *fmt, . va_end(ap); return n; } -#endif #endif /* !(defined(_HAVE_ASPRINTF) && _HAVE_ASPRINTF) */ static void @@ -137,3 +135,40 @@ _sysio_cprintf(const char *fmt, ...) _sysio_cwrite(buf, len); free(buf); } + +#ifndef NDEBUG +/* + * Diagnostic printf. + */ +void +_sysio_diag_printf(const char *funidnam, const char *fmt, ...) +{ + int prelen; + char *pre; + va_list ap; + int msglen; + char *msg; + char *buf; + + prelen = asprintf(&pre, "%s: ", funidnam); + if (prelen < 0) + return; + va_start(ap, fmt); + msglen = vasprintf(&msg, fmt, ap); + va_end(ap); + if (msglen < 0) { + free(pre); + return; + } + buf = malloc(prelen - 1 + msglen); + if (buf) { + (void )strcpy(buf, pre); + (void )strcpy(buf + prelen, msg); + *(buf + prelen + msglen) = '\0'; + _sysio_cwrite(buf, prelen + msglen); + free(buf); + } + free(msg); + free(pre); +} +#endif |