From bb1459fe29b5d6004bcdad6551242fa5f8319d00 Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Sat, 4 Apr 2026 21:58:33 -0400 Subject: fix: Fix padding issue Too much padding was added, instead of adding the remainder in padding, the amount written was added as padding. --- example/main.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++-------- example/test.mat | Bin 0 -> 320 bytes 2 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 example/test.mat (limited to 'example') diff --git a/example/main.c b/example/main.c index bda4c89..08d1894 100644 --- a/example/main.c +++ b/example/main.c @@ -3,7 +3,15 @@ #include #include -double floats[5] = {0.0, 1.0, 3.14, 2.72, 5.5}; +int nums[2][4] = { + {1, 2, 3, 4}, + {2, 4, 6, 8}, +}; + +double doubles[5] = {3.14, 2.72, 3.7, 22. / 7., 7.7}; + +void write_int_array(FILE *fp); +void write_double_array(FILE *fp); int main(void) { FILE *fp = fopen("test.mat", "w"); @@ -14,14 +22,57 @@ int main(void) { // Write File Header assert(write_header(fp)); + write_int_array(fp); + write_double_array(fp); + + fclose(fp); + return 0; +} + +void write_int_array(FILE *fp) { + // Array Flags + mArrayFlags_t flags; + memset(&flags, 0, sizeof(flags)); + flags.global = 0; + flags.complex = 0; + flags.logical = 0; + flags.class = mxINT32_CLASS; + + mData_t flags_data; + flags_data.tag.type = miUINT32; + flags_data.tag.size = 8; + flags_data.data = (void *)&flags; // Setup Array Dimensions - int32_t dims[2] = {1, 5}; + int32_t dims[2] = {4, 2}; mData_t dim_data; dim_data.data = (void *)&dims; dim_data.tag.type = miINT32; dim_data.tag.size = 8; + // Name + mSmallData_t name; + name.tag.type = miINT8; + name.tag.size = 1; + name.data = 'A'; + + mData_t data; + data.tag.type = miINT32; + data.tag.size = sizeof(nums); + data.data = (void *)nums; + + mTag_t array; + array.type = miMATRIX; + array.size = 80; + + fwrite((void *)&array, 1, sizeof(array), fp); + write_data(fp, flags_data); + write_data(fp, dim_data); + write_small_data(fp, name); + write_data(fp, data); +} + +void write_double_array(FILE *fp) { // Array Flags mArrayFlags_t flags; memset(&flags, 0, sizeof(flags)); @@ -35,16 +86,23 @@ int main(void) { flags_data.tag.size = 8; flags_data.data = (void *)&flags; + // Setup Array Dimensions + int32_t dims[2] = {1, 5}; + mData_t dim_data; + dim_data.data = (void *)&dims; + dim_data.tag.type = miINT32; + dim_data.tag.size = 8; + // Name - mSmallData_t name; + mData_t name; name.tag.type = miINT8; - name.tag.size = 1; - name.data = 'A'; + name.tag.size = 7; + name.data = "doubles"; mData_t data; data.tag.type = miDOUBLE; - data.tag.size = sizeof(floats); - data.data = (void *)floats; + data.tag.size = sizeof(doubles); + data.data = (void *)doubles; mTag_t array; array.type = miMATRIX; @@ -53,9 +111,6 @@ int main(void) { fwrite((void *)&array, 1, sizeof(array), fp); write_data(fp, flags_data); write_data(fp, dim_data); - write_small_data(fp, name); + write_data(fp, name); write_data(fp, data); - - fclose(fp); - return 0; } diff --git a/example/test.mat b/example/test.mat new file mode 100644 index 0000000..810c543 Binary files /dev/null and b/example/test.mat differ -- cgit v1.2.3