Fix issues for EOF & parsing arrays
This commit is contained in:
1 parent
5c4c93b62f
commit
aeebe42bfb
1 file changed
+13
-5
+13
-5
@@ -259,9 +259,12 @@ m_serial_json_read_array_start(m_serial_read_t serial, size_t *num)
|
|||||||
{
|
{
|
||||||
FILE *f = (FILE*) serial->data[0];
|
FILE *f = (FILE*) serial->data[0];
|
||||||
int final = -1;
|
int final = -1;
|
||||||
fscanf(f, " {%n", &final);
|
fscanf(f, " [%n", &final);
|
||||||
*num = -1U;
|
*num = 0; // don't know the size of the array.
|
||||||
return final > 0 ? M_SERIAL_OK_CONTINUE : M_SERIAL_FAIL;
|
if (final < 0) return M_SERIAL_FAIL;
|
||||||
|
final = -1;
|
||||||
|
fscanf(f, " ]%n", &final);
|
||||||
|
return final > 0 ? M_SERIAL_OK_DONE : M_SERIAL_OK_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline m_serial_return_code_t
|
static inline m_serial_return_code_t
|
||||||
@@ -279,8 +282,11 @@ m_serial_json_read_map_start(m_serial_read_t serial, size_t *num)
|
|||||||
FILE *f = (FILE*) serial->data[0];
|
FILE *f = (FILE*) serial->data[0];
|
||||||
int final = -1;
|
int final = -1;
|
||||||
fscanf(f, " {%n", &final);
|
fscanf(f, " {%n", &final);
|
||||||
*num = -1U;
|
*num = 0; // don't know the size of the map.
|
||||||
return final > 0 ? M_SERIAL_OK_CONTINUE : M_SERIAL_FAIL;
|
if (final < 0) return M_SERIAL_FAIL;
|
||||||
|
final = -1;
|
||||||
|
fscanf(f, " }%n", &final);
|
||||||
|
return final > 0 ? M_SERIAL_OK_DONE : M_SERIAL_OK_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline m_serial_return_code_t
|
static inline m_serial_return_code_t
|
||||||
@@ -314,6 +320,7 @@ static inline m_serial_return_code_t
|
|||||||
m_serial_json_read_tuple_id(m_serial_read_t serial, const char *const field_name [], const int max, int *id){
|
m_serial_json_read_tuple_id(m_serial_read_t serial, const char *const field_name [], const int max, int *id){
|
||||||
FILE *f = (FILE*) serial->data[0];
|
FILE *f = (FILE*) serial->data[0];
|
||||||
int c = m_serial_json_read_skip(f);
|
int c = m_serial_json_read_skip(f);
|
||||||
|
if (c == EOF) return M_SERIAL_FAIL;
|
||||||
if (c == '}') return M_SERIAL_OK_DONE;
|
if (c == '}') return M_SERIAL_OK_DONE;
|
||||||
if (c == ',') {
|
if (c == ',') {
|
||||||
// If first call of read_tuple_id, it is a failure
|
// If first call of read_tuple_id, it is a failure
|
||||||
@@ -343,6 +350,7 @@ m_serial_json_read_variant_start(m_serial_read_t serial, const char *const field
|
|||||||
{
|
{
|
||||||
FILE *f = (FILE*) serial->data[0];
|
FILE *f = (FILE*) serial->data[0];
|
||||||
int c = m_serial_json_read_skip(f);
|
int c = m_serial_json_read_skip(f);
|
||||||
|
if (c == EOF) return M_SERIAL_FAIL;
|
||||||
if (c == '}') return M_SERIAL_OK_DONE;
|
if (c == '}') return M_SERIAL_OK_DONE;
|
||||||
// c should be \" but let fscanf parse it.
|
// c should be \" but let fscanf parse it.
|
||||||
ungetc(c, f);
|
ungetc(c, f);
|
||||||
|
|||||||
Reference in new issue
Block a user