Write NULL as "" so readString() always returns a non-NULL string.

BUG=
R=reed@google.com

Review URL: https://codereview.chromium.org/22862002

git-svn-id: http://skia.googlecode.com/svn/trunk@10754 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
mtklein@google.com 2013-08-15 21:01:32 +00:00
parent 439df286c8
commit 0038c12f33
3 changed files with 7 additions and 30 deletions

View File

@ -168,7 +168,9 @@ public:
* Writes a string to the writer, which can be retrieved with
* SkReader32::readString().
* The length can be specified, or if -1 is passed, it will be computed by
* calling strlen(). The length must be < 0xFFFF
* calling strlen(). The length must be < max size_t.
*
* If you write NULL, it will be read as "".
*/
void writeString(const char* str, size_t len = (size_t)-1);

View File

@ -246,12 +246,6 @@ void SkWriter32::validate() const {
const char* SkReader32::readString(size_t* outLen) {
size_t len = this->readInt();
if (0xFFFF == len) {
if (outLen) {
*outLen = 0;
}
return NULL;
}
const void* ptr = this->peek();
// skip over teh string + '\0' and then pad to a multiple of 4
@ -275,9 +269,8 @@ size_t SkReader32::readIntoString(SkString* copy) {
void SkWriter32::writeString(const char str[], size_t len) {
if (NULL == str) {
// We're already requiring len < 0xFFFF, so we can use that to mark NULL.
this->write32(0xFFFF);
return;
str = "";
len = 0;
}
if ((long)len < 0) {
len = strlen(str);

View File

@ -24,29 +24,11 @@ static void check_contents(skiatest::Reporter* reporter, const SkWriter32& write
static void test_string_null(skiatest::Reporter* reporter) {
uint8_t storage[8];
SkWriter32 writer(0, storage, sizeof(storage));
SkReader32 reader(storage, sizeof(storage));
const char* str;
size_t len;
// Can we write NULL?
writer.writeString(NULL);
const int32_t null[] = { 0xFFFF };
check_contents(reporter, writer, null, sizeof(null));
str = reader.readString(&len);
REPORTER_ASSERT(reporter, NULL == str);
REPORTER_ASSERT(reporter, 0 == len);
writer.reset(storage, sizeof(storage));
reader.rewind();
// Is NULL distinct from ""?
writer.writeString("");
const int32_t empty[] = { 0x0, 0x0 };
check_contents(reporter, writer, empty, sizeof(empty));
str = reader.readString(&len);
REPORTER_ASSERT(reporter, 0 == strcmp("", str));
REPORTER_ASSERT(reporter, 0 == len);
const int32_t expected[] = { 0x0, 0x0 };
check_contents(reporter, writer, expected, sizeof(expected));
}
static void test_rewind(skiatest::Reporter* reporter) {