From: Uwe Hermann Date: Thu, 30 Jul 2015 17:11:17 +0000 (+0200) Subject: Don't open an output file in the case of srzip. X-Git-Tag: sigrok-cli-0.6.0~25 X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=commitdiff_plain;h=5899178d2d92d12bb8bed7e6b874ea778b7329c2 Don't open an output file in the case of srzip. This fixes parts of bug #570. --- diff --git a/session.c b/session.c index b045119..b4ff3ff 100644 --- a/session.c +++ b/session.c @@ -180,10 +180,24 @@ void datafeed_in(const struct sr_dev_inst *sdi, /* Set up backup analog output module. */ oa = sr_output_new(sr_output_find("analog"), NULL, sdi, NULL); - if (opt_output_file) - outfile = g_fopen(opt_output_file, "wb"); - else + /* + * Don't open a file when using the "srzip" output format. + * The srzip output module does open/write/rename/close + * on its own. This is especially important on Windows since + * libzip (used by srzip) will try to rename a temporary + * ZIP file to the final *.sr filename as specified by + * the sigrok-cli user. However, on Windows file renames + * of files that are already opened by any process are not + * possible. Thus, we don't open the *.sr file here, + * but rather let srzip perform all file operations. + */ + if (opt_output_file) { + /* Only open the file if output format != srzip. */ + if (!g_str_has_prefix(opt_output_format, "srzip")) + outfile = g_fopen(opt_output_file, "wb"); + } else { outfile = stdout; + } rcvd_samples_logic = rcvd_samples_analog = 0; @@ -299,7 +313,7 @@ void datafeed_in(const struct sr_dev_inst *sdi, break; } - if (o && outfile && !opt_pds) { + if (o && (outfile || g_str_has_prefix(opt_output_format, "srzip")) && !opt_pds) { if (sr_output_send(o, packet, &out) == SR_OK) { if (!out || (out->len == 0 && !opt_output_format