#endif
#if defined(__MWERKS__) && __MSL__ >= 0x6000
+namespace std {}
using namespace std ;
#endif
}
else
{
- val = wxT("");
+ val = wxEmptyString;
len = 0;
}
int vswscanf(const wxChar *ws, const wxChar *format, va_list argptr)
{
- wxFAIL_MSG( _T("TODO") );
+ // The best we can do without proper Unicode support in glibc is to
+ // convert the strings into MB representation and run ANSI version
+ // of the function. This doesn't work with %c and %s because of difference
+ // in size of char and wchar_t, though.
- return -1;
+ wxCHECK_MSG( wxStrstr(format, _T("%s")) == NULL, -1,
+ _T("incomplete vswscanf implementation doesn't allow %s") );
+ wxCHECK_MSG( wxStrstr(format, _T("%c")) == NULL, -1,
+ _T("incomplete vswscanf implementation doesn't allow %c") );
+
+ va_list argcopy;
+ wxVaCopy(argcopy, argptr);
+ return vsscanf(wxConvLibc.cWX2MB(ws), wxConvLibc.cWX2MB(format), argcopy);
}
int vfwscanf(FILE *stream, const wxChar *format, va_list argptr)
WXDLLEXPORT int wxToupper(wxChar ch) { return (wxChar)CharUpper((LPTSTR)(ch)); }
#endif
-#if defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
+#if defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
WXDLLEXPORT size_t wxInternalMbstowcs (wchar_t * out, const char * in, size_t outlen)
{
outsize++;
return outsize;
}
-
+
const char* origin = in;
-
+
while (outlen-- && *in)
{
*out++ = (wchar_t) *in++;
}
-
+
*out = '\0';
-
+
return in - origin;
}
outsize++;
return outsize;
}
-
+
const wchar_t* origin = in;
-
+
while (outlen-- && *in)
{
*out++ = (char) *in++;
}
-
+
*out = '\0';
-
+
return in - origin;
}
-
+
#if defined(wxNEED_WX_CTYPE_H)
#include <CoreFoundation/CoreFoundation.h>
#ifndef wxSetlocale
WXDLLEXPORT wxWCharBuffer wxSetlocale(int category, const wxChar *locale)
{
- char *localeOld = setlocale(category, wxConvLocal.cWX2MB(locale));
+ char *localeOld = setlocale(category, wxConvLibc.cWX2MB(locale));
- return wxWCharBuffer(wxConvLocal.cMB2WC(localeOld));
+ return wxWCharBuffer(wxConvLibc.cMB2WC(localeOld));
}
#endif
size_t n = 0;
while ( *s++ )
n++;
-
+
return n;
}
}
wxString data(nptr, nptr-start);
- wxWX2MBbuf dat = data.mb_str(wxConvLocal);
+ wxWX2MBbuf dat = data.mb_str(wxConvLibc);
char *rdat = wxMBSTRINGCAST dat;
double ret = strtod(dat, &rdat);
(wxIsalpha(*nptr) && (wxToupper(*nptr) - wxT('A') + 10 < base))) nptr++;
wxString data(start, nptr-start);
- wxWX2MBbuf dat = data.mb_str(wxConvLocal);
+ wxWX2MBbuf dat = data.mb_str(wxConvLibc);
char *rdat = wxMBSTRINGCAST dat;
long int ret = strtol(dat, &rdat, base);
else
return 0.0;
#else
- return atof(wxConvLocal.cWX2MB(psz));
+ return atof(wxConvLibc.cWX2MB(psz));
#endif
}
#endif
#ifdef wxNEED_WX_STDLIB_H
int WXDLLEXPORT wxAtoi(const wxChar *psz)
{
- return atoi(wxConvLocal.cWX2MB(psz));
+ return atoi(wxConvLibc.cWX2MB(psz));
}
long WXDLLEXPORT wxAtol(const wxChar *psz)
{
- return atol(wxConvLocal.cWX2MB(psz));
+ return atol(wxConvLibc.cWX2MB(psz));
}
wxChar * WXDLLEXPORT wxGetenv(const wxChar *name)
// time getenv() is called, so it is OK to use static string
// buffer to hold the data.
static wxWCharBuffer value((wxChar*)NULL);
- value = wxConvLocal.cMB2WX(getenv(wxConvLocal.cWX2MB(name)));
+ value = wxConvLibc.cMB2WX(getenv(wxConvLibc.cWX2MB(name)));
return value.data();
#else
return getenv(name);
int WXDLLEXPORT wxSystem(const wxChar *psz)
{
- return system(wxConvLocal.cWX2MB(psz));
+ return system(wxConvLibc.cWX2MB(psz));
}
#endif // wxNEED_WX_STDLIB_H
#ifdef wxNEED_WX_TIME_H
-WXDLLEXPORT size_t wxStrftime(wxChar *s, size_t max, const wxChar *fmt, const struct tm *tm)
+WXDLLEXPORT size_t
+wxStrftime(wxChar *s, size_t maxsize, const wxChar *fmt, const struct tm *tm)
{
- if (!max) return 0;
+ if ( !maxsize )
+ return 0;
- char *buf = (char *)malloc(max);
- size_t ret = strftime(buf, max, wxConvLocal.cWX2MB(fmt), tm);
- if (ret)
- {
- wxStrcpy(s, wxConvLocal.cMB2WX(buf));
- free(buf);
- return wxStrlen(s);
- }
- else
- {
- free(buf);
- *s = 0;
+ wxCharBuffer buf(maxsize);
+
+ wxCharBuffer bufFmt(wxConvLibc.cWX2MB(fmt));
+ if ( !bufFmt )
return 0;
- }
+
+ size_t ret = strftime(buf.data(), maxsize, bufFmt, tm);
+ if ( !ret )
+ return 0;
+
+ wxWCharBuffer wbuf = wxConvLibc.cMB2WX(buf);
+ if ( !wbuf )
+ return 0;
+
+ wxStrncpy(s, wbuf, maxsize);
+ return wxStrlen(s);
}
#endif // wxNEED_WX_TIME_H
#ifndef wxCtime
WXDLLEXPORT wxChar *wxCtime(const time_t *timep)
{
- static wxChar buf[128];
+ // normally the string is 26 chars but give one more in case some broken
+ // DOS compiler decides to use "\r\n" instead of "\n" at the end
+ static wxChar buf[27];
- wxStrncpy( buf, wxConvertMB2WX( ctime( timep ) ), sizeof( buf ) );
- buf[ sizeof( buf ) - 1 ] = _T('\0');
+ // ctime() is guaranteed to return a string containing only ASCII
+ // characters, as its format is always the same for any locale
+ wxStrncpy(buf, wxString::FromAscii(ctime(timep)), WXSIZEOF(buf));
+ buf[WXSIZEOF(buf) - 1] = _T('\0');
return buf;
}