From owner-cvs-all Fri Jan 5 9:30:53 2001 From owner-cvs-all@FreeBSD.ORG Fri Jan 5 09:30:48 2001 Return-Path: Delivered-To: cvs-all@freebsd.org Received: from Awfulhak.org (awfulhak.demon.co.uk [194.222.196.252]) by hub.freebsd.org (Postfix) with ESMTP id 1D20837B404; Fri, 5 Jan 2001 09:30:46 -0800 (PST) Received: from hak.lan.Awfulhak.org (root@hak.lan.Awfulhak.org [172.16.0.12]) by Awfulhak.org (8.11.1/8.11.1) with ESMTP id f05HNIv01378; Fri, 5 Jan 2001 17:23:18 GMT (envelope-from brian@lan.Awfulhak.org) Received: from hak.lan.Awfulhak.org (brian@localhost [127.0.0.1]) by hak.lan.Awfulhak.org (8.11.1/8.11.1) with ESMTP id f05HTgi47555; Fri, 5 Jan 2001 17:29:42 GMT (envelope-from brian@hak.lan.Awfulhak.org) Message-Id: <200101051729.f05HTgi47555@hak.lan.Awfulhak.org> X-Mailer: exmh version 2.2 06/23/2000 with nmh-1.0.4 To: Ben Smithurst Cc: Brian Somers , Chris Faulhaber , Will Andrews , cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org, brian@Awfulhak.org Subject: Re: cvs commit: src/usr.bin/apply apply.c In-Reply-To: Message from Ben Smithurst of "Fri, 05 Jan 2001 16:29:17 GMT." <20010105162917.K85794@strontium.scientia.demon.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <47548.978715782.1@hak.lan.Awfulhak.org> Date: Fri, 05 Jan 2001 17:29:42 +0000 From: Brian Somers Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG > Brian Somers wrote: > > > Also (and this bug was already there), s[n]printf() returns the length > > of what it would have liked to have put in the target, not what it > > actually wrote. If the first s[n]printf() above ends up truncating, > > the second one will happily overflow. > > Well, with sprintf, there is no difference, since it doesn't have a size > limitation like snprintf does. > > > s[n]printf() is poorly documented in this area. > > Would this change make you feel better? > > change this: > > Snprintf() and vsnprintf() will write at most size-1 of the characters > printed into the output string (the size'th character then gets the ter- > minating `\0'); if the return value is greater than or equal to the size > argument, the string was too short and some of the printed characters > were discarded. > > to this: > > Snprintf() and vsnprintf() will write at most size-1 of the characters > printed into the output string (the size'th character then gets the ter- > minating `\0'), and return the number of characters written to the > buffer, excluding the terminating `\0'. This value may be less than the > number of characters which would have been written, had the buffer been > large enough; if the return value is greater than or equal to the size > argument, the string was too short and some of the printed characters > were discarded. I guess this proves my point about the documentation being inadequate :-). The return value is the amount that would have been written had there been enough space, *not* the amount that was actually written. hak:~ $ cat x.c #include int main(int argc, char **argv) { char x[5]; int n; n = snprintf(x, sizeof x, "hello world"); printf("Got \"%s\", %d\n", x, n); return 0; } hak:~ $ cc -o x x.c hak:~ $ ./x Got "hell", 11 > -- > Ben Smithurst / ben@FreeBSD.org / PGP: 0x99392F7D -- Brian Don't _EVER_ lose your sense of humour ! To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message