xref: /spdk/lib/util/file.c (revision 588dfe314bb83d86effdf67ec42837b11c2620bf)
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  	void *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