X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=session_file.c;h=d720dd599eae866299b987fc5a1c2873b2ceb72f;hb=81a9ab725f9ce9125c9bc22bc5ebd2903c26bc35;hp=479dba04ed65ce1cc8b5b2633cd53b67c962514b;hpb=f438e0c923a114d7fd34fe0729ecd6891cb262f4;p=libsigrok.git diff --git a/session_file.c b/session_file.c index 479dba04..d720dd59 100644 --- a/session_file.c +++ b/session_file.c @@ -21,6 +21,9 @@ #include #include #include +#include +#include +#include #include #include #include "config.h" /* Needed for PACKAGE_VERSION and others. */ @@ -51,8 +54,10 @@ extern struct sr_session *session; extern SR_PRIV struct sr_dev_driver session_driver; +/** @private */ SR_PRIV int sr_sessionfile_check(const char *filename) { + struct stat st; struct zip *archive; struct zip_file *zf; struct zip_stat zs; @@ -62,6 +67,11 @@ SR_PRIV int sr_sessionfile_check(const char *filename) if (!filename) return SR_ERR_ARG; + if (stat(filename, &st) == -1) { + sr_err("Couldn't stat %s: %s", filename, strerror(errno)); + return SR_ERR; + } + if (!(archive = zip_open(filename, 0, &ret))) /* No logging: this can be used just to check if it's * a sigrok session file or not. */ @@ -164,22 +174,22 @@ SR_API int sr_session_load(const char *filename) sr_dev_open(sdi); sr_session_dev_add(sdi); sdi->driver->config_set(SR_CONF_SESSIONFILE, - g_variant_new_string(filename), sdi); + g_variant_new_string(filename), sdi, NULL); sdi->driver->config_set(SR_CONF_CAPTUREFILE, - g_variant_new_string(val), sdi); + g_variant_new_string(val), sdi, NULL); g_ptr_array_add(capturefiles, val); } else if (!strcmp(keys[j], "samplerate")) { sr_parse_sizestring(val, &tmp_u64); sdi->driver->config_set(SR_CONF_SAMPLERATE, - g_variant_new_uint64(tmp_u64), sdi); + g_variant_new_uint64(tmp_u64), sdi, NULL); } else if (!strcmp(keys[j], "unitsize")) { tmp_u64 = strtoull(val, NULL, 10); sdi->driver->config_set(SR_CONF_CAPTURE_UNITSIZE, - g_variant_new_uint64(tmp_u64), sdi); + g_variant_new_uint64(tmp_u64), sdi, NULL); } else if (!strcmp(keys[j], "total probes")) { total_probes = strtoull(val, NULL, 10); sdi->driver->config_set(SR_CONF_CAPTURE_NUM_PROBES, - g_variant_new_uint64(total_probes), sdi); + g_variant_new_uint64(total_probes), sdi, NULL); for (p = 0; p < total_probes; p++) { snprintf(probename, SR_MAX_PROBENAME_LEN, "%" PRIu64, p); if (!(probe = sr_probe_new(p, SR_PROBE_LOGIC, TRUE, @@ -278,8 +288,8 @@ SR_API int sr_session_save(const char *filename, const struct sr_dev_inst *sdi, fprintf(meta, "unitsize = %d\n", unitsize); fprintf(meta, "total probes = %d\n", g_slist_length(sdi->probes)); if (sr_dev_has_option(sdi, SR_CONF_SAMPLERATE)) { - if (sr_config_get(sdi->driver, SR_CONF_SAMPLERATE, - &gvar, sdi) == SR_OK) { + if (sr_config_get(sdi->driver, sdi, NULL, + SR_CONF_SAMPLERATE, &gvar) == SR_OK) { samplerate = g_variant_get_uint64(gvar); s = sr_samplerate_string(samplerate); fprintf(meta, "samplerate = %s\n", s);