]> sigrok.org Git - libsigrok.git/commitdiff
sr: la8 in: Files must be exactly 8388613 bytes.
authorUwe Hermann <redacted>
Mon, 28 May 2012 22:21:21 +0000 (00:21 +0200)
committerUwe Hermann <redacted>
Tue, 29 May 2012 18:25:08 +0000 (20:25 +0200)
All ChronoVu LA8 files (*.kdt extension usually) are exactly 8388613
bytes in size (8MB + 5 bytes). Check this, when trying to autodetect the
file format, to reduce the likelihood of 'chronovu-la8' being
autodetected on all binary files (instead of 'binary').

input/chronovu_la8.c

index 23a8dc09c890e0bdb3d30cc164931c07a7bc14ef..f0a1a07142631e88a53a7eb4bfba043e70ccb8c7 100644 (file)
@@ -49,6 +49,9 @@ static uint64_t divcount_to_samplerate(uint8_t divcount)
 
 static int format_match(const char *filename)
 {
+       struct stat stat_buf;
+       int ret;
+
        if (!filename) {
                sr_err("la8 in: %s: filename was NULL", __func__);
                // return SR_ERR; /* FIXME */
@@ -69,7 +72,19 @@ static int format_match(const char *filename)
                return FALSE;
        }
 
-       /* TODO: Only accept files of length 8MB + 5 bytes. */
+       /* Only accept files of length 8MB + 5 bytes. */
+       ret = stat(filename, &stat_buf);
+       if (ret != 0) {
+               sr_err("la8 in: %s: Error getting file size of '%s'",
+                      __func__, filename);
+               return FALSE;
+       }
+       if (stat_buf.st_size != (8 * 1024 * 1024 + 5)) {
+               sr_dbg("la8 in: %s: File size must be exactly 8388613 bytes ("
+                      "it actually is %d bytes in size), so this is not a "
+                      "ChronoVu LA8 file.", __func__, stat_buf.st_size);
+               return FALSE;
+       }
 
        /* TODO: Check for divcount != 0xff. */