mirror of https://github.com/OpenTTD/OpenTTD
(svn r10453) -Codechange: Allow save/load of empty (unallocated) strings
parent
1af0fc0a33
commit
a8b385d77d
|
@ -496,6 +496,7 @@ static void SlSaveLoadConv(void *ptr, VarType conv)
|
||||||
* @return return the net length of the string */
|
* @return return the net length of the string */
|
||||||
static inline size_t SlCalcNetStringLen(const char *ptr, size_t length)
|
static inline size_t SlCalcNetStringLen(const char *ptr, size_t length)
|
||||||
{
|
{
|
||||||
|
if (ptr == NULL) return 0;
|
||||||
return minu(strlen(ptr), length - 1);
|
return minu(strlen(ptr), length - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,9 +574,13 @@ static void SlString(void *ptr, size_t length, VarType conv)
|
||||||
case SLE_VAR_STR:
|
case SLE_VAR_STR:
|
||||||
case SLE_VAR_STRQ: // Malloc'd string, free previous incarnation, and allocate
|
case SLE_VAR_STRQ: // Malloc'd string, free previous incarnation, and allocate
|
||||||
free(*(char**)ptr);
|
free(*(char**)ptr);
|
||||||
|
if (len == 0) {
|
||||||
|
*(char**)ptr = NULL;
|
||||||
|
} else {
|
||||||
*(char**)ptr = (char*)malloc(len + 1); // terminating '\0'
|
*(char**)ptr = (char*)malloc(len + 1); // terminating '\0'
|
||||||
ptr = *(char**)ptr;
|
ptr = *(char**)ptr;
|
||||||
SlCopyBytes(ptr, len);
|
SlCopyBytes(ptr, len);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue