xref: /spdk/lib/util/file.c (revision f8abbede89d30584d2a4f8427b13896f8591b873)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright (C) 2015 Intel Corporation.
3  *   All rights reserved.
4  */
5 
6 #include "spdk/file.h"
7 
8 void *
9 spdk_posix_file_load(FILE *file, size_t *size)
10 {
11 	uint8_t *newbuf, *buf = NULL;
12 	size_t rc, buf_size, cur_size = 0;
13 
14 	*size = 0;
15 	buf_size = 128 * 1024;
16 
17 	while (buf_size <= 1024 * 1024 * 1024) {
18 		newbuf = realloc(buf, buf_size);
19 		if (newbuf == NULL) {
20 			free(buf);
21 			return NULL;
22 		}
23 		buf = newbuf;
24 
25 		rc = fread(buf + cur_size, 1, buf_size - cur_size, file);
26 		cur_size += rc;
27 
28 		if (feof(file)) {
29 			*size = cur_size;
30 			return buf;
31 		}
32 
33 		if (ferror(file)) {
34 			free(buf);
35 			return NULL;
36 		}
37 
38 		buf_size *= 2;
39 	}
40 
41 	free(buf);
42 	return NULL;
43 }
44