summaryrefslogtreecommitdiffstats
path: root/coccinelle/strempty.cocci
blob: d36f092f63aa6ff1a7e051db097c212be56bdf03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/* SPDX-License-Identifier: LGPL-2.1-or-later */
@@
/* Avoid running this transformation on the strempty function itself and
 * on the "make_expression" macro in src/libsystemd/sd-bus/bus-convenience.c.
 * As Coccinelle's Location object doesn't support macro "detection", use
 * a pretty horrifying combo of specifying a file and a special "something_else"
 * position element, which is, apparently, the default value of
 * "current_element" before it's set (according to the source code), thus
 * matching any "top level" position, including macros. Let's hope we never
 * introduce a function called "something_else"...
 */
position p : script:python() {
        not (p[0].current_element == "strempty" or
                (p[0].file == "src/libsystemd/sd-bus/bus-convenience.c" and
                        p[0].current_element == "something_else"))
};
expression s;
@@
(
- s@p ?: ""
+ strempty(s)
|
- s@p ? s : ""
+ strempty(s)
)

@@
position p : script:python() { p[0].current_element != "strempty" };
expression s;
@@
- if (!s@p)
-         s = "";
+ s = strempty(s);

@@
position p : script:python() { p[0].current_element != "strnull" };
expression s;
@@
(
- s@p ?: "(null)"
+ strnull(s)
|
- s@p ? s : "(null)"
+ strnull(s)
)

@@
position p : script:python() { p[0].current_element != "strnull" };
expression s;
@@
- if (!s@p)
-         s = "(null)";
+ s = strnull(s);

@@
position p : script:python() { p[0].current_element != "strna" };
expression s;
@@
(
- s@p ?: "n/a"
+ strna(s)
|
- s@p ? s : "n/a"
+ strna(s)
)

@@
position p : script:python() { p[0].current_element != "strna" };
expression s;
@@
- if (!s@p)
-         s = "n/a";
+ s = strna(s);