mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
Merge pull request #5783 from keszybz/compiler-warning-fixes
shared/extract-word: replace enum with int to avoid undefined behaviour
This commit is contained in:
@@ -241,7 +241,12 @@ int extract_first_word_and_warn(
|
||||
return log_syntax(unit, LOG_ERR, filename, line, r, "Unable to decode word \"%s\", ignoring: %m", rvalue);
|
||||
}
|
||||
|
||||
int extract_many_words(const char **p, const char *separators, ExtractFlags flags, ...) {
|
||||
/* We pass ExtractFlags as unsigned int (to avoid undefined behaviour when passing
|
||||
* an object that undergoes default argument promotion as an argument to va_start).
|
||||
* Let's make sure that ExtractFlags fits into an unsigned int. */
|
||||
assert_cc(sizeof(enum ExtractFlags) <= sizeof(unsigned));
|
||||
|
||||
int extract_many_words(const char **p, const char *separators, unsigned flags, ...) {
|
||||
va_list ap;
|
||||
char **l;
|
||||
int n = 0, i, c, r;
|
||||
|
||||
@@ -32,4 +32,4 @@ typedef enum ExtractFlags {
|
||||
|
||||
int extract_first_word(const char **p, char **ret, const char *separators, ExtractFlags flags);
|
||||
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);
|
||||
int extract_many_words(const char **p, const char *separators, ExtractFlags flags, ...) _sentinel_;
|
||||
int extract_many_words(const char **p, const char *separators, unsigned flags, ...) _sentinel_;
|
||||
|
||||
@@ -32,6 +32,14 @@
|
||||
strstr(STRINGIFY(t), "signed") ? "" : \
|
||||
((t)-1 < (t)0 ? ", signed" : ", unsigned"));
|
||||
|
||||
enum Enum {
|
||||
enum_value,
|
||||
};
|
||||
|
||||
enum BigEnum {
|
||||
big_enum_value = UINT64_C(-1),
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
info(char);
|
||||
info(signed char);
|
||||
@@ -53,5 +61,8 @@ int main(void) {
|
||||
info(usec_t);
|
||||
info(__time_t);
|
||||
|
||||
info(enum Enum);
|
||||
info(enum BigEnum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user