1
0
Fork 0

Adding upstream version 1.14.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-16 11:30:13 +01:00
parent ac60c09ef6
commit 2066c5b305
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
305 changed files with 20664 additions and 6099 deletions

View file

@ -31,13 +31,14 @@
#include "argconfig.h"
#include "suffix.h"
#include <string.h>
#include <errno.h>
#include <inttypes.h>
#include <getopt.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <stdarg.h>
#include <inttypes.h>
#include <string.h>
static argconfig_help_func *help_funcs[MAX_HELP_FUNC] = { NULL };
@ -450,10 +451,11 @@ int argconfig_parse_subopt_string(char *string, char **options,
return 0;
}
unsigned argconfig_parse_comma_sep_array(char *string, int *val,
int argconfig_parse_comma_sep_array(char *string, int *val,
unsigned max_length)
{
unsigned ret = 0;
int ret = 0;
unsigned long v;
char *tmp;
char *p;
@ -464,9 +466,14 @@ unsigned argconfig_parse_comma_sep_array(char *string, int *val,
if (!tmp)
return 0;
val[ret] = strtol(tmp, &p, 0);
v = strtoul(tmp, &p, 0);
if (*p != 0)
return -1;
if (v > UINT_MAX) {
fprintf(stderr, "%s out of range\n", tmp);
return -1;
}
val[ret] = v;
ret++;
while (1) {
@ -478,19 +485,23 @@ unsigned argconfig_parse_comma_sep_array(char *string, int *val,
if (ret >= max_length)
return -1;
val[ret] = strtol(tmp, &p, 0);
v = strtoul(tmp, &p, 0);
if (*p != 0)
return -1;
if (v > UINT_MAX) {
fprintf(stderr, "%s out of range\n", tmp);
return -1;
}
val[ret] = v;
ret++;
}
}
unsigned argconfig_parse_comma_sep_array_long(char *string,
int argconfig_parse_comma_sep_array_long(char *string,
unsigned long long *val,
unsigned max_length)
{
unsigned ret = 0;
int ret = 0;
char *tmp;
char *p;

View file

@ -119,9 +119,9 @@ int argconfig_parse(int argc, char *argv[], const char *program_desc,
const struct argconfig_commandline_options *options);
int argconfig_parse_subopt_string(char *string, char **options,
size_t max_options);
unsigned argconfig_parse_comma_sep_array(char *string, int *ret,
int argconfig_parse_comma_sep_array(char *string, int *ret,
unsigned max_length);
unsigned argconfig_parse_comma_sep_array_long(char *string,
int argconfig_parse_comma_sep_array_long(char *string,
unsigned long long *ret,
unsigned max_length);
void argconfig_register_help_func(argconfig_help_func * f);

4
util/cleanup.c Normal file
View file

@ -0,0 +1,4 @@
#include <stdlib.h>
#include "cleanup.h"
DEFINE_CLEANUP_FUNC(cleanup_charp, char *, free);

18
util/cleanup.h Normal file
View file

@ -0,0 +1,18 @@
#ifndef __CLEANUP_H
#define __CLEANUP_H
#define __cleanup__(fn) __attribute__((cleanup(fn)))
#define DECLARE_CLEANUP_FUNC(name, type) \
void name(type *__p)
#define DEFINE_CLEANUP_FUNC(name, type, free_fn)\
DECLARE_CLEANUP_FUNC(name, type) \
{ \
if (*__p) \
free_fn(*__p); \
}
DECLARE_CLEANUP_FUNC(cleanup_charp, char *);
#endif

View file

@ -19,9 +19,9 @@ struct json_object *json_create_object(void)
return test;
}
struct json_array *json_create_array(void)
struct json_object *json_create_array(void)
{
void *test = calloc(1, sizeof(struct json_array));
void *test = calloc(1, sizeof(struct json_object));
if (!test)
fail_and_notify();
return test;
@ -146,7 +146,7 @@ static struct json_value *json_create_value_object(struct json_object *obj)
return value;
}
static struct json_value *json_create_value_array(struct json_array *array)
static struct json_value *json_create_value_array(struct json_object *array)
{
struct json_value *value = malloc(sizeof(struct json_value));
@ -173,7 +173,7 @@ void json_free_object(struct json_object *obj)
free(obj);
}
void json_free_array(struct json_array *array)
void json_free_array(struct json_object *array)
{
int i;
@ -206,7 +206,7 @@ static void json_free_value(struct json_value *value)
free(value);
}
static int json_array_add_value(struct json_array *array, struct json_value *value)
static int json_array_add_value(struct json_object *array, struct json_value *value)
{
struct json_value **values = realloc(array->values,
sizeof(struct json_value *) * (array->value_cnt + 1));
@ -255,7 +255,7 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
else if (type == JSON_TYPE_OBJECT)
value = json_create_value_object(va_arg(args, struct json_object *));
else
value = json_create_value_array(va_arg(args, struct json_array *));
value = json_create_value_array(va_arg(args, struct json_object *));
va_end(args);
if (!value)
@ -274,8 +274,8 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
return 0;
}
static void json_print_array(struct json_array *array, void *);
int json_array_add_value_type(struct json_array *array, int type, ...)
static void json_print_array(struct json_object *array, void *);
int json_array_add_value_type(struct json_object *array, int type, ...)
{
struct json_value *value;
va_list args;
@ -293,7 +293,7 @@ int json_array_add_value_type(struct json_array *array, int type, ...)
else if (type == JSON_TYPE_OBJECT)
value = json_create_value_object(va_arg(args, struct json_object *));
else
value = json_create_value_array(va_arg(args, struct json_array *));
value = json_create_value_array(va_arg(args, struct json_object *));
va_end(args);
if (!value)
@ -309,7 +309,7 @@ int json_array_add_value_type(struct json_array *array, int type, ...)
static int json_value_level(struct json_value *value);
static int json_pair_level(struct json_pair *pair);
static int json_array_level(struct json_array *array);
static int json_array_level(struct json_object *array);
static int json_object_level(struct json_object *object)
{
if (object->parent == NULL)
@ -322,7 +322,7 @@ static int json_pair_level(struct json_pair *pair)
return json_object_level(pair->parent) + 1;
}
static int json_array_level(struct json_array *array)
static int json_array_level(struct json_object *array)
{
return json_value_level(array->parent);
}
@ -342,7 +342,7 @@ static void json_print_level(int level, void *out)
}
static void json_print_pair(struct json_pair *pair, void *);
static void json_print_array(struct json_array *array, void *);
static void json_print_array(struct json_object *array, void *);
static void json_print_value(struct json_value *value, void *);
void json_print_object(struct json_object *obj, void *out)
{
@ -366,7 +366,7 @@ static void json_print_pair(struct json_pair *pair, void *out)
json_print_value(pair->value, out);
}
static void json_print_array(struct json_array *array, void *out)
static void json_print_array(struct json_object *array, void *out)
{
int i;

View file

@ -2,7 +2,6 @@
#define __JSON__H
struct json_object;
struct json_array;
struct json_pair;
#define JSON_TYPE_STRING 0
@ -21,22 +20,18 @@ struct json_value {
long double float_number;
char *string;
struct json_object *object;
struct json_array *array;
struct json_object *array;
};
int parent_type;
union {
struct json_pair *parent_pair;
struct json_array *parent_array;
struct json_object *parent_array;
};
};
struct json_array {
struct json_object {
struct json_value **values;
int value_cnt;
struct json_value *parent;
};
struct json_object {
struct json_pair **pairs;
int pair_cnt;
struct json_value *parent;
@ -49,10 +44,10 @@ struct json_pair {
};
struct json_object *json_create_object(void);
struct json_array *json_create_array(void);
struct json_object *json_create_array(void);
void json_free_object(struct json_object *obj);
void json_free_array(struct json_array *array);
void json_free_array(struct json_object *array);
int json_object_add_value_type(struct json_object *obj, const char *name, int type, ...);
#define json_object_add_value_int(obj, name, val) \
@ -67,7 +62,7 @@ int json_object_add_value_type(struct json_object *obj, const char *name, int ty
json_object_add_value_type((obj), name, JSON_TYPE_OBJECT, (val))
#define json_object_add_value_array(obj, name, val) \
json_object_add_value_type((obj), name, JSON_TYPE_ARRAY, (val))
int json_array_add_value_type(struct json_array *array, int type, ...);
int json_array_add_value_type(struct json_object *array, int type, ...);
#define json_array_add_value_int(obj, val) \
json_array_add_value_type((obj), JSON_TYPE_INTEGER, (val))
#define json_array_add_value_uint(obj, val) \

90
util/log.c Normal file
View file

@ -0,0 +1,90 @@
/*
* Copyright (C) 2021 SUSE LLC
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* This file implements basic logging functionality.
*/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdbool.h>
#include <syslog.h>
#include <unistd.h>
#include <time.h>
#define LOG_FUNCNAME 1
#include "log.h"
#include "cleanup.h"
#ifndef LOG_CLOCK
#define LOG_CLOCK CLOCK_MONOTONIC
#endif
int log_level = DEFAULT_LOGLEVEL;
bool log_timestamp;
bool log_pid;
void __attribute__((format(printf, 3, 4)))
__msg(int lvl, const char *func, const char *format, ...)
{
va_list ap;
char pidbuf[16];
char timebuf[32];
static const char *const formats[] = {
"%s%s%s",
"%s%s%s: ",
"%s<%s>%s ",
"%s<%s> %s: ",
"[%s] %s%s ",
"[%s]%s %s: ",
"[%s] <%s>%s ",
"[%s] <%s> %s: ",
};
char *header __cleanup__(cleanup_charp) = NULL;
char *message __cleanup__(cleanup_charp) = NULL;
int idx;
if (lvl > log_level)
return;
if (log_timestamp) {
struct timespec now;
clock_gettime(LOG_CLOCK, &now);
snprintf(timebuf, sizeof(timebuf), "%6ld.%06ld",
(long)now.tv_sec, now.tv_nsec / 1000);
} else
*timebuf = '\0';
if (log_pid)
snprintf(pidbuf, sizeof(pidbuf), "%ld", (long)getpid());
else
*pidbuf = '\0';
idx = ((log_timestamp ? 1 : 0) << 2) |
((log_pid ? 1 : 0) << 1) | (func ? 1 : 0);
if (asprintf(&header, formats[idx], timebuf, pidbuf, func ? func : "")
== -1)
header = NULL;
va_start(ap, format);
if (vasprintf(&message, format, ap) == -1)
message = NULL;
va_end(ap);
fprintf(stderr, "%s%s", header ? header : "<error>",
message ? message : "<error>");
}

34
util/log.h Normal file
View file

@ -0,0 +1,34 @@
/*
* Copyright (c) 2021 Martin Wilck, SUSE LLC
* SPDX-License-Identifier: LGPL-2.1-or-newer
*/
#ifndef _LOG_H
#define _LOG_H
#ifndef MAX_LOGLEVEL
# define MAX_LOGLEVEL LOG_DEBUG
#endif
#ifndef DEFAULT_LOGLEVEL
# define DEFAULT_LOGLEVEL LOG_NOTICE
#endif
#if (LOG_FUNCNAME == 1)
#define _log_func __func__
#else
#define _log_func NULL
#endif
extern int log_level;
extern bool log_timestamp;
extern bool log_pid;
void __attribute__((format(printf, 3, 4)))
__msg(int lvl, const char *func, const char *format, ...);
#define msg(lvl, format, ...) \
do { \
if ((lvl) <= MAX_LOGLEVEL) \
__msg(lvl, _log_func, format, ##__VA_ARGS__); \
} while (0)
#endif /* _LOG_H */