]> sigrok.org Git - libsigrok.git/blobdiff - session_file.c
genericdmm: Drop left-over entry.
[libsigrok.git] / session_file.c
index 33364a29a4540eea957051be8170ab8f341bfe6d..3746520ba1a41cd8ea1ab7bfa750c81b6dcf6a9a 100644 (file)
 #include <zip.h>
 #include <glib.h>
 #include <glib/gstdio.h>
-#include "config.h"
+#include "config.h" /* Needed for PACKAGE_VERSION and others. */
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
 
+/**
+ * @file
+ *
+ * Loading and saving libsigrok session files.
+ */
+
+/**
+ * @addtogroup grp_session
+ *
+ * @{
+ */
+
 extern struct sr_session *session;
 extern SR_PRIV struct sr_dev_driver session_driver;
 
@@ -48,9 +60,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 +77,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) {
@@ -283,3 +301,5 @@ SR_API int sr_session_save(const char *filename,
 
        return SR_OK;
 }
+
+/** @} */