diff --git a/m-serial-json.h b/m-serial-json.h index 1e0f8cfe..a3efb705 100644 --- a/m-serial-json.h +++ b/m-serial-json.h @@ -258,13 +258,11 @@ static inline m_serial_return_code_t m_serial_json_read_array_start(m_serial_read_t serial, size_t *num) { FILE *f = (FILE*) serial->data[0]; - int final = -1; - fscanf(f, " [%n", &final); + int final1 = -1, final2 = -1; + fscanf(f, " [%n ]%n", &final1, &final2); *num = 0; // don't know the size of the array. - if (final < 0) return M_SERIAL_FAIL; - final = -1; - fscanf(f, " ]%n", &final); - return final > 0 ? M_SERIAL_OK_DONE : M_SERIAL_OK_CONTINUE; + // Test how much the parsing succeed. + return (final1 < 0) ? M_SERIAL_FAIL : (final2 < 0) ? M_SERIAL_OK_CONTINUE : M_SERIAL_OK_DONE; } static inline m_serial_return_code_t @@ -280,13 +278,11 @@ static inline m_serial_return_code_t m_serial_json_read_map_start(m_serial_read_t serial, size_t *num) { FILE *f = (FILE*) serial->data[0]; - int final = -1; - fscanf(f, " {%n", &final); + int final1 = -1, final2 = -1; + fscanf(f, " {%n }%n", &final1, &final2); *num = 0; // don't know the size of the map. - if (final < 0) return M_SERIAL_FAIL; - final = -1; - fscanf(f, " }%n", &final); - return final > 0 ? M_SERIAL_OK_DONE : M_SERIAL_OK_CONTINUE; + // Test how much the parsing succeed. + return (final1 < 0) ? M_SERIAL_FAIL : (final2 < 0) ? M_SERIAL_OK_CONTINUE : M_SERIAL_OK_DONE; } static inline m_serial_return_code_t