@@ -941,6 +941,24 @@ out_free:
return ret;
}
+static int write_compression_header(struct tracecmd_output *handle)
+{
+ const char *name = NULL;
+ const char *ver = NULL;
+ int ret;
+
+ ret = tracecmd_compress_proto_get_name(handle->compress, &name, &ver);
+ if (ret < 0 || !name || !ver) {
+ name = "none";
+ ver = "";
+ }
+ if (do_write_check(handle, name, strlen(name) + 1))
+ return -1;
+ if (do_write_check(handle, ver, strlen(ver) + 1))
+ return -1;
+ return 0;
+}
+
/**
* tracecmd_output_allocate - allocate new output handler to a trace file
* @handle: file descriptor to an empty file, it can be -1 if the handler
@@ -1222,6 +1240,11 @@ int tracecmd_output_write_init(struct tracecmd_output *handler)
endian4 = convert_endian_4(handler, handler->page_size);
if (do_write_check(handler, &endian4, 4))
return -1;
+ if (handler->file_version >= 7) {
+ if (write_compression_header(handler))
+ return -1;
+ }
+
handler->file_state = TRACECMD_FILE_INIT;
return 0;
}
If there is a compression configured on the output file handler and if the file version is at least 7, write compression header in the file. The compression header is two null terminated strings - name and version of the compression algorithm, used to compress some parts of the file. The header is located after the page size in the file. The new header is mandatory for trace files version 7. If no compression is used, the string "none" is saved as name of the compression algorithm and empty string as compression algorithm version. Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> --- lib/trace-cmd/trace-output.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)