]> sigrok.org Git - libsigrok.git/commitdiff
sr: better file version check
authorBert Vermeulen <redacted>
Mon, 23 Jul 2012 13:08:44 +0000 (15:08 +0200)
committerBert Vermeulen <redacted>
Fri, 3 Aug 2012 09:28:59 +0000 (11:28 +0200)
Still not really used though.

session_file.c

index 33364a29a4540eea957051be8170ab8f341bfe6d..aae31a00b361e5173932b37e6d66c19662042db4 100644 (file)
@@ -48,9 +48,9 @@ SR_API int sr_session_load(const char *filename)
        struct zip_stat zs;
        struct sr_dev_inst *sdi;
        struct sr_probe *probe;
-       int ret, probenum, devcnt, i, j;
+       int ret, probenum, devcnt, version, i, j;
        uint64_t tmp_u64, total_probes, enabled_probes, p;
-       char **sections, **keys, *metafile, *val, c;
+       char **sections, **keys, *metafile, *val, s[11];
        char probename[SR_MAX_PROBENAME_LEN + 1];
 
        if (!filename) {
@@ -65,16 +65,22 @@ SR_API int sr_session_load(const char *filename)
        }
 
        /* check "version" */
+       version = 0;
        if (!(zf = zip_fopen(archive, "version", 0))) {
                sr_dbg("session file: Not a sigrok session file.");
                return SR_ERR;
        }
-       ret = zip_fread(zf, &c, 1);
-       if (ret != 1 || c != '1') {
+       if ((ret = zip_fread(zf, s, 10)) == -1) {
                sr_dbg("session file: Not a valid sigrok session file.");
                return SR_ERR;
        }
        zip_fclose(zf);
+       s[ret] = 0;
+       version = strtoull(s, NULL, 10);
+       if (version != 1) {
+               sr_dbg("session file: Not a valid sigrok session file version.");
+               return SR_ERR;
+       }
 
        /* read "metadata" */
        if (zip_stat(archive, "metadata", 0, &zs) == -1) {