Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-Id: <200008071325.IAA31857@mail1.sunflower.com> From: "Doug Wyatt" To: cygwin AT sourceware DOT cygnus DOT com Date: Mon, 7 Aug 2000 08:25:52 -0500 MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Subject: possible bug in snprintf() ? Reply-to: dwyatt AT sunflower DOT com X-mailer: Pegasus Mail for Win32 (v3.12b) Hi, I've run across differences in the behavior of snprintf() on Cygwin 1.1.4, with respect to RH6.2 or HP-UX (using either gcc or the HP ANSI cc). On the HP, the return value is -1 when the string exceeds 'size', while on Linux and Cygwin the return value is always the length of the string that is or would have been written (minus the NUL). That one doesn't really concern Cygwin. snprintf( char *target, size_t size, const char *format, ... ) The difference about which I have a question is that on Linux and HP-UX, when the string exceeds 'size' then (size - 1) chars plus a NUL are written, but on Cygwin 'size' chars are written and a NUL is placed into target[size] - probably ill-advised if 'target' is only allocated 'size' bytes. Is the newlib version wrong? It appears to be in light of this excerpt from the RH6.2 snprintf man entry, also: Return value " " snprintf and vsnprintf do not write more than size bytes (including the trailing '\0'), and return -1 if the output was truncated due to this limit. (Thus until glibc 2.0.6. Since glibc 2.1 these functions follow the C99 standard and return the number of characters (excluding the trailing '\0') which would have been written to the final string if enough space had been available.) The problem arises in a configure file which wants (size - 1) bytes in 'target'. Is the newlib behavior a variant or a bug? Regards, Doug Wyatt ============================== The tail of my cygcheck -v -s: 83k 2000/06/11 D:\cygwin-v11x\bin\cygitcl30.dll - os=4.0 img=1.0 sys=4.0 "cygitcl30.dll" v0.0 ts=2000/6/10 22:34 35k 2000/06/11 D:\cygwin-v11x\bin\cygitk30.dll - os=4.0 img=1.0 sys=4.0 "cygitk30.dll" v0.0 ts=2000/6/10 22:34 402k 2000/06/11 D:\cygwin-v11x\bin\cygtcl80.dll - os=4.0 img=1.0 sys=4.0 "cygtcl80.dll" v0.0 ts=2000/6/10 22:30 5k 2000/06/11 D:\cygwin-v11x\bin\cygtclpip80.dll - os=4.0 img=1.0 sys=4.0 10k 2000/06/11 D:\cygwin-v11x\bin\cygtclreg80.dll - os=4.0 img=1.0 sys=4.0 "cygtclreg80.dll" v0.0 ts=2000/6/10 22:30 639k 2000/06/11 D:\cygwin-v11x\bin\cygtk80.dll - os=4.0 img=1.0 sys=4.0 "cygtk80.dll" v0.0 ts=2000/6/10 22:34 586k 2000/08/04 D:\cygwin-v11x\bin\cygwin1.dll - os=4.0 img=1.0 sys=4.0 "cygwin1.dll" v0.0 ts=2000/8/3 19:53 Cygwin DLL version info: dll major: 1001 dll minor: 4 dll epoch: 19 dll bad signal mask: 19005 dll old termios: 5 api major: 0 api minor: 26 shared data: 3 dll identifier: cygwin1 mount registry: 2 cygnus registry name: Cygnus Solutions cygwin registry name: Cygwin program options name: Program Options cygwin mount registry name: mounts v2 build date: Thu Aug 3 20:53:46 EDT 2000 CVS tag: cygwin-1-1-4 shared id: cygwin1S3 -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com