stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From se...@apache.org
Subject svn commit: r651459 - in /stdcxx/trunk: include/rw/_config-acc.h include/rw/_config-gcc.h include/rw/_defs.h tests/src/printf.cpp
Date Thu, 24 Apr 2008 23:40:15 GMT
Author: sebor
Date: Thu Apr 24 16:40:13 2008
New Revision: 651459

URL: http://svn.apache.org/viewvc?rev=651459&view=rev
Log:
2008-04-24  Martin Sebor  <sebor@roguewave.com>

	Merged revs 650742 and 650710 from branches/4.2.x.

	2008-04-22  Martin Sebor  <sebor@roguewave.com>

	STDCXX-890
	* include/rw/_defs.h (_RWSTD_ATTRIBUTE_NORETURN): Defined macro
	to be empty when not yet #defined.
	(__rw_assert_fail): Replaced _RWSTD_GNUC_ATTRIBUTE ((noreturn))
	with _RWSTD_ATTRIBUTE_NORETURN.
	* include/rw/_config-acc.h [aCC 6] (_RWSTD_ATTRIBUTE_NORETURN):
	Defined macro to __attribute__((noreturn)) for HP aCC 6 and
	better.
	* include/rw/_config-gcc.h (_RWSTD_ATTRIBUTE_NORETURN): Defined
	macro to __attribute__((noreturn)) for all versions of gcc.


	2008-04-22  Martin Sebor  <sebor@roguewave.com>

	STDCXX-756
	* tests/src/printf.cpp (_rw_fmtexpr): Handled malloc(() failure to
	silence HP aCC 6 warning 20200: Potential null pointer dereference.

	(_rw_pvasnprintf, rw_sprintf, rw_snprintf): Cast operand to a wider
	type before adding to it to silence HP aCC remark 4298: addition
	result could be truncated before cast to bigger sized type.
	(_rw_fmtstr): Commented out redundant extern keyword to silence
	the annoying HP aCC 6 remark 4244: extern storage class used with
	a function definition.
	(_rw_quotechar): Made use of the new _RWSTD_UWCHAR_INT_T type to
	silence HP aCC 6 remark 4248: comparison of unsigned integer with
	a signed integer.
	(_rw_fmtfloating): Replaced a for loop with an equivalent call to
	strlen() to silence another useless HP aCC remark, 4315: for loop
	without body, did you insert an extra ';'?

Modified:
    stdcxx/trunk/include/rw/_config-acc.h
    stdcxx/trunk/include/rw/_config-gcc.h
    stdcxx/trunk/include/rw/_defs.h
    stdcxx/trunk/tests/src/printf.cpp

Modified: stdcxx/trunk/include/rw/_config-acc.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config-acc.h?rev=651459&r1=651458&r2=651459&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config-acc.h (original)
+++ stdcxx/trunk/include/rw/_config-acc.h Thu Apr 24 16:40:13 2008
@@ -25,7 +25,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
  * 
  **************************************************************************/
 
@@ -97,4 +97,10 @@
 #    define _RWSTD_NO_EXCEPTIONS
 #  endif   // _RWSTD_NO_EXCEPTIONS
 #endif   // __HPACC_NOEH
+
+#if 6 <= _RWSTD_HP_aCC_MAJOR
+   // aCC 6 attribute((noreturn)) to indicate that a function
+   // doesn't return (it may exit by throwing an exception)
+#  define _RWSTD_ATTRIBUTE_NORETURN __attribute__ ((noreturn))
+#endif   // aCC >= 6
 

Modified: stdcxx/trunk/include/rw/_config-gcc.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config-gcc.h?rev=651459&r1=651458&r2=651459&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config-gcc.h (original)
+++ stdcxx/trunk/include/rw/_config-gcc.h Thu Apr 24 16:40:13 2008
@@ -25,7 +25,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
  * 
  **************************************************************************/
 
@@ -83,6 +83,10 @@
 #endif   //__GNUG__ <= 2 && __GNUC_MINOR__ < 97 && _RWSTD_NO_HONOR_STD
 
 #define _RWSTD_GNUC_ATTRIBUTE(attr)   __attribute__ (attr)
+
+// gcc attribute((noreturn)) to indicate that a function doesn't return
+// (it may still exit by throwing an exception or by calling longjmp)
+#define _RWSTD_ATTRIBUTE_NORETURN   _RWSTD_GNUC_ATTRIBUTE ((noreturn))
 
 #ifdef _RWSTD_OS_LINUX
 

Modified: stdcxx/trunk/include/rw/_defs.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_defs.h?rev=651459&r1=651458&r2=651459&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_defs.h (original)
+++ stdcxx/trunk/include/rw/_defs.h Thu Apr 24 16:40:13 2008
@@ -25,7 +25,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
  *
  **************************************************************************/
 
@@ -1128,6 +1128,12 @@
 #  define _RWSTD_ASSUME(expr)   _RWSTD_ASSERT (expr)
 #endif   // _RWSTD_ASSUME
 
+#ifndef _RWSTD_ATTRIBUTE_NORETURN
+   // gcc (and others) __attribute__ ((noreturn))
+#  define _RWSTD_ATTRIBUTE_NORETURN   /* empty */
+#endif   // _RWSTD_ATTR_NORETURN
+
+
 // compile-time assertion - asserts constant expressions during
 // compilation with no runtime overhead; failed assertions are reported
 // as compilation errors
@@ -1149,7 +1155,7 @@
 // called for failed assertions
 void _RWSTD_EXPORT
 __rw_assert_fail (const char*, const char*, int, const char*)
-    _RWSTD_GNUC_ATTRIBUTE ((noreturn));
+    _RWSTD_ATTRIBUTE_NORETURN;
 
 }   // extern "C++"
 

