diff options
Diffstat (limited to 'src/matfile.c')
| -rw-r--r-- | src/matfile.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/matfile.c b/src/matfile.c new file mode 100644 index 0000000..188e14f --- /dev/null +++ b/src/matfile.c @@ -0,0 +1,52 @@ +#include "matfile.h" +#include <string.h> +#include <time.h> +#include <stdlib.h> + +static const char *const default_description = "MATLAB 5.0 MAT-file, Created on: "; + +bool write_header(FILE *file) { + if (file == NULL) { + return false; + } + + mHeader_t header; + memset((void *)&header, 0, sizeof(header)); + memset((void *)header.description, ' ', sizeof(header.description)); + + time_t t = time(NULL); + const char *const strtime = ctime(&t); + + snprintf(header.description, sizeof(header.description), "%s%s", default_description, strtime); + + header.version = 0x0100; + header.endian_indicator = (('M' << 8) | 'I'); + + const size_t status = fwrite((const void *)&header, 1, sizeof(header), file); + + return (status == sizeof(header)); +} + +bool write_data(FILE *file, const mData_t data) { + if (data.data == NULL) { + return false; + } + + bool success = true; + success = (fwrite((const void *)&data.tag, 1, sizeof(data.tag), file) == sizeof(data.tag)) && success; + success = (fwrite(data.data, 1, data.tag.size, file) == data.tag.size) && success; + + const size_t padding = data.tag.size % 8; + const uint8_t padding_buffer[8] = {0}; + if (padding > 0 && success) { + success = (fwrite((const void *)padding_buffer, 1, padding, file) == padding) && success; + } + + return success; +} + +bool write_small_data(FILE *file, const mSmallData_t data) { + const size_t w = fwrite((const void *)&data, 1, sizeof(data), file); + + return (w == sizeof(data)); +}
\ No newline at end of file |
