From 538f35ccf43be97a317a1a80ae4b5c1b29068b01 Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Wed, 20 Feb 2002 13:24:19 +0000
Subject: [PATCH] use base 10 by default in wxString::To[U]Long

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14323 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/wxstring.tex | 19 +++++++++----------
 include/wx/string.h        | 11 +++++++----
 src/common/string.cpp      |  2 ++
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/docs/latex/wx/wxstring.tex b/docs/latex/wx/wxstring.tex
index deeba32b3c..6cc43e1378 100644
--- a/docs/latex/wx/wxstring.tex
+++ b/docs/latex/wx/wxstring.tex
@@ -922,21 +922,20 @@ if the string does not represent such number.
 
 \membersection{wxString::ToLong}\label{wxstringtolong}
 
-\constfunc{bool}{ToLong}{\param{long}{ *val}, \param{int }{base = $0$}}
+\constfunc{bool}{ToLong}{\param{long}{ *val}, \param{int }{base = $10$}}
 
 Attempts to convert the string to a signed integer in base {\it base}. Returns
 {\tt TRUE} on success in which case the number is stored in the location
 pointed to by {\it val} or {\tt FALSE} if the string does not represent a
 valid number in the given base.
 
-The default value of {\it base} $0$ is special and means that the usual rules
-of {\tt C} numbers are applied: if the number starts with {\tt 0x} it is
-considered to be in base $16$, if it starts with {\tt 0} - in base $8$ and in
-base $10$ otherwise. Note that you may want to specify the base $10$ explicitly
-if you are parsing the numbers which may have leading zeroes as otherwise the
-string {\tt "09"} may not be parsed correctly: it would be understood as an
-octal number because of the leading zero and the parsing would then fail as 
-{\tt '9'} is not a valid octal digit.
+The value of {\it base} must be comprised between $2$ and $36$, inclusive, or
+be a special value $0$ which means that the usual rules of {\tt C} numbers are
+applied: if the number starts with {\tt 0x} it is considered to be in base
+$16$, if it starts with {\tt 0} - in base $8$ and in base $10$ otherwise. Note
+that you may not want to specify the base $0$ if you are parsing the numbers
+which may have leading zeroes as they can yield unexpected (to the user not
+familiar with C) results.
 
 \wxheading{See also}
 
@@ -945,7 +944,7 @@ octal number because of the leading zero and the parsing would then fail as
 
 \membersection{wxString::ToULong}\label{wxstringtoulong}
 
-\constfunc{bool}{ToULong}{\param{unsigned long}{ *val}, \param{int }{base = $0$}}
+\constfunc{bool}{ToULong}{\param{unsigned long}{ *val}, \param{int }{base = $10$}}
 
 Attempts to convert the string to a ansigned integer in base {\it base}.
 Returns {\tt TRUE} on success in which case the number is stored in the
diff --git a/include/wx/string.h b/include/wx/string.h
index 998946f7dc..51583c89a3 100644
--- a/include/wx/string.h
+++ b/include/wx/string.h
@@ -673,12 +673,15 @@ public:
     // check if the string contents matches a mask containing '*' and '?'
   bool Matches(const wxChar *szMask) const;
 
-    // conversion to numbers: all functions return TRUE only if the whole string
-    // is a number and put the value of this number into the pointer provided
+    // conversion to numbers: all functions return TRUE only if the whole
+    // string is a number and put the value of this number into the pointer
+    // provided, the base is the numeric base in which the conversion should be
+    // done and must be comprised between 2 and 36 or be 0 in which case the
+    // standard C rules apply (leading '0' => octal, "0x" => hex)
         // convert to a signed integer
-    bool ToLong(long *val, int base = 0) const;
+    bool ToLong(long *val, int base = 10) const;
         // convert to an unsigned integer
-    bool ToULong(unsigned long *val, int base = 0) const;
+    bool ToULong(unsigned long *val, int base = 10) const;
         // convert to a double
     bool ToDouble(double *val) const;
 
diff --git a/src/common/string.cpp b/src/common/string.cpp
index 4a1c6d95a9..d8a1d812b2 100644
--- a/src/common/string.cpp
+++ b/src/common/string.cpp
@@ -1097,6 +1097,7 @@ int wxString::Find(const wxChar *pszSub) const
 bool wxString::ToLong(long *val, int base) const
 {
     wxCHECK_MSG( val, FALSE, _T("NULL pointer in wxString::ToLong") );
+    wxASSERT_MSG( !base || (base > 1 && base <= 36), _T("invalid base") );
 
     const wxChar *start = c_str();
     wxChar *end;
@@ -1110,6 +1111,7 @@ bool wxString::ToLong(long *val, int base) const
 bool wxString::ToULong(unsigned long *val, int base) const
 {
     wxCHECK_MSG( val, FALSE, _T("NULL pointer in wxString::ToULong") );
+    wxASSERT_MSG( !base || (base > 1 && base <= 36), _T("invalid base") );
 
     const wxChar *start = c_str();
     wxChar *end;
-- 
2.50.0

