FFstrbuf: fix bugs in ffStrbufAppendS; add more tests

This commit is contained in:
李通洲
2022-09-20 21:50:50 +08:00
parent 254c4e5f50
commit 6eed53217d
2 changed files with 60 additions and 27 deletions
+8 -21
View File
@@ -31,10 +31,8 @@ void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src)
void ffStrbufInitS(FFstrbuf* strbuf, const char* str)
{
uint32_t bufSize = (uint32_t)strlen(str) + 1;
ffStrbufInitA(strbuf, FASTFETCH_STRBUF_DEFAULT_ALLOC > bufSize ? FASTFETCH_STRBUF_DEFAULT_ALLOC : bufSize);
memcpy(strbuf->chars, str, bufSize);
strbuf->length = bufSize - 1;
ffStrbufInitA(strbuf, 0);
ffStrbufAppendS(strbuf, str);
}
uint32_t ffStrbufGetFree(const FFstrbuf* strbuf)
@@ -102,14 +100,7 @@ void ffStrbufAppendS(FFstrbuf* strbuf, const char* value)
if(value == NULL)
return;
for(uint32_t i = 0; value[i] != '\0'; i++)
{
if(i % 16 == 0)
ffStrbufEnsureFree(strbuf, 16);
strbuf->chars[strbuf->length++] = value[i];
}
strbuf->chars[strbuf->length] = '\0';
ffStrbufAppendNS(strbuf, (uint32_t)strlen(value), value);
}
void ffStrbufAppendNS(FFstrbuf* strbuf, uint32_t length, const char* value)
@@ -118,15 +109,8 @@ void ffStrbufAppendNS(FFstrbuf* strbuf, uint32_t length, const char* value)
return;
ffStrbufEnsureFree(strbuf, length);
for(uint32_t i = 0; i < length; i++)
{
if(value[i] == '\0')
break;
strbuf->chars[strbuf->length++] = value[i];
}
memcpy(&strbuf->chars[strbuf->length], value, length);
strbuf->length += length;
strbuf->chars[strbuf->length] = '\0';
}
@@ -580,5 +564,8 @@ uint16_t ffStrbufToUInt16(const FFstrbuf* strbuf, uint16_t defaultValue)
void ffStrbufDestroy(FFstrbuf* strbuf)
{
//Avoid free-after-use. These 3 assignments are cheap so don't remove them
strbuf->allocated = strbuf->length = 0;
free(strbuf->chars);
strbuf->chars = NULL;
}