Return-Path: Delivered-To: apmail-incubator-stdcxx-commits-archive@www.apache.org Received: (qmail 64858 invoked from network); 12 Mar 2006 00:05:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 12 Mar 2006 00:05:36 -0000 Received: (qmail 16283 invoked by uid 500); 12 Mar 2006 00:05:36 -0000 Delivered-To: apmail-incubator-stdcxx-commits-archive@incubator.apache.org Received: (qmail 16268 invoked by uid 500); 12 Mar 2006 00:05:35 -0000 Mailing-List: contact stdcxx-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: stdcxx-dev@incubator.apache.org Delivered-To: mailing list stdcxx-commits@incubator.apache.org Received: (qmail 16257 invoked by uid 500); 12 Mar 2006 00:05:35 -0000 Delivered-To: apmail-incubator-stdcxx-cvs@incubator.apache.org Received: (qmail 16254 invoked by uid 99); 12 Mar 2006 00:05:35 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 11 Mar 2006 16:05:35 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sat, 11 Mar 2006 16:05:34 -0800 Received: (qmail 64781 invoked by uid 65534); 12 Mar 2006 00:05:14 -0000 Message-ID: <20060312000514.64778.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r385211 - /incubator/stdcxx/trunk/tests/src/char.cpp Date: Sun, 12 Mar 2006 00:05:14 -0000 To: stdcxx-cvs@incubator.apache.org From: sebor@apache.org X-Mailer: svnmailer-1.0.7 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: sebor Date: Sat Mar 11 16:05:12 2006 New Revision: 385211 URL: http://svn.apache.org/viewcvs?rev=385211&view=rev Log: 2006-03-11 Martin Sebor * char.cpp (copy, move, rw_widen): Corrected logic errors. Modified: incubator/stdcxx/trunk/tests/src/char.cpp Modified: incubator/stdcxx/trunk/tests/src/char.cpp URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/src/char.cpp?rev=385211&r1=385210&r2=385211&view=diff ============================================================================== --- incubator/stdcxx/trunk/tests/src/char.cpp (original) +++ incubator/stdcxx/trunk/tests/src/char.cpp Sat Mar 11 16:05:12 2006 @@ -129,7 +129,8 @@ ++n_calls_ [MemFun::copy]; - for (size_t i = 0; i != n; dst [i] = src [i]); + for (size_t i = 0; i != n; i++) + dst [i] = src [i]; return dst; } @@ -143,7 +144,14 @@ ++n_calls_ [MemFun::move]; - for (; n--; dst [n] = src [n]); + if (dst < src) { + for (size_t i = 0; i != n; ++i) + dst [i] = src [i]; + } + else { + while (n--) + dst [n] = src [n]; + } return dst; } @@ -223,21 +231,21 @@ char* rw_widen (char *dst, const char *src, size_t len) { - // dst must point to an array of at least 1 element - RW_ASSERT (0 != dst); - // allow src to be null if (0 == src) src = ""; // compute the length of src if not specified if (_RWSTD_SIZE_MAX == len) - len = src ? strlen (src) : 0; + len = src ? strlen (src) + 1 : 0; // copy src into dst - if (len) + if (len) { + RW_ASSERT (0 != dst); + memcpy (dst, src, len); - else + } + else if (dst) *dst = '\0'; return dst; @@ -250,26 +258,29 @@ wchar_t* rw_widen (wchar_t *dst, const char *src, size_t len) { - // dst must point to an array of at least 1 element - RW_ASSERT (0 != dst); - // allow src to be null if (0 == src) src = ""; // compute the length of src if not specified if (_RWSTD_SIZE_MAX == len) - len = src ? strlen (src) : 0; + len = src ? strlen (src) + 1 : 0; - // widen src into dst one element at a time - for (size_t i = 0; ; ++i) { - typedef unsigned char UChar; + // if len is non-zero dst must be non-0 as well + RW_ASSERT (0 == len || 0 != dst); - // always NUL-terminate dst - dst [i] = wchar_t (UChar (src [i])); + if (dst) { + // widen src into dst one element at a time + for (size_t i = 0; ; ++i) { + typedef unsigned char UChar; + + if (i == len) { + dst [i] = L'\0'; + break; + } - if (i == len) - break; + dst [i] = wchar_t (UChar (src [i])); + } } return dst; @@ -291,18 +302,24 @@ // compute the length of src if not specified if (_RWSTD_SIZE_MAX == len) - len = src ? strlen (src) : 0; + len = src ? strlen (src) + 1 : 0; - // widen src into dst one element at a time - for (size_t i = 0; ; ++i) { - typedef unsigned char UChar; - - // always NUL-terminate dst - dst [i].f = 0; - dst [i].c = UChar (src [i]); + // if len is non-zero dst must be non-0 as well + RW_ASSERT (0 == len || 0 != dst); - if (i == len) - break; + if (dst) { + // widen src into dst one element at a time + for (size_t i = 0; ; ++i) { + typedef unsigned char UChar; + + if (i == len) { + dst [i] = UserChar::eos (); + break; + } + + dst [i].f = 0; + dst [i].c = UChar (src [i]); + } } return dst;