Spdk/lib/util/file.c

44 lines
697 B
C
Raw Normal View History

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (C) 2015 Intel Corporation.
* All rights reserved.
*/
#include "spdk/file.h"
void *
spdk_posix_file_load(FILE *file, size_t *size)
{
void *newbuf, *buf = NULL;
size_t rc, buf_size, cur_size = 0;
*size = 0;
buf_size = 128 * 1024;
while (buf_size <= 1024 * 1024 * 1024) {
newbuf = realloc(buf, buf_size);
if (newbuf == NULL) {
free(buf);
return NULL;
}
buf = newbuf;
rc = fread(buf + cur_size, 1, buf_size - cur_size, file);
cur_size += rc;
if (feof(file)) {
*size = cur_size;
return buf;
}
if (ferror(file)) {
free(buf);
return NULL;
}
buf_size *= 2;
}
free(buf);
return NULL;
}