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;
#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;
};
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;
};
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;
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)
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);
};
char *compiler;
char *compiler_check;
bool compression;
- unsigned compression_level;
+ int compression_level;
char *cpp_extension;
bool debug;
bool depend_mode;
}
}
+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)
{
}
}
+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)
{
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)
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);