| Index: src/platform-win32.cc
|
| ===================================================================
|
| --- src/platform-win32.cc (revision 280)
|
| +++ src/platform-win32.cc (working copy)
|
| @@ -156,14 +156,14 @@
|
| // Case-insensitive string comparisons. Use stricmp() on Win32. Usually defined
|
| // in strings.h.
|
| int strcasecmp(const char* s1, const char* s2) {
|
| - return stricmp(s1, s2);
|
| + return _stricmp(s1, s2);
|
| }
|
|
|
|
|
| // Case-insensitive bounded string comparisons. Use stricmp() on Win32. Usually
|
| // defined in strings.h.
|
| int strncasecmp(const char* s1, const char* s2, int n) {
|
| - return strnicmp(s1, s2, n);
|
| + return _strnicmp(s1, s2, n);
|
| }
|
|
|
| namespace v8 { namespace internal {
|
| @@ -341,9 +341,13 @@
|
| }
|
|
|
| // Make standard and DST timezone names.
|
| - _snprintf(std_tz_name_, kTzNameSize, "%S", tzinfo_.StandardName);
|
| + OS::SNPrintF(Vector<char>(std_tz_name_, kTzNameSize),
|
| + "%S",
|
| + tzinfo_.StandardName);
|
| std_tz_name_[kTzNameSize - 1] = '\0';
|
| - _snprintf(dst_tz_name_, kTzNameSize, "%S", tzinfo_.DaylightName);
|
| + OS::SNPrintF(Vector<char>(dst_tz_name_, kTzNameSize),
|
| + "%S",
|
| + tzinfo_.DaylightName);
|
| dst_tz_name_[kTzNameSize - 1] = '\0';
|
|
|
| // If OS returned empty string or resource id (like "@tzres.dll,-211")
|
| @@ -351,12 +355,14 @@
|
| // To properly resolve the resource identifier requires a library load,
|
| // which is not possible in a sandbox.
|
| if (std_tz_name_[0] == '\0' || std_tz_name_[0] == '@') {
|
| - _snprintf(std_tz_name_, kTzNameSize - 1, "%s Standard Time",
|
| - GuessTimezoneNameFromBias(tzinfo_.Bias));
|
| + OS::SNPrintF(Vector<char>(std_tz_name_, kTzNameSize - 1),
|
| + "%s Standard Time",
|
| + GuessTimezoneNameFromBias(tzinfo_.Bias));
|
| }
|
| if (dst_tz_name_[0] == '\0' || dst_tz_name_[0] == '@') {
|
| - _snprintf(dst_tz_name_, kTzNameSize - 1, "%s Daylight Time",
|
| - GuessTimezoneNameFromBias(tzinfo_.Bias));
|
| + OS::SNPrintF(Vector<char>(dst_tz_name_, kTzNameSize - 1),
|
| + "%s Daylight Time",
|
| + GuessTimezoneNameFromBias(tzinfo_.Bias));
|
| }
|
|
|
| // Timezone information initialized.
|
| @@ -607,14 +613,23 @@
|
| // It is important to use safe print here in order to avoid
|
| // overflowing the buffer. We might truncate the output, but this
|
| // does not crash.
|
| - static const int kBufferSize = 4096;
|
| - char buffer[kBufferSize];
|
| - OS::VSNPrintF(buffer, kBufferSize, format, args);
|
| - OutputDebugStringA(buffer);
|
| + EmbeddedVector<char, 4096> buffer;
|
| + OS::VSNPrintF(buffer, format, args);
|
| + OutputDebugStringA(buffer.start());
|
| }
|
| }
|
|
|
|
|
| +FILE* OS::FOpen(const char* path, const char* mode) {
|
| + FILE* result;
|
| + if (fopen_s(&result, path, mode) == 0) {
|
| + return result;
|
| + } else {
|
| + return NULL;
|
| + }
|
| +}
|
| +
|
| +
|
| // Print (debug) message to console.
|
| void OS::Print(const char* format, ...) {
|
| va_list args;
|
| @@ -643,24 +658,21 @@
|
| }
|
|
|
|
|
| -int OS::SNPrintF(char* str, size_t size, const char* format, ...) {
|
| +int OS::SNPrintF(Vector<char> str, const char* format, ...) {
|
| va_list args;
|
| va_start(args, format);
|
| - int result = VSNPrintF(str, size, format, args);
|
| + int result = VSNPrintF(str, format, args);
|
| va_end(args);
|
| return result;
|
| }
|
|
|
|
|
| -int OS::VSNPrintF(char* str, size_t size, const char* format, va_list args) {
|
| - // Print formated output to string. The _vsnprintf function has been
|
| - // deprecated in MSVC. We need to define _CRT_NONSTDC_NO_DEPRECATE
|
| - // during compilation to use it anyway. Usually defined in stdio.h.
|
| - int n = _vsnprintf(str, size, format, args);
|
| +int OS::VSNPrintF(Vector<char> str, const char* format, va_list args) {
|
| + int n = _vsnprintf_s(str.start(), str.length(), str.length(), format, args);
|
| // Make sure to zero-terminate the string if the output was
|
| // truncated or if there was an error.
|
| - if (n < 0 || static_cast<size_t>(n) >= size) {
|
| - str[size - 1] = '\0';
|
| + if (n < 0 || n >= str.length()) {
|
| + str[str.length() - 1] = '\0';
|
| return -1;
|
| } else {
|
| return n;
|
| @@ -668,6 +680,23 @@
|
| }
|
|
|
|
|
| +void OS::StrNCpy(Vector<char> dest, const char* src, size_t n) {
|
| + int result = strncpy_s(dest.start(), dest.length(), src, n);
|
| + USE(result); ASSERT(result == 0);
|
| +}
|
| +
|
| +
|
| +void OS::WcsCpy(Vector<wchar_t> dest, const wchar_t* src) {
|
| + int result = wcscpy_s(dest.start(), dest.length(), src);
|
| + USE(result); ASSERT(result == 0);
|
| +}
|
| +
|
| +
|
| +char *OS::StrDup(const char* str) {
|
| + return _strdup(str);
|
| +}
|
| +
|
| +
|
| // We keep the lowest and highest addresses mapped as a quick way of
|
| // determining that pointers are outside the heap (used mostly in assertions
|
| // and verification). The estimate is conservative, ie, not all addresses in
|
| @@ -1132,11 +1161,15 @@
|
| // Format a text representation of the frame based on the information
|
| // available.
|
| if (ok) {
|
| - SNPrintF(frames[frames_count].text, kStackWalkMaxTextLen, "%s %s:%d:%d",
|
| + SNPrintF(MutableCStrVector(frames[frames_count].text,
|
| + kStackWalkMaxTextLen),
|
| + "%s %s:%d:%d",
|
| symbol->Name, Line.FileName, Line.LineNumber,
|
| line_displacement);
|
| } else {
|
| - SNPrintF(frames[frames_count].text, kStackWalkMaxTextLen, "%s",
|
| + SNPrintF(MutableCStrVector(frames[frames_count].text,
|
| + kStackWalkMaxTextLen),
|
| + "%s",
|
| symbol->Name);
|
| }
|
| // Make sure line termination is in place.
|
|
|