Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / core / SkString.cpp
index 48459db..b433515 100644 (file)
@@ -26,12 +26,13 @@ static const size_t kBufferSize = 1024;
     #define SNPRINTF    snprintf
 #endif
 
-#define ARGS_TO_BUFFER(format, buffer, size)        \
-    do {                                            \
-        va_list args;                               \
-        va_start(args, format);                     \
-        VSNPRINTF(buffer, size, format, args);      \
-        va_end(args);                               \
+#define ARGS_TO_BUFFER(format, buffer, size, written)      \
+    do {                                                   \
+        va_list args;                                      \
+        va_start(args, format);                            \
+        written = VSNPRINTF(buffer, size, format, args);   \
+        SkASSERT(written >= 0 && written < SkToInt(size)); \
+        va_end(args);                                      \
     } while (0)
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -89,11 +90,12 @@ char* SkStrAppendU32(char string[], uint32_t dec) {
 }
 
 char* SkStrAppendS32(char string[], int32_t dec) {
+    uint32_t udec = dec;
     if (dec < 0) {
         *string++ = '-';
-        dec = -dec;
+        udec = ~udec + 1;  // udec = -udec, but silences some warnings that are trying to be helpful
     }
-    return SkStrAppendU32(string, static_cast<uint32_t>(dec));
+    return SkStrAppendU32(string, udec);
 }
 
 char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) {
@@ -123,11 +125,12 @@ char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) {
 }
 
 char* SkStrAppendS64(char string[], int64_t dec, int minDigits) {
+    uint64_t udec = dec;
     if (dec < 0) {
         *string++ = '-';
-        dec = -dec;
+        udec = ~udec + 1;  // udec = -udec, but silences some warnings that are trying to be helpful
     }
-    return SkStrAppendU64(string, static_cast<uint64_t>(dec), minDigits);
+    return SkStrAppendU64(string, udec, minDigits);
 }
 
 char* SkStrAppendFloat(char string[], float value) {
@@ -557,37 +560,42 @@ void SkString::insertScalar(size_t offset, SkScalar value) {
 
 void SkString::printf(const char format[], ...) {
     char    buffer[kBufferSize];
-    ARGS_TO_BUFFER(format, buffer, kBufferSize);
+    int length;
+    ARGS_TO_BUFFER(format, buffer, kBufferSize, length);
 
-    this->set(buffer, strlen(buffer));
+    this->set(buffer, length);
 }
 
 void SkString::appendf(const char format[], ...) {
     char    buffer[kBufferSize];
-    ARGS_TO_BUFFER(format, buffer, kBufferSize);
+    int length;
+    ARGS_TO_BUFFER(format, buffer, kBufferSize, length);
 
-    this->append(buffer, strlen(buffer));
+    this->append(buffer, length);
 }
 
 void SkString::appendVAList(const char format[], va_list args) {
     char    buffer[kBufferSize];
-    VSNPRINTF(buffer, kBufferSize, format, args);
+    int length = VSNPRINTF(buffer, kBufferSize, format, args);
+    SkASSERT(length >= 0 && length < SkToInt(kBufferSize));
 
-    this->append(buffer, strlen(buffer));
+    this->append(buffer, length);
 }
 
 void SkString::prependf(const char format[], ...) {
     char    buffer[kBufferSize];
-    ARGS_TO_BUFFER(format, buffer, kBufferSize);
+    int length;
+    ARGS_TO_BUFFER(format, buffer, kBufferSize, length);
 
-    this->prepend(buffer, strlen(buffer));
+    this->prepend(buffer, length);
 }
 
 void SkString::prependVAList(const char format[], va_list args) {
     char    buffer[kBufferSize];
-    VSNPRINTF(buffer, kBufferSize, format, args);
+    int length = VSNPRINTF(buffer, kBufferSize, format, args);
+    SkASSERT(length >= 0 && length < SkToInt(kBufferSize));
 
-    this->prepend(buffer, strlen(buffer));
+    this->prepend(buffer, length);
 }
 
 
@@ -635,7 +643,8 @@ void SkString::swap(SkString& other) {
 SkString SkStringPrintf(const char* format, ...) {
     SkString formattedOutput;
     char buffer[kBufferSize];
-    ARGS_TO_BUFFER(format, buffer, kBufferSize);
+    SK_UNUSED int length;
+    ARGS_TO_BUFFER(format, buffer, kBufferSize, length);
     formattedOutput.set(buffer);
     return formattedOutput;
 }