files.c (1843B)
1#include <stdio.h> 2#include <stdbool.h> 3#include <stdint.h> 4#include <stdlib.h> 5 6 7 8// Read from a file into a buffer (will allocate needed memory) 9// Returns NULL if reading file didn't succeed 10uint8_t * file_read_into_buffer(char * filename, uint32_t *ret_size) { 11 12 long fsize; 13 FILE * file_in = fopen(filename, "rb"); 14 uint8_t * filedata = NULL; 15 16 if (file_in) { 17 // Get file size 18 fseek(file_in, 0, SEEK_END); 19 fsize = ftell(file_in); 20 if (fsize != -1L) { 21 fseek(file_in, 0, SEEK_SET); 22 23 filedata = malloc(fsize); 24 if (filedata) { 25 if (fsize != fread(filedata, 1, fsize, file_in)) { 26 printf("makecom: Warning: File read size didn't match expected for %s\n", filename); 27 filedata = NULL; 28 } 29 // Read was successful, set return size 30 *ret_size = fsize; 31 } else printf("makecom: ERROR: Failed to allocate memory to read file %s\n", filename); 32 33 } else printf("makecom: ERROR: Failed to read size of file %s\n", filename); 34 35 fclose(file_in); 36 } else printf("makecom: ERROR: Failed to open input file %s\n", filename); 37 38 return filedata; 39} 40 41 42 43// Writes a buffer to a file 44bool file_write_from_buffer(char * filename, uint8_t * p_buf, uint32_t data_len) { 45 46 bool status = false; 47 size_t wrote_bytes; 48 FILE * file_out = fopen(filename, "wb"); 49 if (file_out) { 50 if (data_len == fwrite(p_buf, 1, data_len, file_out)) 51 status = true; 52 else 53 printf("makecom: Warning: File write size didn't match expected for %s\n", filename); 54 55 fclose(file_out); 56 } else { 57 printf("makecom: ERROR: Failed to open output file %s!\n",filename); 58 exit(EXIT_FAILURE); 59 } 60 61 return status; 62}