Author: faridz Date: Tue Nov 7 04:54:08 2006 New Revision: 472092 URL: http://svn.apache.org/viewvc?view=rev&rev=472092 Log: 2006-11-07 Farid Zaripov * fmt_defs.h: Added definition of the DummyStruct * printf.cpp (rw_vasnprintf): Added checking for malformed directive (_rw_fmttm, _rw_fmtarray, _rw_fmtstrarray, _rw_fmtstr, _rw_fmtwstr): Third parameter of __rw::__rw_memattr() changed to -1 (_rw_vasnprintf_ext): Ditto. Added "%{P}" formating directive to format the rw_pid_t value * 0.printf.cpp: #included rw_process.h for rw_pid_t (test_chararray): Added missing backslash in result string (test_stringarray): Added exercising of the "%{ As}" formatting directive (test_pid): New function exercising the "%{P}" formating directive (main): Added call to the test_pid() Modified: incubator/stdcxx/trunk/tests/self/0.printf.cpp incubator/stdcxx/trunk/tests/src/fmt_defs.h incubator/stdcxx/trunk/tests/src/printf.cpp Modified: incubator/stdcxx/trunk/tests/self/0.printf.cpp URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/self/0.printf.cpp?view=diff&rev=472092&r1=472091&r2=472092 ============================================================================== --- incubator/stdcxx/trunk/tests/self/0.printf.cpp (original) +++ incubator/stdcxx/trunk/tests/self/0.printf.cpp Tue Nov 7 04:54:08 2006 @@ -27,22 +27,23 @@ **************************************************************************/ #include -#include // for rw_putenv() +#include // for rw_pid_t +#include // for rw_putenv() -#include // for bitset -#include // for ios::openmode, ios::seekdir -#include // for string - -#include // for assert() -#include // for isdigit() -#include // for EXXX, errno -#include // for INT_MAX, ... -#include // for SIGABRT, ... -#include // for printf(), ... -#include // for free(), size_t -#include // for strcpy() -#include // for va_arg, ... -#include // for struct tm +#include // for bitset +#include // for ios::openmode, ios::seekdir +#include // for string + +#include // for assert() +#include // for isdigit() +#include // for EXXX, errno +#include // for INT_MAX, ... +#include // for SIGABRT, ... +#include // for printf(), ... +#include // for free(), size_t +#include // for strcpy() +#include // for va_arg, ... +#include // for struct tm // disable tests for function name in "%{lF}" @@ -559,7 +560,7 @@ TEST ("%{2Ac}", L"abc", 0, 0, "L\"abc\""); TEST ("%{2.0Ac}", L"", 0, 0, "L\"\""); - TEST ("%{2.1Ac}", L"", 0, 0, "L\"\0\""); + TEST ("%{2.1Ac}", L"", 0, 0, "L\"\\0\""); TEST ("%{2.0Ac}", L"a", 0, 0, "L\"\""); TEST ("%{2.1Ac}", L"a", 0, 0, "L\"a\""); @@ -675,6 +676,17 @@ TEST ("%{#As}", ARG ("abcd"), 0, 0, "\"abcd\""); TEST ("%{#As}", ARG ("abcd", "efg"), 0, 0, "\"abcd\",\"efg\""); TEST ("%{#As}", ARG ("abcd", "efg", "hi"), 0, 0, "\"abcd\",\"efg\",\"hi\""); + + TEST ("%{ As}", 0, 0, 0, "(null)"); + TEST ("%{ As}", ARG ("a"), 0, 0, "a"); + TEST ("%{ As}", ARG ("a", "bc"), 0, 0, "a bc"); + TEST ("%{ As}", ARG ("a", "bc", "def"), 0, 0, "a bc def"); + TEST ("%{ As}", ARG ("a", "bc", "def", "ghij"), 0, 0, "a bc def ghij"); + + TEST ("%{ #As}", 0, 0, 0, "(null)"); + TEST ("%{ #As}", ARG ("abc"), 0, 0, "\"abc\""); + TEST ("%{ #As}", ARG ("abc", "efg"), 0, 0, "\"abc\" \"efg\""); + TEST ("%{ #As}", ARG ("abc", "efg", "hi"), 0, 0, "\"abc\" \"efg\" \"hi\""); } /***********************************************************************/ @@ -2234,6 +2246,27 @@ /***********************************************************************/ +static void +test_pid () +{ + ////////////////////////////////////////////////////////////////// + printf ("%s\n", "extension: \"%P\": rw_pid_t"); + + const rw_pid_t pid = 12345; + + TEST ("%{P}", pid, 0, 0, "12345"); + + TEST ("[%{10P}]", pid, 0, 0, "[ 12345]"); + TEST ("[%{+10P}]", pid, 0, 0, "[ 12345]"); + TEST ("[%{-10P}]", pid, 0, 0, "[12345 ]"); + TEST ("[%{.3P}]", pid, 0, 0, "[12345]"); + TEST ("[%{10.3P}]", pid, 0, 0, "[ 12345]"); + TEST ("[%{+10.3P}]", pid, 0, 0, "[ 12345]"); + TEST ("[%{-10.3P}]", pid, 0, 0, "[12345 ]"); +} + +/***********************************************************************/ + static const tm* make_tm (int sec = 0, // [0,60] int min = 0, // [0,59] @@ -2822,6 +2855,7 @@ test_memptr (); test_errno (); test_signal (); + test_pid (); test_basic_string (); Modified: incubator/stdcxx/trunk/tests/src/fmt_defs.h URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/fmt_defs.h?view=diff&rev=472092&r1=472091&r2=472092 ============================================================================== --- incubator/stdcxx/trunk/tests/src/fmt_defs.h (original) +++ incubator/stdcxx/trunk/tests/src/fmt_defs.h Tue Nov 7 04:54:08 2006 @@ -48,7 +48,7 @@ typedef void (*funptr_t)(); -struct DummyStruct; +struct DummyStruct { }; typedef void (DummyStruct::*memptr_t)() const; /********************************************************************/ Modified: incubator/stdcxx/trunk/tests/src/printf.cpp URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/printf.cpp?view=diff&rev=472092&r1=472091&r2=472092 ============================================================================== --- incubator/stdcxx/trunk/tests/src/printf.cpp (original) +++ incubator/stdcxx/trunk/tests/src/printf.cpp Tue Nov 7 04:54:08 2006 @@ -790,7 +790,7 @@ if ('{' == *fc) { const char* const endbrace = strchr (++fc, '}'); - if (0 == endbrace) { + if (0 == endbrace || fc == endbrace) { const size_t flen = strlen (fc -= 2); next = _rw_bufcat (buf, fc, flen); if (0 == next) @@ -1670,7 +1670,7 @@ static int _rw_fmttm (const FmtSpec &spec, Buffer &buf, const tm *tmb) { - if ( 0 == tmb || 0 > _RW::__rw_memattr (tmb, sizeof *tmb, 0) + if ( 0 == tmb || 0 > _RW::__rw_memattr (tmb, sizeof *tmb, -1) || (size_t)tmb & (sizeof (int) - 1)) { return _rw_fmtbadaddr (spec, buf, tmb, sizeof (int)); } @@ -1897,7 +1897,7 @@ { RW_ASSERT (0 != buf.pbuf); - if ( 0 == array || 0 > _RW::__rw_memattr (array, _RWSTD_SIZE_MAX, 0) + if ( 0 == array || 0 > _RW::__rw_memattr (array, _RWSTD_SIZE_MAX, -1) || ((size_t)array & (sizeof *array - 1))) { // qualify the name of the static function in order to // allow it to be found when referenced from a template @@ -2234,7 +2234,7 @@ int len = 0; - if (0 == argv || 0 > _RW::__rw_memattr (argv, sizeof *argv, 0)) + if (0 == argv || 0 > _RW::__rw_memattr (argv, sizeof *argv, -1)) return _rw_fmtbadaddr (spec, buf, argv); size_t argc = spec.prec; @@ -2333,7 +2333,7 @@ if (spec.fl_pound) return _rw_fmtarray (spec, buf, str, len, A_CHAR | A_ESC); - if (0 == str || 0 > _RW::__rw_memattr (str, _RWSTD_SIZE_MAX, 0)) + if (0 == str || 0 > _RW::__rw_memattr (str, _RWSTD_SIZE_MAX, -1)) return _rw_fmtbadaddr (spec, buf, str); if (_RWSTD_SIZE_MAX == len) @@ -2404,7 +2404,7 @@ return _rw_fmtarray (spec, buf, wstr, len, flags); } - if ( 0 == wstr || 0 > _RW::__rw_memattr (wstr, _RWSTD_SIZE_MAX, 0) + if ( 0 == wstr || 0 > _RW::__rw_memattr (wstr, _RWSTD_SIZE_MAX, -1) || ((size_t)wstr & (sizeof *wstr - 1))) return _rw_fmtbadaddr (spec, buf, wstr, sizeof *wstr); @@ -2597,7 +2597,7 @@ // std::bitset spec.param.ptr_ = PARAM (ptr_); if ( 0 == spec.param.ptr_ - || 0 > _RW::__rw_memattr (spec.param.ptr_, spec.prec, 0)) + || 0 > _RW::__rw_memattr (spec.param.ptr_, spec.prec, -1)) len = _rw_fmtbadaddr (spec, buf, spec.param.ptr_, sizeof (long)); else len = _rw_fmtbits (spec, buf, spec.param.ptr_, sizeof (long)); @@ -2606,7 +2606,7 @@ case 'b': // %{b} spec.param.ptr_ = PARAM (ptr_); if ( 0 == spec.param.ptr_ - || 0 > _RW::__rw_memattr (spec.param.ptr_, spec.prec, 0)) + || 0 > _RW::__rw_memattr (spec.param.ptr_, spec.prec, -1)) len = _rw_fmtbadaddr (spec, buf, spec.param.ptr_); else len = _rw_fmtbits (spec, buf, spec.param.ptr_, 1); @@ -2806,6 +2806,12 @@ break; } + case 'P': // %{P} + // rw_pid_t is _RWSTD_SSIZE_T which is equal to _RWSTD_PTRDIFF_T + spec.param.diff_ = PARAM (diff_); + len = rw_fmtinteger (spec, buf, spec.param.diff_); + break; + case 's': // %{s}, %{As}, %{Is}, %{ls} if (spec.mod == spec.mod_ext_A) { // array of strings spec.param.ptr_ = PARAM (ptr_); @@ -2840,7 +2846,7 @@ const std::wstring* const pstr = (std::wstring*)spec.param.ptr_; - if ( 0 == pstr || 0 > _RW::__rw_memattr (pstr, sizeof *pstr, 0) + if ( 0 == pstr || 0 > _RW::__rw_memattr (pstr, sizeof *pstr, -1) || (size_t)pstr & (sizeof (pstr) - 1)) { len = _rw_fmtbadaddr (spec, buf, pstr, sizeof pstr); } @@ -2857,7 +2863,7 @@ const std::string* const pstr = (std::string*)spec.param.ptr_; - if ( 0 == pstr || 0 > _RW::__rw_memattr (pstr, sizeof *pstr, 0) + if ( 0 == pstr || 0 > _RW::__rw_memattr (pstr, sizeof *pstr, -1) || (size_t)pstr & (sizeof (pstr) - 1)) { len = _rw_fmtbadaddr (spec, buf, pstr, sizeof pstr); }