Re: [gs-cvs] rev 7674 - trunk/gs/src
"SaGS" <[email protected]> Sun, 4 Feb 2007 10:36:15 +0200
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. ------=_NextPart_000_0078_01C74848.4C0CC920 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hello all, Current TRUNK (rev 7674) doesn't compile anymore with .NET2003 or VS6. These define neither "snprintf" nor "vsnprintf_s". I suggest to emulate the missing "snprintf" using "_[v]snprintf" (with a leading underscore), which exist in Microsoft CRTLs since ages; see attached patch. This emulation is not perfect (see comment in code), but I consider that a perfect emulation, expected to return the exact number of bytes needed for the output string no matter how large this would be, is overkill. Non-MS compilers may still need some different solution, with #ifdef /etc. I don't have any of these to check and suggest something for them. ----- Original Message ----- From: "Leonardo" <[email protected]> To: <[email protected]> Sent: Saturday, 03 February 2007 15:34 Subject: [gs-cvs] rev 7674 - wrong log message > The log message should start as this : > > > Fix : MSVC doesn't implement snprintf. > > Leo. > > > > ----- Original Message ----- > From: <[email protected]> > To: <[email protected]> > Sent: Saturday, February 03, 2007 4:30 PM > Subject: [gs-cvs] rev 7674 - trunk/gs/src > > > > Author: leonardo > > Date: 2007-02-03 05:30:24 -0800 (Sat, 03 Feb 2007) > > New Revision: 7674 > > > > Modified: > > trunk/gs/src/gp_mswin.c > > trunk/gs/src/iscan.c > > trunk/gs/src/stdio_.h > > Log: > > Fix : MSVC doesn't implement snscanf. > > > > DETAILS : > > > > The revision 7672 doesn't compile with Microsoft Visual C++ 2005, > > because this compiler doesn't properly define snprintf. > > > > The function snsprintf is a part of the C standard ISO/IEC 9899:1999 (E), > > so we decided to define it in the Windows platform-dependent module. > > Possibly we'll need a further improvement for other Windows compilers. > > > > Minor change : fixed an MSVC cast warning in iscan.c, > > which has been introduced in revision 7672. > > > > EXPECTED DIFFERENCES : > > > > None. > > > > > > Modified: trunk/gs/src/gp_mswin.c > > =================================================================== > > --- trunk/gs/src/gp_mswin.c 2007-02-03 06:27:14 UTC (rev 7673) > > +++ trunk/gs/src/gp_mswin.c 2007-02-03 13:30:24 UTC (rev 7674) > > @@ -46,6 +46,7 @@ > > #include "gsexit.h" > > > > #include "windows_.h" > > +#include <stdarg.h> > > #include <shellapi.h> > > #include <winspool.h> > > #include "gp_mswin.h" > > @@ -716,3 +717,16 @@ > > return _fseeki64(strm, offset, origin); > > #endif > > } > > + > > +/* ------------------------- _snprintf -----------------------------*/ > > + > > +/* Microsoft Visual C++ 2005 doesn't properly define snprintf, > > + which is defined in the C standard ISO/IEC 9899:1999 (E) */ > > + > > +int snprintf(char *buffer, size_t count, const char *format, ...) > > +{ > > + va_list args; > > + va_start(args, format); > > + > > + return vsnprintf_s(buffer, count, count - 1, format, args); > > +} > > \ No newline at end of file > > > > Modified: trunk/gs/src/iscan.c > > =================================================================== > > --- trunk/gs/src/iscan.c 2007-02-03 06:27:14 UTC (rev 7673) > > +++ trunk/gs/src/iscan.c 2007-02-03 13:30:24 UTC (rev 7674) > > @@ -258,7 +258,7 @@ > > int len = strlen(pstate->s_error.string); > > > > if (pstate->s_error.is_name) { > > - int code = name_ref(imemory, pstate->s_error.string, len, pseo, 1); > > + int code = name_ref(imemory, (const byte *)pstate->s_error.string, > > len, pseo, 1); > > > > if (code < 0) > > return code; > > > > Modified: trunk/gs/src/stdio_.h > > =================================================================== > > --- trunk/gs/src/stdio_.h 2007-02-03 06:27:14 UTC (rev 7673) > > +++ trunk/gs/src/stdio_.h 2007-02-03 13:30:24 UTC (rev 7674) > > @@ -68,6 +68,8 @@ > > #if defined(_MSC_VER) > > # define fdopen(handle,mode) _fdopen(handle,mode) > > # define fileno(file) _fileno(file) > > +/* Microsoft Visual C++ 2005 doesn't properly define snprintf */ > > +int snprintf(char *buffer, size_t count, const char *format , ...); > > #endif > > > > #endif /* stdio__INCLUDED */ > > > > _______________________________________________ > > gs-cvs mailing list > > [email protected] > > http://www.ghostscript.com/mailman/listinfo/gs-cvs > > _______________________________________________ > gs-cvs mailing list > [email protected] > http://www.ghostscript.com/mailman/listinfo/gs-cvs > ------=_NextPart_000_0078_01C74848.4C0CC920 Content-Type: text/plain; name="snprintf.diff.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="snprintf.diff.txt" Index: src/gp_mswin.c =================================================================== --- src/gp_mswin.c (revision 7674) +++ src/gp_mswin.c (working copy) @@ -718,15 +718,25 @@ #endif } -/* ------------------------- _snprintf -----------------------------*/ +/* --------------------------- snprintf ---------------------------- */ -/* Microsoft Visual C++ 2005 doesn't properly define snprintf, +/* Microsoft Visual C++ editions don't properly define snprintf, - which is defined in the C standard ISO/IEC 9899:1999 (E) */ + which is defined in the C standard ISO/IEC 9899:1999 (E). + The following emulation differs from the standard function in + the value returned when the number of chars needed by the output, + excluding the terminating '\0', is > (and !=) count */ int snprintf(char *buffer, size_t count, const char *format, ...) { + int n; va_list args; - va_start(args, format); - return vsnprintf_s(buffer, count, count - 1, format, args); -} \ No newline at end of file + if (count > 0) { + va_start(args, format); + n = _vsnprintf(buffer, count, format, args); + buffer[count - 1] = 0; + va_end(args); + } else + n = 0; + return n; +} ------=_NextPart_000_0078_01C74848.4C0CC920 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gs-code-review mailing list [email protected] http://www.ghostscript.com/mailman/listinfo/gs-code-review ------=_NextPart_000_0078_01C74848.4C0CC920--