@@ -1167,6 +1167,27 @@ 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_create_fd - allocate new output handle to a trace file
* @fd: File descriptor for the handle to write to.
@@ -1460,6 +1481,12 @@ static int output_write_init(struct tracecmd_output *handle)
endian4 = convert_endian_4(handle, handle->page_size);
if (do_write_check(handle, &endian4, 4))
return -1;
+
+ if (handle->file_version >= FILE_VERSION_COMPRESSION) {
+ if (write_compression_header(handle))
+ return -1;
+ }
+
if (HAS_SECTIONS(handle)) {
/* Write 0 as options offset and save its location */
offset = 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 | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)