string-util: rework empty_to_null() to not change "const" qualifier of input

This changes the definition from enpty_to_null() so that we are still
typesafe (i.e. only accept strings) but do not drop (or add) any const
to the returned string that wasn't also on the input.

Inspired by: 3196e2996f
This commit is contained in:
Lennart Poettering 2022-12-21 22:35:51 +01:00
parent cf451f382a
commit ef2409cbde

View file

@ -53,9 +53,13 @@ static inline const char* enable_disable(bool b) {
return b ? "enable" : "disable";
}
static inline const char *empty_to_null(const char *p) {
return isempty(p) ? NULL : p;
}
/* This macro's return pointer will have the "const" qualifier set or unset the same way as the input
* pointer. */
#define empty_to_null(p) \
({ \
const char *_p = (p); \
(typeof(p)) (isempty(_p) ? NULL : _p); \
})
static inline const char *empty_to_na(const char *p) {
return isempty(p) ? "n/a" : p;
@ -74,6 +78,11 @@ static inline bool empty_or_dash(const char *str) {
static inline const char *empty_or_dash_to_null(const char *p) {
return empty_or_dash(p) ? NULL : p;
}
#define empty_or_dash_to_null(p) \
({ \
const char *_p = (p); \
(typeof(p)) (empty_or_dash(_p) ? NULL : _p); \
})
char *first_word(const char *s, const char *word) _pure_;