From ee0111d5067f00ff27c9e71d4908f715e6251724 Mon Sep 17 00:00:00 2001 From: Tomas Mlcoch Date: Thu, 12 Sep 2013 16:01:24 +0200 Subject: [PATCH] compression_wrapper: Add cr_compression_type() function. --- src/compression_wrapper.c | 19 +++++++++++++++++++ src/compression_wrapper.h | 6 ++++++ tests/test_compression_wrapper.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/compression_wrapper.c b/src/compression_wrapper.c index cad0c90..519d664 100644 --- a/src/compression_wrapper.c +++ b/src/compression_wrapper.c @@ -228,6 +228,25 @@ cr_detect_compression(const char *filename, GError **err) return type; } +cr_CompressionType +cr_compression_type(const char *name) +{ + if (!name) + return CR_CW_UNKNOWN_COMPRESSION; + + gchar *name_lower = g_strdup(name); + for (gchar *c = name_lower; *c; c++) + *c = tolower(*c); + + if (!g_strcmp0(name_lower, "gz") || !g_strcmp0(name_lower, "gzip")) + return CR_CW_GZ_COMPRESSION; + if (!g_strcmp0(name_lower, "bz2") || !g_strcmp0(name_lower, "bzip2")) + return CR_CW_BZ2_COMPRESSION; + if (!g_strcmp0(name_lower, "xz")) + return CR_CW_XZ_COMPRESSION; + + return CR_CW_UNKNOWN_COMPRESSION; +} const char * cr_compression_suffix(cr_CompressionType comtype) diff --git a/src/compression_wrapper.h b/src/compression_wrapper.h index 992dcbb..6a4f018 100644 --- a/src/compression_wrapper.h +++ b/src/compression_wrapper.h @@ -98,6 +98,12 @@ const char *cr_compression_suffix(cr_CompressionType comtype); */ cr_CompressionType cr_detect_compression(const char* filename, GError **err); +/** Return compression type. + * @param name compression name + * @return compression type + */ +cr_CompressionType cr_compression_type(const char *name); + /** Open/Create the specified file. * @param FILENAME filename * @param MODE open mode diff --git a/tests/test_compression_wrapper.c b/tests/test_compression_wrapper.c index e625a73..0a3dfd9 100644 --- a/tests/test_compression_wrapper.c +++ b/tests/test_compression_wrapper.c @@ -100,6 +100,42 @@ test_cr_compression_suffix(void) } static void +test_cr_compression_type(void) +{ + cr_CompressionType type; + + type = cr_compression_type(NULL); + g_assert_cmpint(type, ==, CR_CW_UNKNOWN_COMPRESSION); + + type = cr_compression_type(""); + g_assert_cmpint(type, ==, CR_CW_UNKNOWN_COMPRESSION); + + type = cr_compression_type("foo"); + g_assert_cmpint(type, ==, CR_CW_UNKNOWN_COMPRESSION); + + type = cr_compression_type("gz"); + g_assert_cmpint(type, ==, CR_CW_GZ_COMPRESSION); + + type = cr_compression_type("gzip"); + g_assert_cmpint(type, ==, CR_CW_GZ_COMPRESSION); + + type = cr_compression_type("GZ"); + g_assert_cmpint(type, ==, CR_CW_GZ_COMPRESSION); + + type = cr_compression_type("Gz"); + g_assert_cmpint(type, ==, CR_CW_GZ_COMPRESSION); + + type = cr_compression_type("bz2"); + g_assert_cmpint(type, ==, CR_CW_BZ2_COMPRESSION); + + type = cr_compression_type("bzip2"); + g_assert_cmpint(type, ==, CR_CW_BZ2_COMPRESSION); + + type = cr_compression_type("xz"); + g_assert_cmpint(type, ==, CR_CW_XZ_COMPRESSION); +} + +static void test_cr_detect_compression(void) { cr_CompressionType ret; @@ -710,6 +746,8 @@ main(int argc, char *argv[]) test_cr_compression_suffix); g_test_add_func("/compression_wrapper/test_cr_detect_compression", test_cr_detect_compression); + g_test_add_func("/compression_wrapper/test_cr_compression_type", + test_cr_compression_type); g_test_add_func("/compression_wrapper/test_cr_detect_compression_bad_suffix", test_cr_detect_compression_bad_suffix); g_test_add_func("/compression_wrapper/test_cr_read_with_autodetection", -- 2.7.4