X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=session_file.c;h=41ca36c5fbd04e7a0f3920d9b97cfed80eaa9ab1;hb=afe2f28e65f3c3d9b510f101d6cd76c59794cd17;hp=33364a29a4540eea957051be8170ab8f341bfe6d;hpb=056be0719f0c1a05cde6fc2483b50e024708fdac;p=libsigrok.git diff --git a/session_file.c b/session_file.c index 33364a29..41ca36c5 100644 --- a/session_file.c +++ b/session_file.c @@ -27,6 +27,18 @@ #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; } + +/** @} */