Fixed build problem on mac, lint issues and a test failure on win32.

Review URL: http://codereview.chromium.org/2601

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@285 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
christian.plesner.hansen@gmail.com 2008-09-11 15:03:22 +00:00
parent 211751f81e
commit 3764f52a4e
3 changed files with 40 additions and 13 deletions

View File

@ -132,6 +132,11 @@ double OS::LocalTimeOffset() {
}
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);
@ -158,19 +163,21 @@ void OS::VPrintError(const char* format, va_list args) {
}
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;
@ -178,6 +185,21 @@ int OS::VSNPrintF(char* str, size_t size, const char* format, va_list args) {
}
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
@ -299,7 +321,10 @@ int OS::StackWalk(StackFrame* frames, int frames_size) {
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';
}

View File

@ -668,7 +668,7 @@ int OS::SNPrintF(Vector<char> str, const char* format, ...) {
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()) {
@ -682,13 +682,15 @@ int OS::VSNPrintF(Vector<char> str, const char* format, va_list args) {
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);
}

View File

@ -328,12 +328,12 @@ class Vector {
};
template <typename T, int size>
template <typename T, int kSize>
class EmbeddedVector : public Vector<T> {
public:
EmbeddedVector() : Vector<T>(buffer_, size) { }
EmbeddedVector() : Vector<T>(buffer_, kSize) { }
private:
T buffer_[size];
T buffer_[kSize];
};