- metafile = g_key_file_to_data(kf, &len, &error);
- strcpy(tmpname, "sigrok-meta-XXXXXX");
- if ((tmpfile = g_mkstemp(tmpname)) == -1)
- return SR_ERR;
- if (write(tmpfile, metafile, len) < 0) {
- sr_dbg("Failed to create new metadata: %s", strerror(errno));
- g_free(metafile);
- unlink(tmpname);
- return SR_ERR;
- }
- close(tmpfile);
- if (!(metasrc = zip_source_file(archive, tmpname, 0, -1))) {
- sr_err("Failed to create zip source for metadata.");
- g_free(metafile);
- unlink(tmpname);
- return SR_ERR;
- }
- if (zip_replace(archive, zs.index, metasrc) == -1) {
- sr_err("Failed to replace metadata file.");
- g_free(metafile);
- unlink(tmpname);
+ metabuf = g_key_file_to_data(kf, &metalen, NULL);
+ metasrc = zip_source_buffer(archive, metabuf, metalen, FALSE);
+
+ if (zip_replace(archive, zs.index, metasrc) < 0) {
+ sr_err("Failed to replace metadata: %s",
+ zip_strerror(archive));
+ g_key_file_free(kf);
+ zip_source_free(metasrc);
+ zip_discard(archive);
+ g_free(metabuf);