@@ -0,0 +1,44 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
#include "cleanup-util.h"
|
||||
|
||||
/* Argument list for parsers of specific configuration settings. */
|
||||
#define CONFIG_PARSER_ARGUMENTS \
|
||||
const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata
|
||||
|
||||
/* Prototype for a parser for a specific configuration setting */
|
||||
typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS);
|
||||
|
||||
/* A macro declaring a function prototype, following the typedef above, simply because it's so cumbersomely long
|
||||
* otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function
|
||||
* prototypes on the same screen…) */
|
||||
#define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS)
|
||||
|
||||
typedef struct ConfigSection {
|
||||
unsigned line;
|
||||
bool invalid;
|
||||
char filename[];
|
||||
} ConfigSection;
|
||||
|
||||
#define DEFINE_SECTION_CLEANUP_FUNCTIONS(type, free_func) \
|
||||
static inline type* free_func##_or_set_invalid(type *p) { \
|
||||
assert(p); \
|
||||
\
|
||||
if (p->section) \
|
||||
p->section->invalid = true; \
|
||||
else \
|
||||
free_func(p); \
|
||||
return NULL; \
|
||||
} \
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func); \
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid);
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <syslog.h>
|
||||
|
||||
#include "conf-parser-forward.h"
|
||||
#include "hashmap.h"
|
||||
#include "log.h"
|
||||
#include "memory-util.h"
|
||||
@@ -19,27 +20,6 @@ typedef enum ConfigParseFlags {
|
||||
CONFIG_PARSE_WARN = 1 << 1, /* Emit non-debug messages */
|
||||
} ConfigParseFlags;
|
||||
|
||||
/* Argument list for parsers of specific configuration settings. */
|
||||
#define CONFIG_PARSER_ARGUMENTS \
|
||||
const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata
|
||||
|
||||
/* Prototype for a parser for a specific configuration setting */
|
||||
typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS);
|
||||
|
||||
/* A macro declaring a function prototype, following the typedef above, simply because it's so cumbersomely long
|
||||
* otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function
|
||||
* prototypes on the same screen…) */
|
||||
#define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS)
|
||||
|
||||
/* Wraps information for parsing a specific configuration variable, to
|
||||
* be stored in a simple array */
|
||||
typedef struct ConfigTableItem {
|
||||
@@ -164,12 +144,6 @@ int config_section_parse(
|
||||
const char *rvalue,
|
||||
void *userdata);
|
||||
|
||||
typedef struct ConfigSection {
|
||||
unsigned line;
|
||||
bool invalid;
|
||||
char filename[];
|
||||
} ConfigSection;
|
||||
|
||||
static inline ConfigSection* config_section_free(ConfigSection *cs) {
|
||||
return mfree(cs);
|
||||
}
|
||||
@@ -207,19 +181,6 @@ static inline bool section_is_invalid(ConfigSection *section) {
|
||||
return section->invalid;
|
||||
}
|
||||
|
||||
#define DEFINE_SECTION_CLEANUP_FUNCTIONS(type, free_func) \
|
||||
static inline type* free_func##_or_set_invalid(type *p) { \
|
||||
assert(p); \
|
||||
\
|
||||
if (p->section) \
|
||||
p->section->invalid = true; \
|
||||
else \
|
||||
free_func(p); \
|
||||
return NULL; \
|
||||
} \
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func); \
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid);
|
||||
|
||||
#define log_section_full_errno_zerook(section, level, error, ...) \
|
||||
({ \
|
||||
const ConfigSection *_s = (section); \
|
||||
|
||||
@@ -29,7 +29,7 @@ typedef struct {} pcre2_code;
|
||||
|
||||
extern const struct hash_ops pcre2_code_hash_ops_free;
|
||||
|
||||
typedef enum {
|
||||
typedef enum PatternCompileCase {
|
||||
PATTERN_COMPILE_CASE_AUTO,
|
||||
PATTERN_COMPILE_CASE_SENSITIVE,
|
||||
PATTERN_COMPILE_CASE_INSENSITIVE,
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "argv-util.h"
|
||||
#include "errno-util.h"
|
||||
#include "extract-word.h"
|
||||
#include "forward.h"
|
||||
#include "log.h"
|
||||
#include "macro.h"
|
||||
#include "process-util.h"
|
||||
|
||||
Reference in New Issue
Block a user