feat(utilities): added the get_file_content_with_size to properly handle binary files
This commit is contained in:
parent
37a696bd38
commit
358db79882
2 changed files with 22 additions and 0 deletions
|
|
@ -62,5 +62,6 @@ int cut_path(char*, char*);
|
||||||
void combine_path(char*, char*);
|
void combine_path(char*, char*);
|
||||||
PathType get_path_type(const char*);
|
PathType get_path_type(const char*);
|
||||||
char* get_file_content(char*);
|
char* get_file_content(char*);
|
||||||
|
char* get_file_content_with_size(char*, size_t*);
|
||||||
|
|
||||||
#endif // UTILITIES_H
|
#endif // UTILITIES_H
|
||||||
|
|
|
||||||
|
|
@ -482,3 +482,24 @@ char* get_file_content(char* path) {
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* get_file_content_with_size(char* path, size_t* size) {
|
||||||
|
if (!path || !size) return NULL;
|
||||||
|
|
||||||
|
FILE* file = fopen(path, "rb");
|
||||||
|
if (!file) { perror("ERROR: could not open file in get_file_content_with_size!"); return NULL; }
|
||||||
|
if (fseek(file, 0, SEEK_END) != 0) { fclose(file); return NULL; }
|
||||||
|
long file_size = ftell(file);
|
||||||
|
if (file_size < 0) { perror("ERROR: file size is negative in get_file_content_with_size!"); fclose(file); return NULL; }
|
||||||
|
if (fseek(file, 0, SEEK_SET) != 0) { fclose(file); return NULL; }
|
||||||
|
size_t n = (size_t)file_size;
|
||||||
|
|
||||||
|
char* buf = (char*)malloc(n);
|
||||||
|
if (!buf) { fclose(file); return NULL; }
|
||||||
|
|
||||||
|
size_t got = fread(buf, 1, n, file);
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
*size = got;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue