#include #include #include #include #ifdef _WIN32 #define vsnprintf _vsnprintf #endif char * _file; int _line; #define debug _file = __FILE__, _line = __LINE__, format #define vsnprintf_loop(buf, buflen, format, written) \ { \ int _rc; \ va_list _vl; \ unsigned int _count; \ \ _count = 0; \ \ va_start(_vl, format); \ _rc = vsnprintf(buf, buflen - _count, format, _vl); \ if(_rc < 0) { \ fprintf(stderr, "!!! EVENT REPORTING FAILED at %s(%i): vsnprintf() returned error code %i in vsnprintf_loop(): %s", \ __FILE__, __LINE__, _rc, strerror(errno)); \ return; \ } \ _count += _rc; \ buf[_count] = '\0'; \ va_end(_vl); \ \ *written = _count; \ } static char buf[4096]; void format(char * format, ...) { unsigned int written; vsnprintf_loop(buf, sizeof(buf), format, &written); printf("%s(%i): %s", _file, _line, buf); } int main(void) { char hello[] = "Hello, World!!!!"; if(1) debug("crap: %u %s %i %c\n", 1, "poo", -5, '#'); else debug("nothing to see here"); return 0; }