1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include "matfile.h"
#include <stdlib.h>
#include <string.h>
#include <time.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, (8 - 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));
}
|