Uemis downloader: ignore leading junk in the data

One user's debug log shows valid data, only not in the format we've seen
before (with the response starting with '{'). Instead he gets a repeat of
the second word in the response to processSync prepended to the expected
output. So let's skip the data until the first '{'.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-12-03 09:47:46 -08:00
parent 75d30b8d70
commit 3499e50d0c

View file

@ -1278,27 +1278,30 @@ const char *do_uemis_import(device_data_t *data)
param_buff[3] = 0; param_buff[3] = 0;
success = uemis_get_answer(mountpath, "getDivelogs", 3, 0, &result); success = uemis_get_answer(mountpath, "getDivelogs", 3, 0, &result);
uemis_mem_status = get_memory(data->download_table, UEMIS_CHECK_DETAILS); uemis_mem_status = get_memory(data->download_table, UEMIS_CHECK_DETAILS);
if (success && mbuf && uemis_mem_status != UEMIS_MEM_FULL) { /* first, remove any leading garbage... this needs to start with a '{' */
char *realmbuf = mbuf;
if (mbuf)
realmbuf = strchr(mbuf, '{');
if (success && realmbuf && uemis_mem_status != UEMIS_MEM_FULL) {
#if UEMIS_DEBUG & 16 #if UEMIS_DEBUG & 16
do_dump_buffer_to_file(mbuf, "Divelogs"); do_dump_buffer_to_file(realmbuf, "Divelogs");
#endif #endif
/* process the buffer we have assembled */ /* process the buffer we have assembled */
if (!process_raw_buffer(data, deviceidnr, realmbuf, &newmax, keep_number, NULL)) {
if (!process_raw_buffer(data, deviceidnr, mbuf, &newmax, keep_number, NULL)) {
/* if no dives were downloaded, mark end appropriately */ /* if no dives were downloaded, mark end appropriately */
if (end == -2) if (end == -2)
end = start - 1; end = start - 1;
success = false; success = false;
} }
if (once) { if (once) {
char *t = first_object_id_val(mbuf); char *t = first_object_id_val(realmbuf);
if (t && atoi(t) > start) if (t && atoi(t) > start)
start = atoi(t); start = atoi(t);
free(t); free(t);
once = false; once = false;
} }
/* clean up mbuf */ /* clean up mbuf */
endptr = strstr(mbuf, "{{{"); endptr = strstr(realmbuf, "{{{");
if (endptr) if (endptr)
*(endptr + 2) = '\0'; *(endptr + 2) = '\0';
/* last object_id we parsed */ /* last object_id we parsed */