chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
condition: properly allow passing back errors from condition checks
[elogind.git]
/
src
/
shared
/
conf-parser.h
diff --git
a/src/shared/conf-parser.h
b/src/shared/conf-parser.h
index ba0e58db25f50d976afb0cb720030ca28baeebbc..62f2a01e5e6862294a27a5e64c08fc60401d9ef6 100644
(file)
--- a/
src/shared/conf-parser.h
+++ b/
src/shared/conf-parser.h
@@
-52,7
+52,7
@@
typedef struct ConfigTableItem {
} ConfigTableItem;
/* Wraps information for parsing a specific configuration variable, to
} ConfigTableItem;
/* Wraps information for parsing a specific configuration variable, to
- *
ve sr
ored in a gperf perfect hashtable */
+ *
be st
ored in a gperf perfect hashtable */
typedef struct ConfigPerfItem {
const char *section_and_lvalue; /* Section + "." + name of the variable */
ConfigParserCallback parse; /* Function that is called to parse the variable's value */
typedef struct ConfigPerfItem {
const char *section_and_lvalue; /* Section + "." + name of the variable */
ConfigParserCallback parse; /* Function that is called to parse the variable's value */
@@
-65,7
+65,7
@@
typedef const ConfigPerfItem* (*ConfigPerfItemLookup)(const char *section_and_lv
/* Prototype for a generic high-level lookup function */
typedef int (*ConfigItemLookup)(
/* Prototype for a generic high-level lookup function */
typedef int (*ConfigItemLookup)(
- void *table,
+
const
void *table,
const char *section,
const char *lvalue,
ConfigParserCallback *func,
const char *section,
const char *lvalue,
ConfigParserCallback *func,
@@
-75,20
+75,21
@@
typedef int (*ConfigItemLookup)(
/* Linear table search implementation of ConfigItemLookup, based on
* ConfigTableItem arrays */
/* Linear table search implementation of ConfigItemLookup, based on
* ConfigTableItem arrays */
-int config_item_table_lookup(void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
+int config_item_table_lookup(
const
void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
/* gperf implementation of ConfigItemLookup, based on gperf
* ConfigPerfItem tables */
/* gperf implementation of ConfigItemLookup, based on gperf
* ConfigPerfItem tables */
-int config_item_perf_lookup(void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
+int config_item_perf_lookup(
const
void *table, const char *section, const char *lvalue, ConfigParserCallback *func, int *ltype, void **data, void *userdata);
int config_parse(const char *unit,
const char *filename,
FILE *f,
const char *sections, /* nulstr */
ConfigItemLookup lookup,
int config_parse(const char *unit,
const char *filename,
FILE *f,
const char *sections, /* nulstr */
ConfigItemLookup lookup,
- void *table,
+
const
void *table,
bool relaxed,
bool allow_include,
bool relaxed,
bool allow_include,
+ bool warn,
void *userdata);
/* Generic parsers */
void *userdata);
/* Generic parsers */
@@
-168,8
+169,9
@@
int log_syntax_internal(const char *unit, int level,
void *data, \
void *userdata) { \
\
void *data, \
void *userdata) { \
\
- type **enums = data, *xs, x, *ys; \
- char *w, *state; \
+ type **enums = data, x, *ys; \
+ _cleanup_free_ type *xs = NULL; \
+ const char *word, *state; \
size_t l, i = 0; \
\
assert(filename); \
size_t l, i = 0; \
\
assert(filename); \
@@
-178,12
+180,16
@@
int log_syntax_internal(const char *unit, int level,
assert(data); \
\
xs = new0(type, 1); \
assert(data); \
\
xs = new0(type, 1); \
+ if(!xs) \
+ return -ENOMEM; \
+ \
*xs = invalid; \
\
*xs = invalid; \
\
- FOREACH_WORD(w
, l, rvalue, state) {
\
+ FOREACH_WORD(w
ord, l, rvalue, state) {
\
_cleanup_free_ char *en = NULL; \
_cleanup_free_ char *en = NULL; \
+ type *new_xs; \
\
\
- en = strndup(w
, l);
\
+ en = strndup(w
ord, l);
\
if (!en) \
return -ENOMEM; \
\
if (!en) \
return -ENOMEM; \
\
@@
-207,13
+213,18
@@
int log_syntax_internal(const char *unit, int level,
continue; \
\
*(xs + i) = x; \
continue; \
\
*(xs + i) = x; \
- xs = realloc(xs, (++i + 1) * sizeof(type)); \
- if (!xs) \
+ new_xs = realloc(xs, (++i + 1) * sizeof(type)); \
+ if (new_xs) \
+ xs = new_xs; \
+ else \
return -ENOMEM; \
return -ENOMEM; \
+ \
*(xs + i) = invalid; \
} \
\
free(*enums); \
*enums = xs; \
*(xs + i) = invalid; \
} \
\
free(*enums); \
*enums = xs; \
+ xs = NULL; \
+ \
return 0; \
}
return 0; \
}