From 8d8cc4cff8e5805292bca10b7c40247e1605fdca Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 01:09:25 -0600 Subject: [PATCH 01/18] Fix Windows build (fix #31) --- canfigger.c | 48 +++++++++++++++++++++++++++++++++++++----------- tests/test.h | 4 ++++ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/canfigger.c b/canfigger.c index 5170bc1..d26c76a 100644 --- a/canfigger.c +++ b/canfigger.c @@ -65,16 +65,25 @@ strdup_wrap_real(const char *argv, ...) char *retval = NULL; if (n == 0) // If n is 0, it means there was no second argument - retval = strdup(src); + { + retval = malloc(strlen(src) + 1); + if (retval) + strcpy(retval, src); + } else - retval = strndup(src, n); - + { + retval = malloc(n + 1); + if (retval) + { + memcpy(retval, src, n); + retval[n] = '\0'; + } + } va_end(args); - if (retval) - return retval; - perror("Failed to duplicate string:"); - return NULL; + if (!retval) + perror("Failed to duplicate string:"); + return retval; } @@ -362,9 +371,7 @@ canfigger_parse_file(const char *file, const int delimiter) if (buffer == NULL) return NULL; - char file_contents[strlen(buffer) + 1]; - memcpy(file_contents, buffer, sizeof file_contents); - free(buffer); + char *file_contents = buffer; struct line line; line.start = file_contents; @@ -375,7 +382,10 @@ canfigger_parse_file(const char *file, const int delimiter) while (line.end) { line.len = line.end - line.start; - char tmp_line[line.len + 1]; + char *tmp_line = malloc(line.len + 1); + if (tmp_line == NULL) + return NULL; + memcpy(tmp_line, line.start, line.len); tmp_line[line.len] = '\0'; @@ -393,18 +403,25 @@ canfigger_parse_file(const char *file, const int delimiter) line_ptr = erase_lead_char(*line_ptr, line_ptr); if (*line_ptr == '\0' || *line_ptr == '#' || *line_ptr == '[') + { + free(tmp_line); continue; + } node_complete = false; add_key_node(&root, &cur_node); if (!cur_node) + { + free(tmp_line); break; + } // Get key cur_node->key = NULL; line_ptr = grab_str_segment(line_ptr, &cur_node->key, '='); if (!cur_node->key) { + free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -417,6 +434,7 @@ canfigger_parse_file(const char *file, const int delimiter) line_ptr = grab_str_segment(line_ptr, &cur_node->value, delimiter); if (!cur_node->value) { + free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -428,6 +446,7 @@ canfigger_parse_file(const char *file, const int delimiter) cur_node->attributes = malloc_wrap(sizeof(struct attributes)); if (!cur_node->attributes) { + free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -438,6 +457,7 @@ canfigger_parse_file(const char *file, const int delimiter) attr_ptr->str = strdup_wrap(line_ptr); if (!attr_ptr->str) { + free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -458,16 +478,22 @@ canfigger_parse_file(const char *file, const int delimiter) cur_node->next = NULL; node_complete = true; + free(tmp_line); } if (!root) + { + free(file_contents); return NULL; + } if (!node_complete) { free_list(&root); + free(file_contents); return NULL; } + free(file_contents); return root; } diff --git a/tests/test.h b/tests/test.h index 35f4fa3..dc368b9 100644 --- a/tests/test.h +++ b/tests/test.h @@ -9,4 +9,8 @@ #include #include "canfigger.h" +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a)[0]) From 881e3fbf6bdcca1ec411e93c918e1780375763d4 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 01:24:14 -0600 Subject: [PATCH 02/18] Fix test linking, meson cleanup --- ChangeLog.txt | 4 ++++ meson.build | 5 +---- tests/meson.build | 7 +------ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 05a374d..e6f71b1 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,9 @@ # Canfigger ChangeLog +2024-11-11 + + * Fix Windows build + 2024-02-29 * release v0.3.0 diff --git a/meson.build b/meson.build index 20bced6..b42dae4 100644 --- a/meson.build +++ b/meson.build @@ -36,13 +36,10 @@ conf.set('CANFIGGER_VERSION_MINOR', minor_version) conf.set('CANFIGGER_VERSION_PATCH', patch_version) config_h = configure_file(output : 'config.h', configuration : conf) -inc = include_directories('.') - src = ('canfigger.c') buildtarget = library( meson.project_name(), src, - include_directories : inc, version : meson.project_version(), install: not meson.is_subproject() ) @@ -50,7 +47,7 @@ buildtarget = library( # How to use in a superproject and other info # https://mesonbuild.com/Subprojects.html canfigger_dep = declare_dependency( - include_directories : inc, + include_directories : include_directories('.'), link_with : buildtarget ) diff --git a/tests/meson.build b/tests/meson.build index 079886b..65fbd3b 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,7 +1,3 @@ -incdir = include_directories('..') - -main_lib = declare_dependency(link_with : buildtarget) - test_cases = [ 'colons', 'file_open_err', @@ -16,8 +12,7 @@ foreach case : test_cases exe = executable( 'test_' + case, case + '.c', - include_directories : incdir, - dependencies : [main_lib], + dependencies : [canfigger_dep], c_args: '-DSOURCE_DIR="@0@"'.format(meson.current_source_dir()) ) test(case, exe) From fd250a40797a0da17fa10cc9b7e605c761c233ab Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 13:23:01 -0600 Subject: [PATCH 03/18] Add def file (fix test linking) --- .github/workflows/windows.yml | 42 ++++++++++++++++++++++++++++++++++- canfigger.def | 7 ++++++ meson.build | 3 ++- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 canfigger.def diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index cd89f12..dbc1b45 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -61,4 +61,44 @@ jobs: run: meson compile -C builddir - name: Test - run: meson test -C builddir + run: | + meson test -v -C builddir || cat builddir\meson-logs\testlog.txt + + #MSYS2: + #runs-on: windows-latest + #strategy: + #fail-fast: false + #matrix: + #platform: ['UCRT64', 'CLANG64'] + #steps: + #- uses: actions/checkout@v4 + #with: + #fetch-depth: 0 + + #- uses: msys2/setup-msys2@v2 + #with: + #msystem: ${{matrix.platform}} + #install: >- + #bison + #dos2unix + #git + #pacboy: >- + #cc:p + #cmake:p + #ninja:p + #pkgconf:p + #python-certifi:p + #python-pip:p + ## Make sure Python is updated to >=3.11 (fix https://github.com/msys2/MINGW-packages/issues/17415). + #update: true + + #- name: Install packages + #shell: msys2 {0} + #run: | + #python -m pip install --pre meson + + #- name: Sanity Checks + #shell: msys2 {0} + #run: | + #python tools/sanity_checks.py + diff --git a/canfigger.def b/canfigger.def new file mode 100644 index 0000000..a82d3b5 --- /dev/null +++ b/canfigger.def @@ -0,0 +1,7 @@ +; canfigger.def +LIBRARY "canfigger" +EXPORTS + ; Export functions for use in other applications + canfigger_parse_file + canfigger_free_current_key_node_advance + canfigger_free_current_attr_str_advance diff --git a/meson.build b/meson.build index b42dae4..4161e08 100644 --- a/meson.build +++ b/meson.build @@ -41,7 +41,8 @@ buildtarget = library( meson.project_name(), src, version : meson.project_version(), - install: not meson.is_subproject() + install: not meson.is_subproject(), + vs_module_defs: 'canfigger.def' ) # How to use in a superproject and other info From 67bcf5142f99c6ae6a9c5b350ec81b2233d9c20c Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 14:24:37 -0600 Subject: [PATCH 04/18] Add win_subsystem: 'console' to exe builds --- meson.build | 1 + tests/meson.build | 1 + 2 files changed, 2 insertions(+) diff --git a/meson.build b/meson.build index 4161e08..acbd43f 100644 --- a/meson.build +++ b/meson.build @@ -57,6 +57,7 @@ if get_option('build_examples') 'example', 'example.c', dependencies: canfigger_dep, + win_subsystem: 'console', c_args: '-DSOURCE_DIR="@0@"'.format(meson.current_source_dir()) ) endif diff --git a/tests/meson.build b/tests/meson.build index 65fbd3b..38f3e60 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -13,6 +13,7 @@ foreach case : test_cases 'test_' + case, case + '.c', dependencies : [canfigger_dep], + win_subsystem: 'console', c_args: '-DSOURCE_DIR="@0@"'.format(meson.current_source_dir()) ) test(case, exe) From d2eb1a07563ed36a6d34c2472984b06156700f5e Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 17:22:32 -0600 Subject: [PATCH 05/18] Build static lib on Windows --- meson.build | 23 +++++++++++++++-------- tests/meson.build | 1 - 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/meson.build b/meson.build index acbd43f..3d625c8 100644 --- a/meson.build +++ b/meson.build @@ -37,13 +37,21 @@ conf.set('CANFIGGER_VERSION_PATCH', patch_version) config_h = configure_file(output : 'config.h', configuration : conf) src = ('canfigger.c') -buildtarget = library( - meson.project_name(), - src, - version : meson.project_version(), - install: not meson.is_subproject(), - vs_module_defs: 'canfigger.def' - ) +if build_machine.system() != 'windows' + buildtarget = library( + meson.project_name(), + src, + version : meson.project_version(), + install: not meson.is_subproject(), + ) +else + buildtarget = static_library( + meson.project_name(), + src, + install: not meson.is_subproject(), + # vs_module_defs: 'canfigger.def' + ) +endif # How to use in a superproject and other info # https://mesonbuild.com/Subprojects.html @@ -57,7 +65,6 @@ if get_option('build_examples') 'example', 'example.c', dependencies: canfigger_dep, - win_subsystem: 'console', c_args: '-DSOURCE_DIR="@0@"'.format(meson.current_source_dir()) ) endif diff --git a/tests/meson.build b/tests/meson.build index 38f3e60..65fbd3b 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -13,7 +13,6 @@ foreach case : test_cases 'test_' + case, case + '.c', dependencies : [canfigger_dep], - win_subsystem: 'console', c_args: '-DSOURCE_DIR="@0@"'.format(meson.current_source_dir()) ) test(case, exe) From 508667cd99ea13832f78b41432add0adec32db79 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 17:32:30 -0600 Subject: [PATCH 06/18] Replace va strdup func with strclone --- canfigger.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/canfigger.c b/canfigger.c index d26c76a..8587559 100644 --- a/canfigger.c +++ b/canfigger.c @@ -30,7 +30,6 @@ SOFTWARE. #include #include // free(), malloc() #include -#include // valist (variable argument function) // This is only required for version info and can be removed // if you're copying the canfigger source files to use as @@ -40,8 +39,6 @@ SOFTWARE. #include "canfigger.h" -#define strdup_wrap(...) strdup_wrap_real(__VA_ARGS__, (size_t)0) - static char *grab_str_segment(char *a, char **dest, const int c); static void free_list(struct Canfigger **node); @@ -56,34 +53,28 @@ struct line static char * -strdup_wrap_real(const char *argv, ...) +strclone(const char *src, size_t n) { - va_list args; - char *src = (char *) argv; - va_start(args, argv); - size_t n = va_arg(args, size_t); // Try to get the second argument - - char *retval = NULL; + char *dest = NULL; if (n == 0) // If n is 0, it means there was no second argument { - retval = malloc(strlen(src) + 1); - if (retval) - strcpy(retval, src); + dest = malloc(strlen(src) + 1); + if (dest) + strcpy(dest, src); } else { - retval = malloc(n + 1); - if (retval) + dest = malloc(n + 1); + if (dest) { - memcpy(retval, src, n); - retval[n] = '\0'; + memcpy(dest, src, n); + dest[n] = '\0'; } } - va_end(args); - if (!retval) - perror("Failed to duplicate string:"); - return retval; + if (!dest) + perror("malloc (canfigger)"); + return dest; } @@ -242,12 +233,12 @@ grab_str_segment(char *a, char **dest, const int c) char *b = strchr(a, c); if (!b) { - *dest = strdup_wrap(a); + *dest = strclone(a, 0); return b; // NULL } size_t len = b - a; - *dest = strdup_wrap(a, len); + *dest = strclone(a, len); if (!*dest) return NULL; @@ -454,7 +445,7 @@ canfigger_parse_file(const char *file, const int delimiter) struct attributes *attr_ptr = cur_node->attributes; attr_ptr->current = NULL; - attr_ptr->str = strdup_wrap(line_ptr); + attr_ptr->str = strclone(line_ptr, 0); if (!attr_ptr->str) { free(tmp_line); From d48d6454354a10ea92b6118853083298e0cc1fff Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 17:46:53 -0600 Subject: [PATCH 07/18] fopen conf files in binary mode --- canfigger.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/canfigger.c b/canfigger.c index 8587559..b1c304c 100644 --- a/canfigger.c +++ b/canfigger.c @@ -279,7 +279,7 @@ add_key_node(struct Canfigger **root, struct Canfigger **cur_node) static char * read_entire_file(const char *filename) { - FILE *fp = fopen(filename, "r"); + FILE *fp = fopen(filename, "rb"); if (!fp) { fprintf(stderr, "Failed to open %s: %s\n", filename, strerror(errno)); From 9203e8b43d0df8df66cb7d42c11cd1a14e056024 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 17:51:12 -0600 Subject: [PATCH 08/18] multiply timeout by 2, and quieter test output --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dbc1b45..2c7a04f 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -62,7 +62,7 @@ jobs: - name: Test run: | - meson test -v -C builddir || cat builddir\meson-logs\testlog.txt + meson test -t 2 -C builddir || cat builddir\meson-logs\testlog.txt #MSYS2: #runs-on: windows-latest From 935e07ae930d707ffe704fca9dc29b16f4c4267b Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 18:44:27 -0600 Subject: [PATCH 09/18] use stat to get file size --- canfigger.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/canfigger.c b/canfigger.c index b1c304c..951aa34 100644 --- a/canfigger.c +++ b/canfigger.c @@ -26,6 +26,7 @@ SOFTWARE. #include // isspace() #include +#include #include #include #include // free(), malloc() @@ -286,8 +287,15 @@ read_entire_file(const char *filename) return NULL; } - fseek(fp, 0, SEEK_END); - long file_size = ftell(fp); + //fseek(fp, 0, SEEK_END); + //long file_size = ftell(fp); + long file_size = -1; + struct stat st; + if (stat(filename, &st) == 0) + file_size = st.st_size; + else + perror("stat failed"); + if (file_size < 0) { fprintf(stderr, "Error getting the size of %s: %s\n", filename, From e40643f1921114785d933d77d82413edf7881369 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 11 Nov 2024 22:40:47 -0600 Subject: [PATCH 10/18] Try reading file in chunks --- canfigger.c | 73 +++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/canfigger.c b/canfigger.c index 951aa34..f9b4919 100644 --- a/canfigger.c +++ b/canfigger.c @@ -287,56 +287,53 @@ read_entire_file(const char *filename) return NULL; } - //fseek(fp, 0, SEEK_END); - //long file_size = ftell(fp); - long file_size = -1; - struct stat st; - if (stat(filename, &st) == 0) - file_size = st.st_size; - else - perror("stat failed"); + const size_t chunkSize = 1024; + char *buffer = NULL; + size_t bufferSize = 0; + size_t bytesRead; - if (file_size < 0) + do { - fprintf(stderr, "Error getting the size of %s: %s\n", filename, - strerror(errno)); - fclose(fp); - return NULL; - } - fseek(fp, 0, SEEK_SET); + char tempBuffer[chunkSize]; + bytesRead = fread(tempBuffer, 1, chunkSize, fp); - char *buffer = malloc_wrap(file_size + 1); - if (!buffer) - { - fclose(fp); - return NULL; - } + if (bytesRead > 0) + { + // Reallocate buffer to accommodate new data plus a null terminator + char *newBuffer = realloc(buffer, bufferSize + bytesRead + 1); + if (!newBuffer) + { + free(buffer); + perror("Failed to allocate memory"); + fclose(fp); + return NULL; + } + buffer = newBuffer; - size_t n_bytes = fread(buffer, 1, file_size, fp); + // Append the read data to the end of the buffer + memcpy(buffer + bufferSize, tempBuffer, bytesRead); + bufferSize += bytesRead; + } + } + while (bytesRead == chunkSize); if (ferror(fp)) { - fprintf(stderr, "Error reading %s: %s\n", filename, strerror(errno)); free(buffer); + perror("Error reading file"); fclose(fp); return NULL; } - // Note that if the return value of ftell() is -1 this cast would be bad. - // However, above, the return value of ftell() is checked, and the function - // returns if the value is < 0 - if (n_bytes == (size_t) file_size) + fclose(fp); + + // Null-terminate the buffer + if (buffer) { - buffer[file_size] = '\0'; - fclose(fp); - return buffer; + buffer[bufferSize] = '\0'; } - free(buffer); - fprintf(stderr, "Partial read of %s: expected %ld bytes, got %zu bytes\n", - filename, file_size, n_bytes); - fclose(fp); - return NULL; + return buffer; } @@ -366,12 +363,10 @@ canfigger_parse_file(const char *file, const int delimiter) { struct Canfigger *root = NULL, *cur_node = NULL; - char *buffer = read_entire_file(file); - if (buffer == NULL) + char *file_contents = read_entire_file(file); + if (file_contents == NULL) return NULL; - char *file_contents = buffer; - struct line line; line.start = file_contents; line.end = strchr(line.start, '\n'); From e81e0b9da6c3cd482e2096e3dfae5fd951c659d5 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Tue, 12 Nov 2024 14:17:05 -0600 Subject: [PATCH 11/18] Revert "Try reading file in chunks" This reverts commit ae04f8049e6be2e0057163a161cb8dbd42b4895f. --- canfigger.c | 73 ++++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/canfigger.c b/canfigger.c index f9b4919..951aa34 100644 --- a/canfigger.c +++ b/canfigger.c @@ -287,53 +287,56 @@ read_entire_file(const char *filename) return NULL; } - const size_t chunkSize = 1024; - char *buffer = NULL; - size_t bufferSize = 0; - size_t bytesRead; + //fseek(fp, 0, SEEK_END); + //long file_size = ftell(fp); + long file_size = -1; + struct stat st; + if (stat(filename, &st) == 0) + file_size = st.st_size; + else + perror("stat failed"); - do + if (file_size < 0) { - char tempBuffer[chunkSize]; - bytesRead = fread(tempBuffer, 1, chunkSize, fp); - - if (bytesRead > 0) - { - // Reallocate buffer to accommodate new data plus a null terminator - char *newBuffer = realloc(buffer, bufferSize + bytesRead + 1); - if (!newBuffer) - { - free(buffer); - perror("Failed to allocate memory"); - fclose(fp); - return NULL; - } - buffer = newBuffer; + fprintf(stderr, "Error getting the size of %s: %s\n", filename, + strerror(errno)); + fclose(fp); + return NULL; + } + fseek(fp, 0, SEEK_SET); - // Append the read data to the end of the buffer - memcpy(buffer + bufferSize, tempBuffer, bytesRead); - bufferSize += bytesRead; - } + char *buffer = malloc_wrap(file_size + 1); + if (!buffer) + { + fclose(fp); + return NULL; } - while (bytesRead == chunkSize); + + size_t n_bytes = fread(buffer, 1, file_size, fp); if (ferror(fp)) { + fprintf(stderr, "Error reading %s: %s\n", filename, strerror(errno)); free(buffer); - perror("Error reading file"); fclose(fp); return NULL; } - fclose(fp); - - // Null-terminate the buffer - if (buffer) + // Note that if the return value of ftell() is -1 this cast would be bad. + // However, above, the return value of ftell() is checked, and the function + // returns if the value is < 0 + if (n_bytes == (size_t) file_size) { - buffer[bufferSize] = '\0'; + buffer[file_size] = '\0'; + fclose(fp); + return buffer; } - return buffer; + free(buffer); + fprintf(stderr, "Partial read of %s: expected %ld bytes, got %zu bytes\n", + filename, file_size, n_bytes); + fclose(fp); + return NULL; } @@ -363,10 +366,12 @@ canfigger_parse_file(const char *file, const int delimiter) { struct Canfigger *root = NULL, *cur_node = NULL; - char *file_contents = read_entire_file(file); - if (file_contents == NULL) + char *buffer = read_entire_file(file); + if (buffer == NULL) return NULL; + char *file_contents = buffer; + struct line line; line.start = file_contents; line.end = strchr(line.start, '\n'); From c142c087c0d154aebe9bdf601cfabfe1bef1f683 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Tue, 12 Nov 2024 14:17:23 -0600 Subject: [PATCH 12/18] Revert "use stat to get file size" This reverts commit 1ea37d894c0e81a350c60a155128e5f1aae889e9. --- canfigger.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/canfigger.c b/canfigger.c index 951aa34..b1c304c 100644 --- a/canfigger.c +++ b/canfigger.c @@ -26,7 +26,6 @@ SOFTWARE. #include // isspace() #include -#include #include #include #include // free(), malloc() @@ -287,15 +286,8 @@ read_entire_file(const char *filename) return NULL; } - //fseek(fp, 0, SEEK_END); - //long file_size = ftell(fp); - long file_size = -1; - struct stat st; - if (stat(filename, &st) == 0) - file_size = st.st_size; - else - perror("stat failed"); - + fseek(fp, 0, SEEK_END); + long file_size = ftell(fp); if (file_size < 0) { fprintf(stderr, "Error getting the size of %s: %s\n", filename, From feef143fc0028e72c21a80d2f401b7262e6d198b Mon Sep 17 00:00:00 2001 From: andy5995 Date: Tue, 12 Nov 2024 14:23:05 -0600 Subject: [PATCH 13/18] Remove stupid condition that uses static library function --- .github/workflows/windows.yml | 6 ++---- meson.build | 9 --------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 2c7a04f..57c5103 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -32,8 +32,6 @@ jobs: platform: ['x64', 'x86'] steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Install a 32-bit Python so building related stuff work. - name: Setup x86 Python @@ -55,14 +53,14 @@ jobs: with: arch: ${{matrix.platform}} - name: Configure - run: meson setup builddir -Db_sanitize=none + run: meson setup builddir -Ddefault_library=static -Db_sanitize=none - name: Build run: meson compile -C builddir - name: Test run: | - meson test -t 2 -C builddir || cat builddir\meson-logs\testlog.txt + meson test -C builddir || cat builddir\meson-logs\testlog.txt #MSYS2: #runs-on: windows-latest diff --git a/meson.build b/meson.build index 3d625c8..ff74507 100644 --- a/meson.build +++ b/meson.build @@ -37,21 +37,12 @@ conf.set('CANFIGGER_VERSION_PATCH', patch_version) config_h = configure_file(output : 'config.h', configuration : conf) src = ('canfigger.c') -if build_machine.system() != 'windows' buildtarget = library( meson.project_name(), src, version : meson.project_version(), install: not meson.is_subproject(), ) -else - buildtarget = static_library( - meson.project_name(), - src, - install: not meson.is_subproject(), - # vs_module_defs: 'canfigger.def' - ) -endif # How to use in a superproject and other info # https://mesonbuild.com/Subprojects.html From 8cd90a157aa2e76b45dd6b919c35430110d9a8d8 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Tue, 12 Nov 2024 14:49:06 -0600 Subject: [PATCH 14/18] windows.yml: Add msys2; remove msvc --- .github/workflows/windows.yml | 131 +++++++++++++++++----------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 57c5103..09f5a5c 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -24,79 +24,80 @@ on: - '**/windows.yml' jobs: - VisualStudio: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - platform: ['x64', 'x86'] - steps: - - uses: actions/checkout@v4 + MSYS2: + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + platform: ['UCRT64', 'CLANG64'] + steps: + - uses: actions/checkout@v4 - # Install a 32-bit Python so building related stuff work. - - name: Setup x86 Python - if: matrix.platform == 'x86' - uses: actions/setup-python@v5 - with: - architecture: 'x86' - python-version: '3.12' + - uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.platform}} + pacboy: >- + cc:p + cmake:p + ninja:p + pkgconf:p + python-certifi:p + python-pip:p + # Make sure Python is updated to >=3.11 (fix https://github.com/msys2/MINGW-packages/issues/17415). + update: true - # https://github.com/actions/runner-images/issues/5459#issuecomment-1532856844 - - name: Remove bad Strawberry Perl patch binary in search path - run: del C:\Strawberry\c\bin\patch.EXE + - name: Install packages + shell: msys2 {0} + run: | + python -m pip install --pre meson - - name: Install packages - run: | - python -m pip install --pre meson + - name: Configure + shell: msys2 {0} + run: meson setup builddir -Ddefault_library=static -Db_sanitize=none - - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{matrix.platform}} - - name: Configure - run: meson setup builddir -Ddefault_library=static -Db_sanitize=none + - name: Build + shell: msys2 {0} + run: meson compile -C builddir - - name: Build - run: meson compile -C builddir + - name: Test + shell: msys2 {0} + run: meson test -C builddir || cat builddir\meson-logs\testlog.txt - - name: Test - run: | - meson test -C builddir || cat builddir\meson-logs\testlog.txt + # https://github.com/andy5995/canfigger/issues/31 + #VisualStudio: + #runs-on: windows-latest + #strategy: + #fail-fast: false + #matrix: + #platform: ['x64', 'x86'] + #steps: + #- uses: actions/checkout@v4 - #MSYS2: - #runs-on: windows-latest - #strategy: - #fail-fast: false - #matrix: - #platform: ['UCRT64', 'CLANG64'] - #steps: - #- uses: actions/checkout@v4 - #with: - #fetch-depth: 0 + ## Install a 32-bit Python so building related stuff work. + #- name: Setup x86 Python + #if: matrix.platform == 'x86' + #uses: actions/setup-python@v5 + #with: + #architecture: 'x86' + #python-version: '3.12' - #- uses: msys2/setup-msys2@v2 - #with: - #msystem: ${{matrix.platform}} - #install: >- - #bison - #dos2unix - #git - #pacboy: >- - #cc:p - #cmake:p - #ninja:p - #pkgconf:p - #python-certifi:p - #python-pip:p - ## Make sure Python is updated to >=3.11 (fix https://github.com/msys2/MINGW-packages/issues/17415). - #update: true + ## https://github.com/actions/runner-images/issues/5459#issuecomment-1532856844 + #- name: Remove bad Strawberry Perl patch binary in search path + #run: del C:\Strawberry\c\bin\patch.EXE - #- name: Install packages - #shell: msys2 {0} - #run: | - #python -m pip install --pre meson + #- name: Install packages + #run: | + #python -m pip install --pre meson - #- name: Sanity Checks - #shell: msys2 {0} - #run: | - #python tools/sanity_checks.py + #- uses: ilammy/msvc-dev-cmd@v1 + #with: + #arch: ${{matrix.platform}} + #- name: Configure + #run: meson setup builddir -Ddefault_library=static -Db_sanitize=none + #- name: Build + #run: meson compile -C builddir + + #- name: Test + #run: | + #meson test -C builddir || cat builddir\meson-logs\testlog.txt From 13bf4163fe147e346be8da050ff30d54cce66646 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sun, 5 Jan 2025 23:48:53 -0600 Subject: [PATCH 15/18] Use VLA (partial revert) --- canfigger.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/canfigger.c b/canfigger.c index b1c304c..538bc7d 100644 --- a/canfigger.c +++ b/canfigger.c @@ -362,7 +362,9 @@ canfigger_parse_file(const char *file, const int delimiter) if (buffer == NULL) return NULL; - char *file_contents = buffer; + char file_contents[strlen(buffer) + 1]; + memcpy(file_contents, buffer, sizeof file_contents); + free(buffer); struct line line; line.start = file_contents; @@ -373,9 +375,7 @@ canfigger_parse_file(const char *file, const int delimiter) while (line.end) { line.len = line.end - line.start; - char *tmp_line = malloc(line.len + 1); - if (tmp_line == NULL) - return NULL; + char tmp_line[line.len + 1]; memcpy(tmp_line, line.start, line.len); tmp_line[line.len] = '\0'; @@ -394,25 +394,18 @@ canfigger_parse_file(const char *file, const int delimiter) line_ptr = erase_lead_char(*line_ptr, line_ptr); if (*line_ptr == '\0' || *line_ptr == '#' || *line_ptr == '[') - { - free(tmp_line); continue; - } node_complete = false; add_key_node(&root, &cur_node); if (!cur_node) - { - free(tmp_line); break; - } // Get key cur_node->key = NULL; line_ptr = grab_str_segment(line_ptr, &cur_node->key, '='); if (!cur_node->key) { - free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -425,7 +418,6 @@ canfigger_parse_file(const char *file, const int delimiter) line_ptr = grab_str_segment(line_ptr, &cur_node->value, delimiter); if (!cur_node->value) { - free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -437,7 +429,6 @@ canfigger_parse_file(const char *file, const int delimiter) cur_node->attributes = malloc_wrap(sizeof(struct attributes)); if (!cur_node->attributes) { - free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -448,7 +439,6 @@ canfigger_parse_file(const char *file, const int delimiter) attr_ptr->str = strclone(line_ptr, 0); if (!attr_ptr->str) { - free(tmp_line); free_incomplete_node(&cur_node); break; } @@ -469,22 +459,16 @@ canfigger_parse_file(const char *file, const int delimiter) cur_node->next = NULL; node_complete = true; - free(tmp_line); } if (!root) - { - free(file_contents); return NULL; - } if (!node_complete) { free_list(&root); - free(file_contents); return NULL; } - free(file_contents); return root; } From 62da987ff764206e42effed30ef1d00ed115b595 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Sun, 5 Jan 2025 23:56:41 -0600 Subject: [PATCH 16/18] remove some useless comments [skip ci] --- canfigger.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/canfigger.c b/canfigger.c index 538bc7d..9994b8c 100644 --- a/canfigger.c +++ b/canfigger.c @@ -56,7 +56,7 @@ static char * strclone(const char *src, size_t n) { char *dest = NULL; - if (n == 0) // If n is 0, it means there was no second argument + if (n == 0) { dest = malloc(strlen(src) + 1); if (dest) @@ -234,7 +234,7 @@ grab_str_segment(char *a, char **dest, const int c) if (!b) { *dest = strclone(a, 0); - return b; // NULL + return b; } size_t len = b - a; From f0dcc1dd42bb8aa06efaa0f10280543795246665 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 6 Jan 2025 00:01:58 -0600 Subject: [PATCH 17/18] Remove unused vs_module_defs file --- canfigger.def | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 canfigger.def diff --git a/canfigger.def b/canfigger.def deleted file mode 100644 index a82d3b5..0000000 --- a/canfigger.def +++ /dev/null @@ -1,7 +0,0 @@ -; canfigger.def -LIBRARY "canfigger" -EXPORTS - ; Export functions for use in other applications - canfigger_parse_file - canfigger_free_current_key_node_advance - canfigger_free_current_attr_str_advance From ae20cd7140713788b50d04aaee5d7bc787a800c9 Mon Sep 17 00:00:00 2001 From: andy5995 Date: Mon, 6 Jan 2025 00:03:47 -0600 Subject: [PATCH 18/18] Update ChangeLog [skip ci] --- ChangeLog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index e6f71b1..841ff6d 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,6 @@ # Canfigger ChangeLog -2024-11-11 +2025-01-06 * Fix Windows build