aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/io_moves.h23
-rw-r--r--src/solvers/solutions.h9
-rw-r--r--test/130_appendsolution/09_fullinverse_niss.in5
-rw-r--r--test/130_appendsolution/09_fullinverse_niss.out4
4 files changed, 23 insertions, 18 deletions
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(
79 char buf[buf_size] 79 char buf[buf_size]
80) 80)
81{ 81{
82 size_t i, len, written; 82 size_t i, len, w;
83 const char *s; 83 const char *s;
84 char *b;
85 84
86 if (buf_size == 0) { 85 if (buf_size == 0) {
87 LOG("Error: cannot write moves to buffer of size 0.\n"); 86 LOG("Error: cannot write moves to buffer of size 0.\n");
88 return NISSY_ERROR_BUFFER_SIZE; 87 return NISSY_ERROR_BUFFER_SIZE;
89 } 88 }
90 89
91 for (i = 0, b = buf, written = 0; i < nmoves; i++, b++, written++) { 90 for (i = 0, w = 0; i < nmoves; i++, w++) {
92 s = movestr[m[i]]; 91 s = movestr[m[i]];
93 len = strlen(s); 92 len = strlen(s);
94 if (len + written >= buf_size) { 93 if (len + w >= buf_size) {
95 LOG("Error: the given buffer is too small for " 94 LOG("Error: the given buffer is too small for "
96 "writing the given moves.\n"); 95 "writing the given moves.\n");
97 goto writemoves_error; 96 goto writemoves_error;
98 } 97 }
99 memcpy(b, s, len); 98 memcpy(buf+w, s, len);
100 written += len; 99 w += len;
101 b += len; 100 buf[w] = ' ';
102 *b = ' ';
103 } 101 }
104 102
105 if (b == buf) 103 if (w > 0) w--; /* Remove last space */
106 written = 1; /* Nothing written, only NULL-terminator */ 104 buf[w] = '\0';
107 else
108 b--; /* Remove last space */
109 *b = '\0';
110 105
111 return (int64_t)written; 106 return (int64_t)w;
112 107
113writemoves_error: 108writemoves_error:
114 *buf = '\0'; 109 *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(
152 list->size - list->used, list->buf + list->used); 152 list->size - list->used, list->buf + list->used);
153 if (strl < 0) 153 if (strl < 0)
154 goto appendsolution_error_buffer; 154 goto appendsolution_error_buffer;
155 list->used += (size_t)(strl-1); 155 list->used += strl;
156 156
157 /* Write moves on inverse with NISS notation */ 157 /* Write moves on inverse with NISS notation */
158 if (tsol[r].npremoves > 0) { 158 if (tsol[r].npremoves > 0) {
159 if (!appendchar(list, ' ')) 159 if (strl > 0)
160 goto appendsolution_error_buffer; 160 if (!appendchar(list, ' '))
161 goto appendsolution_error_buffer;
161 if (!appendchar(list, '(')) 162 if (!appendchar(list, '('))
162 goto appendsolution_error_buffer; 163 goto appendsolution_error_buffer;
163 164
@@ -165,7 +166,7 @@ appendsolution(
165 list->size - list->used, list->buf + list->used); 166 list->size - list->used, list->buf + list->used);
166 if (strl < 0) 167 if (strl < 0)
167 goto appendsolution_error_buffer; 168 goto appendsolution_error_buffer;
168 list->used += (size_t)(strl-1); 169 list->used += strl;
169 170
170 if (!appendchar(list, ')')) 171 if (!appendchar(list, ')'))
171 goto appendsolution_error_buffer; 172 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 @@
1
2F
30
41
5rotation 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 @@
1(F)
2Number of solutions: 1
3Shortest solution length: 1
4Used bytes: 4

Generated with cgit - Back to sebastiano.tronto.net