From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31128 invoked by alias); 14 Jul 2004 11:33:51 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 31105 invoked from network); 14 Jul 2004 11:33:51 -0000 Received: from unknown (HELO sunsite.ms.mff.cuni.cz) (195.113.15.26) by sourceware.org with SMTP; 14 Jul 2004 11:33:51 -0000 Received: from sunsite.ms.mff.cuni.cz (sunsite.mff.cuni.cz [127.0.0.1]) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8) with ESMTP id i6E9IC3j018626; Wed, 14 Jul 2004 11:18:12 +0200 Received: (from jakub@localhost) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8/Submit) id i6E9ICoQ018624; Wed, 14 Jul 2004 11:18:12 +0200 Date: Wed, 14 Jul 2004 11:33:00 -0000 From: Jakub Jelinek To: Ulrich Drepper , Roland McGrath Cc: Glibc hackers Subject: [PATCH] Fix l64a description in glibc manual [BZ #266] Message-ID: <20040714091812.GP5191@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-SW-Source: 2004-07/txt/msg00023.txt.bz2 Hi! 2004-07-14 Jakub Jelinek [BZ #266] * manual/string.texi (l64a): Note that the static buffer is 7 bytes long. Rewrite example code so that it takes account l64a output shorter than 6 characters. Reported by Julian Graham . --- libc/manual/string.texi.jj 2004-05-25 18:35:42.000000000 +0200 +++ libc/manual/string.texi 2004-07-14 13:30:21.102893652 +0200 @@ -2296,7 +2296,7 @@ this task. @comment XPG @deftypefun {char *} l64a (long int @var{n}) This function encodes a 32-bit input value using characters from the -basic character set. It returns a pointer to a 6 character buffer which +basic character set. It returns a pointer to a 7 character buffer which contains an encoded version of @var{n}. To encode a series of bytes the user must copy the returned string to a destination buffer. It returns the empty string if @var{n} is zero, which is somewhat bizarre but @@ -2321,13 +2321,17 @@ encode (const void *buf, size_t len) /* @r{We know in advance how long the buffer has to be.} */ unsigned char *in = (unsigned char *) buf; char *out = malloc (6 + ((len + 3) / 4) * 6 + 1); - char *cp = out; + char *cp = out, *p; /* @r{Encode the length.} */ /* @r{Using `htonl' is necessary so that the data can be} - @r{decoded even on machines with different byte order.} */ + @r{decoded even on machines with different byte order.} + @r{`l64a' can return a string shorter than 6 bytes, so } + @r{we pad it with encoding of 0 (}'.'@r{) at the end by } + @r{hand.} */ - cp = mempcpy (cp, l64a (htonl (len)), 6); + p = stpcpy (cp, l64a (htonl (len))); + cp = mempcpy (p, "......", 6 - (p - cp)); while (len > 3) @{ @@ -2336,12 +2340,8 @@ encode (const void *buf, size_t len) n = (n << 8) | *in++; n = (n << 8) | *in++; len -= 4; - if (n) - cp = mempcpy (cp, l64a (htonl (n)), 6); - else - /* @r{`l64a' returns the empty string for n==0, so we } - @r{must generate its encoding (}"......"@r{) by hand.} */ - cp = stpcpy (cp, "......"); + p = stpcpy (cp, l64a (htonl (n))); + cp = mempcpy (p, "......", 6 - (p - cp)); @} if (len > 0) @{ @@ -2352,8 +2352,7 @@ encode (const void *buf, size_t len) if (--len > 0) n = (n << 8) | *in; @} - memcpy (cp, l64a (htonl (n)), 6); - cp += 6; + cp = stpcpy (cp, l64a (htonl (n))); @} *cp = '\0'; return out; Jakub