fixed a crash in socket server test and added quit command to the server
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -93,20 +93,20 @@
|
|||||||
#define TEST_ZLIB
|
#define TEST_ZLIB
|
||||||
|
|
||||||
#undef TEST_ALL
|
#undef TEST_ALL
|
||||||
static const bool TEST_ALL = TRUE;
|
static const bool TEST_ALL = true;
|
||||||
#else
|
#else
|
||||||
#define TEST_DIR
|
#define TEST_SOCKETS
|
||||||
|
|
||||||
static const bool TEST_ALL = FALSE;
|
static const bool TEST_ALL = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// some tests are interactive, define this to run them
|
// some tests are interactive, define this to run them
|
||||||
#ifdef TEST_INTERACTIVE
|
#ifdef TEST_INTERACTIVE
|
||||||
#undef TEST_INTERACTIVE
|
#undef TEST_INTERACTIVE
|
||||||
|
|
||||||
static const bool TEST_INTERACTIVE = TRUE;
|
static const bool TEST_INTERACTIVE = true;
|
||||||
#else
|
#else
|
||||||
static const bool TEST_INTERACTIVE = FALSE;
|
static const bool TEST_INTERACTIVE = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -570,7 +570,7 @@ static void TestExecute()
|
|||||||
|
|
||||||
wxPrintf(_T("Testing wxExecute: "));
|
wxPrintf(_T("Testing wxExecute: "));
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
if ( wxExecute(COMMAND, TRUE /* sync */) == 0 )
|
if ( wxExecute(COMMAND, true /* sync */) == 0 )
|
||||||
wxPuts(_T("Ok."));
|
wxPuts(_T("Ok."));
|
||||||
else
|
else
|
||||||
wxPuts(_T("ERROR."));
|
wxPuts(_T("ERROR."));
|
||||||
@@ -853,39 +853,39 @@ static struct FileNameInfo
|
|||||||
} filenames[] =
|
} filenames[] =
|
||||||
{
|
{
|
||||||
// Unix file names
|
// Unix file names
|
||||||
{ _T("/usr/bin/ls"), _T(""), _T("/usr/bin"), _T("ls"), _T(""), TRUE, wxPATH_UNIX },
|
{ _T("/usr/bin/ls"), _T(""), _T("/usr/bin"), _T("ls"), _T(""), true, wxPATH_UNIX },
|
||||||
{ _T("/usr/bin/"), _T(""), _T("/usr/bin"), _T(""), _T(""), TRUE, wxPATH_UNIX },
|
{ _T("/usr/bin/"), _T(""), _T("/usr/bin"), _T(""), _T(""), true, wxPATH_UNIX },
|
||||||
{ _T("~/.zshrc"), _T(""), _T("~"), _T(".zshrc"), _T(""), TRUE, wxPATH_UNIX },
|
{ _T("~/.zshrc"), _T(""), _T("~"), _T(".zshrc"), _T(""), true, wxPATH_UNIX },
|
||||||
{ _T("../../foo"), _T(""), _T("../.."), _T("foo"), _T(""), FALSE, wxPATH_UNIX },
|
{ _T("../../foo"), _T(""), _T("../.."), _T("foo"), _T(""), false, wxPATH_UNIX },
|
||||||
{ _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), FALSE, wxPATH_UNIX },
|
{ _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), false, wxPATH_UNIX },
|
||||||
{ _T("~/foo.bar"), _T(""), _T("~"), _T("foo"), _T("bar"), TRUE, wxPATH_UNIX },
|
{ _T("~/foo.bar"), _T(""), _T("~"), _T("foo"), _T("bar"), true, wxPATH_UNIX },
|
||||||
{ _T("/foo"), _T(""), _T("/"), _T("foo"), _T(""), TRUE, wxPATH_UNIX },
|
{ _T("/foo"), _T(""), _T("/"), _T("foo"), _T(""), true, wxPATH_UNIX },
|
||||||
{ _T("Mahogany-0.60/foo.bar"), _T(""), _T("Mahogany-0.60"), _T("foo"), _T("bar"), FALSE, wxPATH_UNIX },
|
{ _T("Mahogany-0.60/foo.bar"), _T(""), _T("Mahogany-0.60"), _T("foo"), _T("bar"), false, wxPATH_UNIX },
|
||||||
{ _T("/tmp/wxwin.tar.bz"), _T(""), _T("/tmp"), _T("wxwin.tar"), _T("bz"), TRUE, wxPATH_UNIX },
|
{ _T("/tmp/wxwin.tar.bz"), _T(""), _T("/tmp"), _T("wxwin.tar"), _T("bz"), true, wxPATH_UNIX },
|
||||||
|
|
||||||
// Windows file names
|
// Windows file names
|
||||||
{ _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), FALSE, wxPATH_DOS },
|
{ _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), false, wxPATH_DOS },
|
||||||
{ _T("\\foo.bar"), _T(""), _T("\\"), _T("foo"), _T("bar"), FALSE, wxPATH_DOS },
|
{ _T("\\foo.bar"), _T(""), _T("\\"), _T("foo"), _T("bar"), false, wxPATH_DOS },
|
||||||
{ _T("c:foo.bar"), _T("c"), _T(""), _T("foo"), _T("bar"), FALSE, wxPATH_DOS },
|
{ _T("c:foo.bar"), _T("c"), _T(""), _T("foo"), _T("bar"), false, wxPATH_DOS },
|
||||||
{ _T("c:\\foo.bar"), _T("c"), _T("\\"), _T("foo"), _T("bar"), TRUE, wxPATH_DOS },
|
{ _T("c:\\foo.bar"), _T("c"), _T("\\"), _T("foo"), _T("bar"), true, wxPATH_DOS },
|
||||||
{ _T("c:\\Windows\\command.com"), _T("c"), _T("\\Windows"), _T("command"), _T("com"), TRUE, wxPATH_DOS },
|
{ _T("c:\\Windows\\command.com"), _T("c"), _T("\\Windows"), _T("command"), _T("com"), true, wxPATH_DOS },
|
||||||
{ _T("\\\\server\\foo.bar"), _T("server"), _T("\\"), _T("foo"), _T("bar"), TRUE, wxPATH_DOS },
|
{ _T("\\\\server\\foo.bar"), _T("server"), _T("\\"), _T("foo"), _T("bar"), true, wxPATH_DOS },
|
||||||
{ _T("\\\\server\\dir\\foo.bar"), _T("server"), _T("\\dir"), _T("foo"), _T("bar"), TRUE, wxPATH_DOS },
|
{ _T("\\\\server\\dir\\foo.bar"), _T("server"), _T("\\dir"), _T("foo"), _T("bar"), true, wxPATH_DOS },
|
||||||
|
|
||||||
// wxFileName support for Mac file names is broken currently
|
// wxFileName support for Mac file names is broken currently
|
||||||
#if 0
|
#if 0
|
||||||
// Mac file names
|
// Mac file names
|
||||||
{ _T("Volume:Dir:File"), _T("Volume"), _T("Dir"), _T("File"), _T(""), TRUE, wxPATH_MAC },
|
{ _T("Volume:Dir:File"), _T("Volume"), _T("Dir"), _T("File"), _T(""), true, wxPATH_MAC },
|
||||||
{ _T("Volume:Dir:Subdir:File"), _T("Volume"), _T("Dir:Subdir"), _T("File"), _T(""), TRUE, wxPATH_MAC },
|
{ _T("Volume:Dir:Subdir:File"), _T("Volume"), _T("Dir:Subdir"), _T("File"), _T(""), true, wxPATH_MAC },
|
||||||
{ _T("Volume:"), _T("Volume"), _T(""), _T(""), _T(""), TRUE, wxPATH_MAC },
|
{ _T("Volume:"), _T("Volume"), _T(""), _T(""), _T(""), true, wxPATH_MAC },
|
||||||
{ _T(":Dir:File"), _T(""), _T("Dir"), _T("File"), _T(""), FALSE, wxPATH_MAC },
|
{ _T(":Dir:File"), _T(""), _T("Dir"), _T("File"), _T(""), false, wxPATH_MAC },
|
||||||
{ _T(":File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), FALSE, wxPATH_MAC },
|
{ _T(":File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), false, wxPATH_MAC },
|
||||||
{ _T("File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), FALSE, wxPATH_MAC },
|
{ _T("File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), false, wxPATH_MAC },
|
||||||
#endif // 0
|
#endif // 0
|
||||||
|
|
||||||
// VMS file names
|
// VMS file names
|
||||||
{ _T("device:[dir1.dir2.dir3]file.txt"), _T("device"), _T("dir1.dir2.dir3"), _T("file"), _T("txt"), TRUE, wxPATH_VMS },
|
{ _T("device:[dir1.dir2.dir3]file.txt"), _T("device"), _T("dir1.dir2.dir3"), _T("file"), _T("txt"), true, wxPATH_VMS },
|
||||||
{ _T("file.txt"), _T(""), _T(""), _T("file"), _T("txt"), FALSE, wxPATH_VMS },
|
{ _T("file.txt"), _T(""), _T(""), _T("file"), _T("txt"), false, wxPATH_VMS },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void TestFileNameConstruction()
|
static void TestFileNameConstruction()
|
||||||
@@ -1144,7 +1144,7 @@ static void TestHash()
|
|||||||
|
|
||||||
{
|
{
|
||||||
wxHashFoos hash;
|
wxHashFoos hash;
|
||||||
hash.DeleteContents(TRUE);
|
hash.DeleteContents(true);
|
||||||
|
|
||||||
wxPrintf(_T("Hash created: %u foos in hash, %u foos totally\n"),
|
wxPrintf(_T("Hash created: %u foos in hash, %u foos totally\n"),
|
||||||
hash.GetCount(), Foo::count);
|
hash.GetCount(), Foo::count);
|
||||||
@@ -1373,7 +1373,7 @@ static void TestListCtor()
|
|||||||
wxPrintf(_T("After 2nd list creation: %u and %u objects in the lists, %u objects total.\n"),
|
wxPrintf(_T("After 2nd list creation: %u and %u objects in the lists, %u objects total.\n"),
|
||||||
list1.GetCount(), list2.GetCount(), Bar::GetNumber());
|
list1.GetCount(), list2.GetCount(), Bar::GetNumber());
|
||||||
|
|
||||||
list1.DeleteContents(TRUE);
|
list1.DeleteContents(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxPrintf(_T("After list destruction: %u objects left.\n"), Bar::GetNumber());
|
wxPrintf(_T("After list destruction: %u objects left.\n"), Bar::GetNumber());
|
||||||
@@ -2274,26 +2274,26 @@ static void TestRegExCompile()
|
|||||||
bool correct;
|
bool correct;
|
||||||
} regExCompTestData[] =
|
} regExCompTestData[] =
|
||||||
{
|
{
|
||||||
{ _T("foo"), TRUE },
|
{ _T("foo"), true },
|
||||||
{ _T("foo("), FALSE },
|
{ _T("foo("), false },
|
||||||
{ _T("foo(bar"), FALSE },
|
{ _T("foo(bar"), false },
|
||||||
{ _T("foo(bar)"), TRUE },
|
{ _T("foo(bar)"), true },
|
||||||
{ _T("foo["), FALSE },
|
{ _T("foo["), false },
|
||||||
{ _T("foo[bar"), FALSE },
|
{ _T("foo[bar"), false },
|
||||||
{ _T("foo[bar]"), TRUE },
|
{ _T("foo[bar]"), true },
|
||||||
{ _T("foo{"), TRUE },
|
{ _T("foo{"), true },
|
||||||
{ _T("foo{1"), FALSE },
|
{ _T("foo{1"), false },
|
||||||
{ _T("foo{bar"), TRUE },
|
{ _T("foo{bar"), true },
|
||||||
{ _T("foo{1}"), TRUE },
|
{ _T("foo{1}"), true },
|
||||||
{ _T("foo{1,2}"), TRUE },
|
{ _T("foo{1,2}"), true },
|
||||||
{ _T("foo{bar}"), TRUE },
|
{ _T("foo{bar}"), true },
|
||||||
{ _T("foo*"), TRUE },
|
{ _T("foo*"), true },
|
||||||
{ _T("foo**"), FALSE },
|
{ _T("foo**"), false },
|
||||||
{ _T("foo+"), TRUE },
|
{ _T("foo+"), true },
|
||||||
{ _T("foo++"), FALSE },
|
{ _T("foo++"), false },
|
||||||
{ _T("foo?"), TRUE },
|
{ _T("foo?"), true },
|
||||||
{ _T("foo??"), FALSE },
|
{ _T("foo??"), false },
|
||||||
{ _T("foo?+"), FALSE },
|
{ _T("foo?+"), false },
|
||||||
};
|
};
|
||||||
|
|
||||||
wxRegEx re;
|
wxRegEx re;
|
||||||
@@ -2320,12 +2320,12 @@ static void TestRegExMatch()
|
|||||||
bool correct;
|
bool correct;
|
||||||
} regExMatchTestData[] =
|
} regExMatchTestData[] =
|
||||||
{
|
{
|
||||||
{ _T("foo"), _T("bar"), FALSE },
|
{ _T("foo"), _T("bar"), false },
|
||||||
{ _T("foo"), _T("foobar"), TRUE },
|
{ _T("foo"), _T("foobar"), true },
|
||||||
{ _T("^foo"), _T("foobar"), TRUE },
|
{ _T("^foo"), _T("foobar"), true },
|
||||||
{ _T("^foo"), _T("barfoo"), FALSE },
|
{ _T("^foo"), _T("barfoo"), false },
|
||||||
{ _T("bar$"), _T("barbar"), TRUE },
|
{ _T("bar$"), _T("barbar"), true },
|
||||||
{ _T("bar$"), _T("barbar "), FALSE },
|
{ _T("bar$"), _T("barbar "), false },
|
||||||
};
|
};
|
||||||
|
|
||||||
for ( size_t n = 0; n < WXSIZEOF(regExMatchTestData); n++ )
|
for ( size_t n = 0; n < WXSIZEOF(regExMatchTestData); n++ )
|
||||||
@@ -3006,7 +3006,8 @@ static void TestSocketServer()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ;; )
|
bool quit = false;
|
||||||
|
while ( !quit )
|
||||||
{
|
{
|
||||||
wxPrintf(_T("Server: waiting for connection on port %d...\n"), PORT);
|
wxPrintf(_T("Server: waiting for connection on port %d...\n"), PORT);
|
||||||
|
|
||||||
@@ -3021,7 +3022,8 @@ static void TestSocketServer()
|
|||||||
|
|
||||||
server->SetTimeout(60); // 1 min
|
server->SetTimeout(60); // 1 min
|
||||||
|
|
||||||
while ( socket->IsConnected() )
|
bool close = false;
|
||||||
|
while ( !close && socket->IsConnected() )
|
||||||
{
|
{
|
||||||
wxString s;
|
wxString s;
|
||||||
wxChar ch = _T('\0');
|
wxChar ch = _T('\0');
|
||||||
@@ -3053,19 +3055,31 @@ static void TestSocketServer()
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxPrintf(_T("Server: got '%s'.\n"), s.c_str());
|
wxPrintf(_T("Server: got '%s'.\n"), s.c_str());
|
||||||
if ( s == _T("bye") )
|
if ( s == _T("close") )
|
||||||
{
|
{
|
||||||
delete socket;
|
wxPuts(_T("Closing connection"));
|
||||||
|
|
||||||
break;
|
close = true;
|
||||||
}
|
}
|
||||||
|
else if ( s == _T("quit") )
|
||||||
|
{
|
||||||
|
close =
|
||||||
|
quit = true;
|
||||||
|
|
||||||
socket->Write(s.MakeUpper().c_str(), s.length());
|
wxPuts(_T("Shutting down the server"));
|
||||||
socket->Write("\r\n", 2);
|
}
|
||||||
wxPrintf(_T("Server: wrote '%s'.\n"), s.c_str());
|
else // not a special command
|
||||||
|
{
|
||||||
|
socket->Write(s.MakeUpper().c_str(), s.length());
|
||||||
|
socket->Write("\r\n", 2);
|
||||||
|
wxPrintf(_T("Server: wrote '%s'.\n"), s.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxPuts(_T("Server: lost a client."));
|
if ( !close )
|
||||||
|
{
|
||||||
|
wxPuts(_T("Server: lost a client unexpectedly."));
|
||||||
|
}
|
||||||
|
|
||||||
socket->Destroy();
|
socket->Destroy();
|
||||||
}
|
}
|
||||||
@@ -3160,7 +3174,7 @@ static bool TestFtpConnect()
|
|||||||
{
|
{
|
||||||
wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
|
wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3168,7 +3182,7 @@ static bool TestFtpConnect()
|
|||||||
hostname, ftp.Pwd().c_str());
|
hostname, ftp.Pwd().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0?
|
// test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0?
|
||||||
@@ -4248,8 +4262,8 @@ static void TestTimeStatic()
|
|||||||
// first line: the years to test
|
// first line: the years to test
|
||||||
{ 1990, 1976, 2000, 2030, 1984, },
|
{ 1990, 1976, 2000, 2030, 1984, },
|
||||||
|
|
||||||
// second line: TRUE if leap, FALSE otherwise
|
// second line: true if leap, false otherwise
|
||||||
{ FALSE, TRUE, TRUE, FALSE, TRUE }
|
{ false, true, true, false, true }
|
||||||
};
|
};
|
||||||
|
|
||||||
for ( size_t n = 0; n < nYears; n++ )
|
for ( size_t n = 0; n < nYears; n++ )
|
||||||
@@ -4851,7 +4865,7 @@ static void TestTimeFormat()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool equal = FALSE; // suppress compilaer warning
|
bool equal = false; // suppress compilaer warning
|
||||||
switch ( kind )
|
switch ( kind )
|
||||||
{
|
{
|
||||||
case CompareBoth:
|
case CompareBoth:
|
||||||
@@ -4895,8 +4909,8 @@ static void TestTimeParse()
|
|||||||
|
|
||||||
static const ParseTestData parseTestDates[] =
|
static const ParseTestData parseTestDates[] =
|
||||||
{
|
{
|
||||||
{ _T("Sat, 18 Dec 1999 00:46:40 +0100"), { 18, wxDateTime::Dec, 1999, 00, 46, 40 }, TRUE },
|
{ _T("Sat, 18 Dec 1999 00:46:40 +0100"), { 18, wxDateTime::Dec, 1999, 00, 46, 40 }, true },
|
||||||
{ _T("Wed, 1 Dec 1999 05:17:20 +0300"), { 1, wxDateTime::Dec, 1999, 03, 17, 20 }, TRUE },
|
{ _T("Wed, 1 Dec 1999 05:17:20 +0300"), { 1, wxDateTime::Dec, 1999, 03, 17, 20 }, true },
|
||||||
};
|
};
|
||||||
|
|
||||||
for ( size_t n = 0; n < WXSIZEOF(parseTestDates); n++ )
|
for ( size_t n = 0; n < WXSIZEOF(parseTestDates); n++ )
|
||||||
@@ -5261,7 +5275,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_n = n;
|
m_n = n;
|
||||||
m_ch = ch;
|
m_ch = ch;
|
||||||
m_cancelled = FALSE;
|
m_cancelled = false;
|
||||||
|
|
||||||
Create();
|
Create();
|
||||||
}
|
}
|
||||||
@@ -5276,7 +5290,7 @@ private:
|
|||||||
size_t m_n; // number of characters to write
|
size_t m_n; // number of characters to write
|
||||||
wxChar m_ch; // character to write
|
wxChar m_ch; // character to write
|
||||||
|
|
||||||
bool m_cancelled; // FALSE if we exit normally
|
bool m_cancelled; // false if we exit normally
|
||||||
};
|
};
|
||||||
|
|
||||||
wxThread::ExitCode MyDetachedThread::Entry()
|
wxThread::ExitCode MyDetachedThread::Entry()
|
||||||
@@ -5293,7 +5307,7 @@ wxThread::ExitCode MyDetachedThread::Entry()
|
|||||||
{
|
{
|
||||||
if ( TestDestroy() )
|
if ( TestDestroy() )
|
||||||
{
|
{
|
||||||
m_cancelled = TRUE;
|
m_cancelled = true;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -5912,7 +5926,7 @@ static void TestStringSub()
|
|||||||
{
|
{
|
||||||
wxString prefix = prefixes[n], rest;
|
wxString prefix = prefixes[n], rest;
|
||||||
bool rc = s.StartsWith(prefix, &rest);
|
bool rc = s.StartsWith(prefix, &rest);
|
||||||
wxPrintf(_T("StartsWith('%s') = %s"), prefix.c_str(), rc ? _T("TRUE") : _T("FALSE"));
|
wxPrintf(_T("StartsWith('%s') = %s"), prefix.c_str(), rc ? _T("true") : _T("false"));
|
||||||
if ( rc )
|
if ( rc )
|
||||||
{
|
{
|
||||||
wxPrintf(_T(" (the rest is '%s')\n"), rest.c_str());
|
wxPrintf(_T(" (the rest is '%s')\n"), rest.c_str());
|
||||||
@@ -6358,7 +6372,7 @@ int main(int argc, char **argv)
|
|||||||
PrintArray(_T("a1"), a1);
|
PrintArray(_T("a1"), a1);
|
||||||
|
|
||||||
wxPuts(_T("*** After sorting a1 in reverse order"));
|
wxPuts(_T("*** After sorting a1 in reverse order"));
|
||||||
a1.Sort(TRUE);
|
a1.Sort(true);
|
||||||
PrintArray(_T("a1"), a1);
|
PrintArray(_T("a1"), a1);
|
||||||
|
|
||||||
wxPuts(_T("*** After sorting a1 by the string length"));
|
wxPuts(_T("*** After sorting a1 by the string length"));
|
||||||
@@ -6406,12 +6420,17 @@ int main(int argc, char **argv)
|
|||||||
#endif // TEST_LOCALE
|
#endif // TEST_LOCALE
|
||||||
|
|
||||||
#ifdef TEST_LOG
|
#ifdef TEST_LOG
|
||||||
|
wxPuts(_T("*** Testing wxLog ***"));
|
||||||
|
|
||||||
wxString s;
|
wxString s;
|
||||||
for ( size_t n = 0; n < 8000; n++ )
|
for ( size_t n = 0; n < 8000; n++ )
|
||||||
{
|
{
|
||||||
s << (wxChar)(_T('A') + (n % 26));
|
s << (wxChar)(_T('A') + (n % 26));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxLogWarning(_T("The length of the string is %lu"),
|
||||||
|
(unsigned long)s.length());
|
||||||
|
|
||||||
wxString msg;
|
wxString msg;
|
||||||
msg.Printf(_T("A very very long message: '%s', the end!\n"), s.c_str());
|
msg.Printf(_T("A very very long message: '%s', the end!\n"), s.c_str());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user