// // Copyright (c) 2026 Jacob McDonnell // // SPDX-License-Identifier: BSD-2-Clause // #include "matfile.h" #include #include #include static const char *const default_description = "MATLAB 5.0 MAT-file, Written By libMatfile, 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_tag(FILE *file, mTag_t tag) { if (file == NULL) { return false; } return (fwrite((const void *)&tag, 1, sizeof(tag), file) == sizeof(tag)); } bool write_data(FILE *file, const mData_t data) { if (data.data == NULL || file == 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, (8 - padding), file) == padding) && success; } return success; } bool write_small_data(FILE *file, const mSmallData_t data) { if (file == NULL) { return false; } const size_t w = fwrite((const void *)&data, 1, sizeof(data), file); return (w == sizeof(data)); }