From 0f4931c8de298b0f97aba1757c9538f48adb30c6 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Tue, 25 Mar 2025 15:17:00 +0100 Subject: Tiny bugfix in solution writing --- src/core/io_moves.h | 23 +++++++++-------------- src/solvers/solutions.h | 9 +++++---- test/130_appendsolution/09_fullinverse_niss.in | 5 +++++ test/130_appendsolution/09_fullinverse_niss.out | 4 ++++ 4 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 test/130_appendsolution/09_fullinverse_niss.in create mode 100644 test/130_appendsolution/09_fullinverse_niss.out diff --git a/src/core/io_moves.h b/src/core/io_moves.h index 8c56a9f..b00682b 100644 --- a/src/core/io_moves.h +++ b/src/core/io_moves.h @@ -79,36 +79,31 @@ writemoves( char buf[buf_size] ) { - size_t i, len, written; + size_t i, len, w; const char *s; - char *b; if (buf_size == 0) { LOG("Error: cannot write moves to buffer of size 0.\n"); return NISSY_ERROR_BUFFER_SIZE; } - for (i = 0, b = buf, written = 0; i < nmoves; i++, b++, written++) { + for (i = 0, w = 0; i < nmoves; i++, w++) { s = movestr[m[i]]; len = strlen(s); - if (len + written >= buf_size) { + if (len + w >= buf_size) { LOG("Error: the given buffer is too small for " "writing the given moves.\n"); goto writemoves_error; } - memcpy(b, s, len); - written += len; - b += len; - *b = ' '; + memcpy(buf+w, s, len); + w += len; + buf[w] = ' '; } - if (b == buf) - written = 1; /* Nothing written, only NULL-terminator */ - else - b--; /* Remove last space */ - *b = '\0'; + if (w > 0) w--; /* Remove last space */ + buf[w] = '\0'; - return (int64_t)written; + return (int64_t)w; writemoves_error: *buf = '\0'; diff --git a/src/solvers/solutions.h b/src/solvers/solutions.h index d8e1954..bbff9cf 100644 --- a/src/solvers/solutions.h +++ b/src/solvers/solutions.h @@ -152,12 +152,13 @@ appendsolution( list->size - list->used, list->buf + list->used); if (strl < 0) goto appendsolution_error_buffer; - list->used += (size_t)(strl-1); + list->used += strl; /* Write moves on inverse with NISS notation */ if (tsol[r].npremoves > 0) { - if (!appendchar(list, ' ')) - goto appendsolution_error_buffer; + if (strl > 0) + if (!appendchar(list, ' ')) + goto appendsolution_error_buffer; if (!appendchar(list, '(')) goto appendsolution_error_buffer; @@ -165,7 +166,7 @@ appendsolution( list->size - list->used, list->buf + list->used); if (strl < 0) goto appendsolution_error_buffer; - list->used += (size_t)(strl-1); + list->used += strl; if (!appendchar(list, ')')) goto appendsolution_error_buffer; diff --git a/test/130_appendsolution/09_fullinverse_niss.in b/test/130_appendsolution/09_fullinverse_niss.in new file mode 100644 index 0000000..33f0a26 --- /dev/null +++ b/test/130_appendsolution/09_fullinverse_niss.in @@ -0,0 +1,5 @@ + +F +0 +1 +rotation UF diff --git a/test/130_appendsolution/09_fullinverse_niss.out b/test/130_appendsolution/09_fullinverse_niss.out new file mode 100644 index 0000000..9721085 --- /dev/null +++ b/test/130_appendsolution/09_fullinverse_niss.out @@ -0,0 +1,4 @@ +(F) +Number of solutions: 1 +Shortest solution length: 1 +Used bytes: 4 -- cgit v1.3