Modified: stdcxx/trunk/tests/src/printf.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/printf.cpp?rev=651459&r1=651458&r2=651459&view=diff
==============================================================================
--- stdcxx/trunk/tests/src/printf.cpp (original)
+++ stdcxx/trunk/tests/src/printf.cpp Thu Apr 24 16:40:13 2008
@@ -22,7 +22,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 2005-2006 Rogue Wave Software.
+ * Copyright 2005-2008 Rogue Wave Software, Inc.
  * 
  **************************************************************************/
 
@@ -815,7 +815,7 @@
             RW_ASSERT (size_t (len) <= *buf.pbufsize);
             RW_ASSERT (buf.endoff <= *buf.pbufsize);
 
-            const size_t offinx = size_t (nextoff - 1);
+            const size_t offinx = size_t (nextoff) - 1;
 
             if (pspec [paramno].cond_end && pspec [paramno].cond_begin) {
                 // change from an if to an else clause
@@ -1444,11 +1444,11 @@
         *pf++ = 't';
     else if (spec.mod == spec.mod_L) {
         strcpy (pf, _RWSTD_LDBL_PRINTF_PREFIX);
-        for ( ; *pf; ++pf);
+        pf += strlen (pf);
     }
     else if (spec.mod == spec.mod_ext_A && _RWSTD_LDBL_SIZE == spec.width) {
         strcpy (pf, _RWSTD_LDBL_PRINTF_PREFIX);
-        for ( ; *pf; ++pf);
+        pf += strlen (pf);
     }
 
     if (spec.mod != spec.mod_ext_A && 0 <= spec.width) {
@@ -1801,27 +1801,12 @@
 template <class charT>
 int _rw_quotechar (char *buf, charT wc, int noesc)
 {
-#if _RWSTD_WCHAR_MIN < 0
-
     // wchar_t is signed, convert its value to unsigned long
     // without widening (i.e., treat it as an unsigned type)
+    const _RWSTD_UWCHAR_INT_T wi =
+        _RWSTD_STATIC_CAST (_RWSTD_UWCHAR_INT_T, wc);
 
-#  if _RWSTD_WCHAR_MIN == _RWSTD_SHRT_MIN
-    const ULong wi = UShrt (wc);
-#  elif _RWSTD_WCHAR_MIN ==_RWSTD_INT_MIN
-    const ULong wi = UInt (wc);
-#  elif _RWSTD_WCHAR_MIN == _RWSTD_LONG_MIN
-    const ULong wi = ULong (wc);
-#  endif
-
-#else   // if _RWSTD_WCHAR_MIN >= 0
-
-    // wchar_t is unsigned
-    const ULong wi = ULong (wc);
-
-#endif   // _RWSTD_WCHAR_MIN < 0
-
-    if ((1 == sizeof wc || wi < 0x100) && noesc) {
+    if ((1 == sizeof wc || wi < 0x100U) && noesc) {
         buf [0] = char (wc);
         buf [1] = '\0';
         return 1;
@@ -2323,8 +2308,11 @@
 }
 
 /********************************************************************/
+// extern so it can be used in other translation units of the driver
+// although it's not mneant to be called directly except by the
+// implementation of rw_printf() and friends
 
-extern int
+/* extern */ int
 _rw_fmtstr (const FmtSpec &spec, Buffer &buf, const char *str, size_t len)
 {
     if (spec.fl_pound)
@@ -3107,8 +3095,11 @@
         char *pbuf = varbuf;
 
         const size_t varlen = strlen (param) + strlen (val) + 2;
-        if (sizeof varbuf < varlen)
+        if (sizeof varbuf < varlen) {
             pbuf = (char*)malloc (varlen);
+            if (0 == pbuf)
+                return -1;
+        }
 
         strcpy (pbuf, param);
         strcat (pbuf, "=");
@@ -3303,7 +3294,7 @@
     va_end (va);
 
     if (-1 < nchars)
-        memcpy (buf, tmpbuf, size_t (nchars + 1 /* NUL */));
+        memcpy (buf, tmpbuf, size_t (nchars) + 1 /* NUL */);
 
     free (tmpbuf);
 
@@ -3327,7 +3318,7 @@
     va_end (va);
 
     if (size_t (nchars) < bufsize) {
-        memcpy (buf, tmpbuf, size_t (nchars + 1 /* NUL */));
+        memcpy (buf, tmpbuf, size_t (nchars) + 1 /* NUL */);
     }
     else {
         // buffer isn't big enough



Mime
View raw message