diff options
Diffstat (limited to 'devel/coccinelle/string-empty.cocci')
-rw-r--r-- | devel/coccinelle/string-empty.cocci | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/devel/coccinelle/string-empty.cocci b/devel/coccinelle/string-empty.cocci new file mode 100644 index 0000000..16e6b17 --- /dev/null +++ b/devel/coccinelle/string-empty.cocci @@ -0,0 +1,45 @@ +/* + * Copyright 2020 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. + * + * Catch string comparisons where the pcmk__str_empty function could be used + * instead. Note that we are only catching uses involving identifiers (not + * expressions), but I think this is probably fine - we are likely not using + * the same expression multiple times in a single line of code. If some are + * found, it's easy enough to add another block here. + */ + +virtual internal + +@ string_empty depends on internal @ +type t; +identifier func !~ "pcmk__str_empty"; +char* I; +@@ +t func(...) { +... +( +- (I == NULL) || (strlen(I) == 0) ++ pcmk__str_empty(I) +| +- (I == NULL) || !strlen(I) ++ pcmk__str_empty(I) +| +- (I == NULL) || (I[0] == 0) ++ pcmk__str_empty(I) +| +- (I == NULL) || (*I == 0) ++ pcmk__str_empty(I) +| +- (I == NULL) || (I[0] == '\0') ++ pcmk__str_empty(I) +| +- (I == NULL) || (*I == '\0') ++ pcmk__str_empty(I) +) +... +} |