On Thu, 2012-07-26 at 07:32 +0200, Luca Barbato wrote: > +int snprintf(char *buffer, size_t bufsize, const char *fmt, ...) > +{ > + va_list ap; > + int ret; > + > + if ((int)bufsize <= 0) return -1;
bufsize == 0 is valid. > + ret = vsnprintf(buffer, bufsize-1, fmt, ap); IIRC MSVC (or the C library) does not support all standard format modifiers, so unless this vsnprintf comes from elsewhere, you need more to get fully working printf formatting. I'm not sure if this is working in current MinGW-compiled Libav either - you need to set __USE_MINGW_ANSI_STDIO at least; the problem cases probably occur rarely enough that problems may go unnoticed. > + if (ret < 0) { > + buffer[bufsize - 1] = '\0'; > + ret = bufsize - 1; Wrong return value. It's supposed to be the number of bytes the output would take without restriction. The following pattern is supposed to work: int r = snprintf(NULL, 0, ...); if (r < 0) return -1; char *p = malloc(r + 1); snprintf(p, r, ...); _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel