1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
6 typedef enum ExtractFlags
{
7 EXTRACT_RELAX
= 1 << 0, /* Allow unbalanced quote and eat up trailing backslash. */
8 EXTRACT_CUNESCAPE
= 1 << 1, /* Unescape known escape sequences. */
9 EXTRACT_UNESCAPE_RELAX
= 1 << 2, /* Allow and keep unknown escape sequences, allow and keep trailing backslash. */
10 EXTRACT_UNESCAPE_SEPARATORS
= 1 << 3, /* Unescape separators (those specified, or whitespace by default). */
11 EXTRACT_KEEP_QUOTE
= 1 << 4, /* Ignore separators in quoting with "" and ''. */
12 EXTRACT_UNQUOTE
= 1 << 5, /* Ignore separators in quoting with "" and '', and remove the quotes. */
13 EXTRACT_DONT_COALESCE_SEPARATORS
= 1 << 6, /* Don't treat multiple adjacent separators as one */
14 EXTRACT_RETAIN_ESCAPE
= 1 << 7, /* Treat escape character '\' as any other character without special meaning */
15 EXTRACT_RETAIN_SEPARATORS
= 1 << 8, /* Do not advance the original string pointer past the separator(s) */
17 /* Note that if no flags are specified, escaped escape characters will be silently stripped. */
20 int extract_first_word(const char **p
, char **ret
, const char *separators
, ExtractFlags flags
);
21 int extract_first_word_and_warn(const char **p
, char **ret
, const char *separators
, ExtractFlags flags
, const char *unit
, const char *filename
, unsigned line
, const char *rvalue
);
23 int extract_many_words_internal(const char **p
, const char *separators
, unsigned flags
, ...) _sentinel_
;
24 #define extract_many_words(p, separators, flags, ...) \
25 extract_many_words_internal(p, separators, flags, ##__VA_ARGS__, NULL)