Terminate String memory with '\0'

This commit is contained in:
Josh Holtrop 2018-04-07 09:34:25 -04:00
parent 49e4e853be
commit c6f5200e69

View File

@ -5,16 +5,10 @@ String * String_new(const char * s)
{ {
String * new_st = (String *)malloc(sizeof(String)); String * new_st = (String *)malloc(sizeof(String));
size_t size = strlen(s); size_t size = strlen(s);
if (size != 0u) char * smem = (char *)malloc(size + 1u);
{
char * smem = (char *)malloc(size);
memcpy(smem, s, size); memcpy(smem, s, size);
smem[size] = '\0';
new_st->value = smem; new_st->value = smem;
}
else
{
new_st->value = NULL;
}
new_st->size = size; new_st->size = size;
return new_st; return new_st;
} }
@ -25,9 +19,10 @@ String * String_plus(const String * st, const char * s)
size_t size1 = st->size; size_t size1 = st->size;
size_t size2 = strlen(s); size_t size2 = strlen(s);
size_t size = size1 + size2; size_t size = size1 + size2;
char * smem = (char *)malloc(size); char * smem = (char *)malloc(size + 1u);
memcpy(smem, st->value, size1); memcpy(smem, st->value, size1);
memcpy(&smem[size1], s, size2); memcpy(&smem[size1], s, size2);
smem[size] = '\0';
new_st->value = smem; new_st->value = smem;
new_st->size = size; new_st->size = size;
return new_st; return new_st;
@ -37,17 +32,10 @@ String * String_concat(String * st, const char * s)
{ {
size_t size2 = strlen(s); size_t size2 = strlen(s);
size_t size = st->size + size2; size_t size = st->size + size2;
char * smem = NULL; char * smem = (char *)malloc(size + 1u);
if (size != 0u)
{
smem = (char *)malloc(size);
memcpy(smem, st->value, st->size); memcpy(smem, st->value, st->size);
memcpy(&smem[st->size], s, size2); memcpy(&smem[st->size], s, size2);
} smem[size] = '\0';
if (st->value != NULL)
{
free(st->value);
}
st->value = smem; st->value = smem;
st->size = size; st->size = size;
return st; return st;
@ -55,9 +43,6 @@ String * String_concat(String * st, const char * s)
void String_free(String * st) void String_free(String * st)
{ {
if (st->value != NULL)
{
free(st->value); free(st->value);
}
free(st); free(st);
} }