]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Allow for negative compression level
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 29 Jun 2019 18:16:22 +0000 (20:16 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 29 Jun 2019 18:25:23 +0000 (20:25 +0200)
src/common_header.c
src/compr_none.c
src/compr_zlib.c
src/compr_zstd.c
src/compression.c
src/compression.h
src/conf.h
src/confitems.c
src/confitems.gperf
src/confitems.h

index eb62c442e391c8742ede8b49468fcf18bf9508a3..ebfb183980f880a6de08ef3e7bd4effe61f451e8 100644 (file)
@@ -25,8 +25,8 @@ void common_header_init_from_config(
        uint8_t RESULT_VERSION,
        uint64_t content_size)
 {
-       int8_t compr_level = compression_level_from_config();
        enum compression_type compr_type = compression_type_from_config();
+       int8_t compr_level = compression_level_from_config();
 
        memcpy(header->magic, magic, 4);
        header->version = RESULT_VERSION;
index ccb448f22480405faae1188faae259d5f032f4cf..9c77dab2940bc6158c1bd23a2d79b2e26f71b6df 100644 (file)
@@ -17,7 +17,7 @@
 #include "compression.h"
 
 static struct compr_state *
-compr_none_init(FILE *output, int level)
+compr_none_init(FILE *output, int8_t level)
 {
        (void)level;
        return (struct compr_state *)output;
index 899c4c7e69f36aead2f51b9d30bd2cf789526738..6e554cc97ca3ed1b0b8617d0d1965fabd011a016 100644 (file)
@@ -26,7 +26,7 @@ struct state {
 };
 
 static struct compr_state *
-compr_zlib_init(FILE *output, int level)
+compr_zlib_init(FILE *output, int8_t level)
 {
        struct state *state = malloc(sizeof(struct state));
        state->output = output;
index 998dfbb48b1c9d1cfabe483fcf8591bdb2ba604d..c6a11d7a1034c7c2dbb911955cb11112eee7cd59 100644 (file)
@@ -32,7 +32,7 @@ struct state {
 };
 
 static struct compr_state *
-compr_zstd_init(FILE *output, int level)
+compr_zstd_init(FILE *output, int8_t level)
 {
        struct state *state = malloc(sizeof(struct state));
        state->output = output;
index ec0687376dff5bf7c25166f2ce1c44d07aad74e4..875ce649311b0346dd25d7ea79e44f9e1978d651 100644 (file)
@@ -21,13 +21,7 @@ extern struct conf *conf;
 
 int8_t compression_level_from_config(void)
 {
-       unsigned conf_compression_level;
-#ifdef USE_ZSTD
-       conf_compression_level = conf->compression_level;
-#else
-       conf_compression_level = conf->compression_level;
-#endif
-       return conf->compression ? conf_compression_level : 0;
+       return conf->compression ? conf->compression_level : 0;
 }
 
 enum compression_type compression_type_from_config(void)
index 19baafdeb23cccb68608811c9a981870c1c7e2c3..14f176932d7bdfdf497f8ff473c61dfbd454f773 100644 (file)
@@ -6,7 +6,7 @@
 struct compr_state;
 
 struct compressor {
-       struct compr_state *(*init)(FILE *output, int compression_level);
+       struct compr_state *(*init)(FILE *output, int8_t compression_level);
        bool (*write)(struct compr_state *state, const void *data, size_t size);
        bool (*free)(struct compr_state *state);
 };
index 6e6b4d8ccd2949389cb51a240b59a8302c73daaf..7d14cfa6a4ffaffe7f324471ee798c463fb65e1c 100644 (file)
@@ -10,7 +10,7 @@ struct conf {
        char *compiler;
        char *compiler_check;
        bool compression;
-       unsigned compression_level;
+       int compression_level;
        char *cpp_extension;
        bool debug;
        bool depend_mode;
index d9d14bdd5b724d7e68ed629b69d78e402e1c0cd8..5afc5991b30f03b21124611f9c33a2610ad6991b 100644 (file)
@@ -242,6 +242,29 @@ confitem_format_umask(const void *value)
        }
 }
 
+bool
+confitem_parse_int(const char *str, void *result, char **errmsg)
+{
+       int *value = (int *)result;
+       errno = 0;
+       char *endptr;
+       long x = strtol(str, &endptr, 10);
+       if (errno == 0 && *str != '\0' && *endptr == '\0') {
+               *value = x;
+               return true;
+       } else {
+               *errmsg = format("invalid integer: \"%s\"", str);
+               return false;
+       }
+}
+
+char *
+confitem_format_int(const void *value)
+{
+       const int *i = (const int *)value;
+       return format("%d", *i);
+}
+
 bool
 confitem_parse_unsigned(const char *str, void *result, char **errmsg)
 {
@@ -281,6 +304,19 @@ confitem_verify_absolute_path(const void *value, char **errmsg)
        }
 }
 
+bool
+confitem_verify_compression_level(const void *value, char **errmsg)
+{
+       const int *level = (const int *)value;
+       assert(level);
+       if (*level >= -128 && *level <= 127) {
+               return true;
+       } else {
+               *errmsg = format("compression level must be between -128 and 127");
+               return false;
+       }
+}
+
 bool
 confitem_verify_dir_levels(const void *value, char **errmsg)
 {
index d229d2ca1256137b499a9bc991934a13d4219067..05084375b0bbbabd2e88b32c588b4a28b0fd5f96 100644 (file)
@@ -26,7 +26,7 @@ cache_dir_levels,           ITEM_V(cache_dir_levels, unsigned, dir_levels)
 compiler,                   ITEM(compiler, string)
 compiler_check,             ITEM(compiler_check, string)
 compression,                ITEM(compression, bool)
-compression_level,          ITEM(compression_level, unsigned)
+compression_level,          ITEM_V(compression_level, int, compression_level)
 cpp_extension,              ITEM(cpp_extension, string)
 debug,                      ITEM(debug, bool)
 depend_mode,                ITEM(depend_mode, bool)
index 8b42caeafdb7396d3bb1c98e42cd520b2a9e8959..22359a2f45aada9a15d572dbd1ef871340a98709 100644 (file)
@@ -37,10 +37,14 @@ char *confitem_format_string(const void *value);
 bool confitem_parse_umask(const char *str, void *result, char **errmsg);
 char *confitem_format_umask(const void *value);
 
+bool confitem_parse_int(const char *str, void *result, char **errmsg);
+char *confitem_format_int(const void *value);
+
 bool confitem_parse_unsigned(const char *str, void *result, char **errmsg);
 char *confitem_format_unsigned(const void *value);
 
 bool confitem_verify_absolute_path(const void *value, char **errmsg);
+bool confitem_verify_compression_level(const void *value, char **errmsg);
 bool confitem_verify_dir_levels(const void *value, char **errmsg);
 
 const struct conf_item *confitems_get(const char *str, size_t len);