From 9d9d8ecf245abe54ad70ff6f3614e94dc7635bc9 Mon Sep 17 00:00:00 2001
From: Dominik Loidolt <dominik.loidolt@univie.ac.at>
Date: Fri, 8 Mar 2024 17:02:11 +0100
Subject: [PATCH] Adapt cmp_tool to the chunk decompression

---
 programs/cmp_io.c | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/programs/cmp_io.c b/programs/cmp_io.c
index 7db309d..90a933b 100644
--- a/programs/cmp_io.c
+++ b/programs/cmp_io.c
@@ -29,7 +29,7 @@
 #include <cmp_tool-config.h>
 #include <compiler.h>
 
-#include <cmp_io.h>
+#include "cmp_io.h"
 #include <cmp_support.h>
 #include <rdcu_cmd.h>
 #include <byteorder.h>
@@ -168,7 +168,6 @@ static FILE *open_file(const char *dirname, const char *filename)
 int write_input_data_to_file(const void *data, uint32_t data_size, enum cmp_data_type data_type,
 			     const char *output_prefix, const char *name_extension, int flags)
 {
-	size_t sample_size = size_of_a_sample(data_type);
 	uint8_t *tmp_buf;
 	int return_value;
 
@@ -178,17 +177,20 @@ int write_input_data_to_file(const void *data, uint32_t data_size, enum cmp_data
 	if (data_size == 0)
 		return 0;
 
-	if (!sample_size)
-		return -1;
-
 	tmp_buf = malloc(data_size);
 	if (!tmp_buf)
 		return -1;
+
 	memcpy(tmp_buf, data, data_size);
-	cmp_input_big_to_cpu_endianness(tmp_buf, data_size, data_type);
 
-	return_value = write_data_to_file(tmp_buf, data_size, output_prefix,
-					  name_extension, flags);
+	if (data_type == DATA_TYPE_CHUNK)
+		return_value = cpu_to_be_chunk(tmp_buf, data_size);
+	else
+		return_value = cmp_input_big_to_cpu_endianness(tmp_buf, data_size, data_type);
+
+	if (!return_value)
+		return_value = write_data_to_file(tmp_buf, data_size, output_prefix,
+						  name_extension, flags);
 
 	free(tmp_buf);
 
@@ -1432,17 +1434,22 @@ ssize_t read_file_data(const char *file_name, enum cmp_data_type data_type,
 	if (size < 0)
 		return size;
 
-	samples = cmp_input_size_to_samples((uint32_t)size, data_type);
-	if (samples < 0) {
-		fprintf(stderr, "%s: %s: Error: The data are not correct formatted for the used compression data type.\n",
-				PROGRAM_NAME, file_name);
-		return -1;
-	}
-
-	err = cmp_input_big_to_cpu_endianness(buf, (uint32_t)size, data_type);
-	if (err)
-		return -1;
+	if (data_type != DATA_TYPE_CHUNK) {
+		samples = cmp_input_size_to_samples((uint32_t)size, data_type);
+		if (samples < 0) {
+			fprintf(stderr, "%s: %s: Error: The data are not correct formatted for the used compression data type.\n",
+					PROGRAM_NAME, file_name);
+			return -1;
+		}
 
+		err = cmp_input_big_to_cpu_endianness(buf, (uint32_t)size, data_type);
+		if (err)
+			return -1;
+	} else {
+		err = be_to_cpu_chunk(buf, (uint32_t)size);
+		if (err)
+			return -1;
+	}
 	return size;
 }
 
-- 
GitLab