1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-08-31 09:50:11 +03:00

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"; return b ? "enable" : "disable";
} }
static inline const char *empty_to_null(const char *p) { /* This macro's return pointer will have the "const" qualifier set or unset the same way as the input
return isempty(p) ? NULL : p; * 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) { static inline const char *empty_to_na(const char *p) {
return isempty(p) ? "n/a" : 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) { static inline const char *empty_or_dash_to_null(const char *p) {
return empty_or_dash(p) ? NULL : 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_; char *first_word(const char *s, const char *word) _pure_;