}
+FILE* OS::FOpen(const char* path, const char* mode) {
+ return fopen(path, mode);
+}
+
+
void OS::Print(const char* format, ...) {
va_list args;
va_start(args, format);
}
-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) {
- int n = vsnprintf(str, size, format, args); // forward to Mac OS X.
- if (n < 0 || static_cast<size_t>(n) >= size) {
- str[size - 1] = '\0';
+int OS::VSNPrintF(Vector<char> str,
+ const char* format,
+ va_list args) {
+ int n = vsnprintf(str.start(), str.length(), format, args);
+ if (n < 0 || n >= str.length()) {
+ str[str.length() - 1] = '\0';
return -1;
} else {
return n;
}
+void OS::StrNCpy(Vector<char> dest, const char* src, size_t n) {
+ strncpy(dest.start(), src, n);
+}
+
+
+void OS::WcsCpy(Vector<wchar_t> dest, const wchar_t* src) {
+ wcscpy(dest.start(), src);
+}
+
+
+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
frames[i].address = addresses[i];
// Format a text representation of the frame based on the information
// available.
- SNPrintF(frames[i].text, kStackWalkMaxTextLen, "%s", symbols[i]);
+ SNPrintF(MutableCStrVector(frames[i].text,
+ kStackWalkMaxTextLen),
+ "%s",
+ symbols[i]);
// Make sure line termination is in place.
frames[i].text[kStackWalkMaxTextLen - 1] = '\0';
}
int OS::VSNPrintF(Vector<char> str, const char* format, va_list args) {
- int n = _vsnprintf_s(str.start(), str.length(), str.length(), format, args);
+ int n = _vsnprintf_s(str.start(), str.length(), _TRUNCATE, format, args);
// Make sure to zero-terminate the string if the output was
// truncated or if there was an error.
if (n < 0 || n >= str.length()) {
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);
+ 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);
+ USE(result);
+ ASSERT(result == 0);
}