xref: /linux-6.15/include/linux/string_choices.h (revision b56e601a)
1fca76071SAndy Shevchenko /* SPDX-License-Identifier: GPL-2.0 */
2fca76071SAndy Shevchenko #ifndef _LINUX_STRING_CHOICES_H_
3fca76071SAndy Shevchenko #define _LINUX_STRING_CHOICES_H_
4fca76071SAndy Shevchenko 
5c121d5ccSHongbo Li /*
6c121d5ccSHongbo Li  * Here provide a series of helpers in the str_$TRUE_$FALSE format (you can
7c121d5ccSHongbo Li  * also expand some helpers as needed), where $TRUE and $FALSE are their
8c121d5ccSHongbo Li  * corresponding literal strings. These helpers can be used in the printing
9c121d5ccSHongbo Li  * and also in other places where constant strings are required. Using these
10c121d5ccSHongbo Li  * helpers offers the following benefits:
11c121d5ccSHongbo Li  *  1) Reducing the hardcoding of strings, which makes the code more elegant
12c121d5ccSHongbo Li  *     through these simple literal-meaning helpers.
13c121d5ccSHongbo Li  *  2) Unifying the output, which prevents the same string from being printed
14c121d5ccSHongbo Li  *     in various forms, such as enable/disable, enabled/disabled, en/dis.
15c121d5ccSHongbo Li  *  3) Deduping by the linker, which results in a smaller binary file.
16c121d5ccSHongbo Li  */
17c121d5ccSHongbo Li 
18fca76071SAndy Shevchenko #include <linux/types.h>
19fca76071SAndy Shevchenko 
str_enable_disable(bool v)20fca76071SAndy Shevchenko static inline const char *str_enable_disable(bool v)
21fca76071SAndy Shevchenko {
22fca76071SAndy Shevchenko 	return v ? "enable" : "disable";
23fca76071SAndy Shevchenko }
24c2708ba9SHongbo Li #define str_disable_enable(v)		str_enable_disable(!(v))
25fca76071SAndy Shevchenko 
str_enabled_disabled(bool v)26fca76071SAndy Shevchenko static inline const char *str_enabled_disabled(bool v)
27fca76071SAndy Shevchenko {
28fca76071SAndy Shevchenko 	return v ? "enabled" : "disabled";
29fca76071SAndy Shevchenko }
30c2708ba9SHongbo Li #define str_disabled_enabled(v)		str_enabled_disabled(!(v))
31fca76071SAndy Shevchenko 
str_hi_lo(bool v)32a9fc7664SAndy Shevchenko static inline const char *str_hi_lo(bool v)
33a9fc7664SAndy Shevchenko {
34a9fc7664SAndy Shevchenko 	return v ? "hi" : "lo";
35a9fc7664SAndy Shevchenko }
36a9fc7664SAndy Shevchenko #define str_lo_hi(v)		str_hi_lo(!(v))
37a9fc7664SAndy Shevchenko 
str_high_low(bool v)38a9fc7664SAndy Shevchenko static inline const char *str_high_low(bool v)
39a9fc7664SAndy Shevchenko {
40a9fc7664SAndy Shevchenko 	return v ? "high" : "low";
41a9fc7664SAndy Shevchenko }
42a9fc7664SAndy Shevchenko #define str_low_high(v)		str_high_low(!(v))
43a9fc7664SAndy Shevchenko 
str_on_off(bool v)44fca76071SAndy Shevchenko static inline const char *str_on_off(bool v)
45fca76071SAndy Shevchenko {
46fca76071SAndy Shevchenko 	return v ? "on" : "off";
47fca76071SAndy Shevchenko }
48c2708ba9SHongbo Li #define str_off_on(v)		str_on_off(!(v))
49fca76071SAndy Shevchenko 
str_read_write(bool v)50*b56e601aSR Sundar static inline const char *str_read_write(bool v)
51fca76071SAndy Shevchenko {
52*b56e601aSR Sundar 	return v ? "read" : "write";
53fca76071SAndy Shevchenko }
54*b56e601aSR Sundar #define str_write_read(v)		str_read_write(!(v))
55*b56e601aSR Sundar 
str_true_false(bool v)56*b56e601aSR Sundar static inline const char *str_true_false(bool v)
57*b56e601aSR Sundar {
58*b56e601aSR Sundar 	return v ? "true" : "false";
59*b56e601aSR Sundar }
60*b56e601aSR Sundar #define str_false_true(v)		str_true_false(!(v))
61fca76071SAndy Shevchenko 
str_up_down(bool v)62a98ae7f0SMichal Wajdeczko static inline const char *str_up_down(bool v)
63a98ae7f0SMichal Wajdeczko {
64a98ae7f0SMichal Wajdeczko 	return v ? "up" : "down";
65a98ae7f0SMichal Wajdeczko }
66f5c1ca3aSKees Cook #define str_down_up(v)		str_up_down(!(v))
67a98ae7f0SMichal Wajdeczko 
str_yes_no(bool v)68*b56e601aSR Sundar static inline const char *str_yes_no(bool v)
696ff4cd11SHongbo Li {
70*b56e601aSR Sundar 	return v ? "yes" : "no";
716ff4cd11SHongbo Li }
72*b56e601aSR Sundar #define str_no_yes(v)		str_yes_no(!(v))
736ff4cd11SHongbo Li 
749ca5facdSMichal Wajdeczko /**
759ca5facdSMichal Wajdeczko  * str_plural - Return the simple pluralization based on English counts
769ca5facdSMichal Wajdeczko  * @num: Number used for deciding pluralization
779ca5facdSMichal Wajdeczko  *
789ca5facdSMichal Wajdeczko  * If @num is 1, returns empty string, otherwise returns "s".
799ca5facdSMichal Wajdeczko  */
str_plural(size_t num)809ca5facdSMichal Wajdeczko static inline const char *str_plural(size_t num)
819ca5facdSMichal Wajdeczko {
829ca5facdSMichal Wajdeczko 	return num == 1 ? "" : "s";
839ca5facdSMichal Wajdeczko }
849ca5facdSMichal Wajdeczko 
85fca76071SAndy Shevchenko #endif
86