FreeRDP
Loading...
Searching...
No Matches
json.c
1
20#include <math.h>
21#include <errno.h>
22
23#include <winpr/file.h>
24#include <winpr/json.h>
25#include <winpr/assert.h>
26
27WINPR_JSON* WINPR_JSON_ParseFromFile(const char* filename)
28{
29 FILE* fp = winpr_fopen(filename, "r");
30 if (!fp)
31 return NULL;
32 WINPR_JSON* json = WINPR_JSON_ParseFromFileFP(fp);
33 (void)fclose(fp);
34 return json;
35}
36
37WINPR_JSON* WINPR_JSON_ParseFromFileFP(FILE* fp)
38{
39 if (!fp)
40 return NULL;
41
42 if (fseek(fp, 0, SEEK_END) != 0)
43 return NULL;
44
45 const INT64 size = _ftelli64(fp);
46 if (size < 0)
47 return NULL;
48
49 if (fseek(fp, 0, SEEK_SET) != 0)
50 return NULL;
51
52 const size_t usize = WINPR_ASSERTING_INT_CAST(size_t, size);
53 char* str = calloc(usize + 1, sizeof(char));
54 if (!str)
55 return NULL;
56
57 WINPR_JSON* json = NULL;
58 const size_t s = fread(str, sizeof(char), usize, fp);
59 if (s == usize)
60 json = WINPR_JSON_ParseWithLength(str, usize);
61 free(str);
62 return json;
63}
WINPR_JSON * WINPR_JSON_ParseFromFileFP(FILE *fp)
Parse a JSON string read from a FILE.
Definition json.c:37
WINPR_JSON * WINPR_JSON_ParseFromFile(const char *filename)
Parse a JSON string read from a file filename.
Definition json.c:27
WINPR_API WINPR_JSON * WINPR_JSON_ParseWithLength(const char *value, size_t buffer_length)
Parse a JSON string.
Definition c-json.c:98