Fix parsing the eeprom when there are users with no records
[visomat-utils.git] / src / visomat-data-downloader.c
index 818473f..97da8e8 100644 (file)
@@ -119,7 +119,7 @@ static void print_record_csv_compat(struct datetime *d, struct pressure *p)
        printf("\n");
 }
 
-/* TODO separate better decoding data from printing it */
+/* TODO: it would be better to separate decoding data from printing it */
 static int decode_eeprom(unsigned char *buffer,
                         unsigned int len,
                         unsigned int user_mask)
@@ -156,6 +156,13 @@ static int decode_eeprom(unsigned char *buffer,
                        /* user_id and num_records take 3 bytes */
                        i += 3;
 
+                       /*
+                        * when there are no records, there is a dummy byte
+                        * which has to be consumed
+                        */
+                       if (num_records == 0)
+                               i += 1;
+
                        for (j = 0; j < num_records; j++) {
                                ret = extract_datetime(buffer + i, &d);
                                if (ret < 0)
@@ -321,7 +328,8 @@ int main(void)
 
        ret = libusb_init(NULL);
        if (ret < 0) {
-               fprintf(stderr, "libusb_init failed: %s\n", libusb_error_name(ret));
+               fprintf(stderr, "libusb_init failed: %s\n",
+                       libusb_error_name(ret));
                goto out;
        }