Work around malloc(0) returning NULL.

This commit is contained in:
Jonathan Schleifer 2012-09-30 05:20:09 +02:00
parent e661734b9a
commit 8f99011887

View file

@ -120,11 +120,14 @@ cfw_stream_read_line(void *ptr)
} }
cfw_string_set_nocopy(ret, ret_str, ret_len); cfw_string_set_nocopy(ret, ret_str, ret_len);
new_cache = malloc(stream->cache_len - i - 1); if (stream->cache_len - i - 1 > 0) {
if (new_cache == NULL) if ((new_cache = malloc(
return NULL; stream->cache_len - i - 1)) == NULL)
memcpy(new_cache, stream->cache + i + 1, return NULL;
stream->cache_len - i - 1); memcpy(new_cache, stream->cache + i + 1,
stream->cache_len - i - 1);
} else
new_cache = cfw_strdup("");
free(stream->cache); free(stream->cache);
stream->cache = new_cache; stream->cache = new_cache;
@ -204,12 +207,16 @@ cfw_stream_read_line(void *ptr)
} }
cfw_string_set_nocopy(ret, ret_str, ret_len); cfw_string_set_nocopy(ret, ret_str, ret_len);
new_cache = malloc(buf_len - i - 1); if (buf_len - i - 1 > 0) {
if (new_cache == NULL) { new_cache = malloc(buf_len - i - 1);
free(buf); if (new_cache == NULL) {
return NULL; free(buf);
} return NULL;
memcpy(new_cache, buf + i + 1, buf_len - i - 1); }
memcpy(new_cache, buf + i + 1,
buf_len - i - 1);
} else
new_cache = cfw_strdup("");
free(stream->cache); free(stream->cache);
stream->cache = new_cache; stream->cache = new_cache;
@ -221,12 +228,19 @@ cfw_stream_read_line(void *ptr)
} }
/* There was no newline or \0 */ /* There was no newline or \0 */
new_cache = realloc(stream->cache, stream->cache_len + buf_len); if (stream->cache_len + buf_len > 0) {
if (new_cache == NULL) { new_cache = realloc(stream->cache,
free(buf); stream->cache_len + buf_len);
return NULL; if (new_cache == NULL) {
free(buf);
return NULL;
}
memcpy(new_cache + stream->cache_len, buf, buf_len);
} else {
free(stream->cache);
new_cache = cfw_strdup("");
} }
memcpy(new_cache + stream->cache_len, buf, buf_len);
stream->cache = new_cache; stream->cache = new_cache;
stream->cache_len += buf_len; stream->cache_len += buf_len;
} }