master hovercats/oakiss / pkg / iproute2 / patch / 0007-Don-t-omit-second-operand-to-operator.patch
  1From ee4b85a5edf36b320e521707810cc69f1efad5d2 Mon Sep 17 00:00:00 2001
  2From: Michael Forney <mforney@mforney.org>
  3Date: Sun, 16 Jun 2019 12:39:40 -0700
  4Subject: [PATCH] Don't omit second operand to '?' operator
  5
  6---
  7 ip/iproute_lwtunnel.c |  4 ++--
  8 ip/iptunnel.c         |  7 ++++++-
  9 lib/bpf_legacy.c      |  2 +-
 10 lib/utils.c           |  7 +++++--
 11 misc/ss.c             | 26 ++++++++++++++++++--------
 12 5 files changed, 32 insertions(+), 14 deletions(-)
 13
 14diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
 15index 94985972..7f3982aa 100644
 16--- a/ip/iproute_lwtunnel.c
 17+++ b/ip/iproute_lwtunnel.c
 18@@ -394,7 +394,7 @@ static const char *format_action_type(int action)
 19 	if (action < 0 || action > SEG6_LOCAL_ACTION_MAX)
 20 		return "<invalid>";
 21 
 22-	return seg6_action_names[action] ?: "<unknown>";
 23+	return seg6_action_names[action] ? seg6_action_names[action] : "<unknown>";
 24 }
 25 
 26 static int read_action_type(const char *name)
 27@@ -425,7 +425,7 @@ static void print_encap_bpf_prog(FILE *fp, struct rtattr *encap,
 28 
 29 	if (is_json_context())
 30 		print_string(PRINT_JSON, str, NULL,
 31-			     progname ? : "<unknown>");
 32+			     progname ? progname : "<unknown>");
 33 	else {
 34 		fprintf(fp, "%s ", str);
 35 		if (progname)
 36diff --git a/ip/iptunnel.c b/ip/iptunnel.c
 37index 46c5f894..f84e25ed 100644
 38--- a/ip/iptunnel.c
 39+++ b/ip/iptunnel.c
 40@@ -284,11 +284,16 @@ static int do_add(int cmd, int argc, char **argv)
 41 static int do_del(int argc, char **argv)
 42 {
 43 	struct ip_tunnel_parm p;
 44+	const char *name;
 45 
 46 	if (parse_args(argc, argv, SIOCDELTUNNEL, &p) < 0)
 47 		return -1;
 48 
 49-	return tnl_del_ioctl(tnl_defname(&p) ? : p.name, p.name, &p);
 50+	name = tnl_defname(&p);
 51+	if (!name)
 52+		name = p.name;
 53+
 54+	return tnl_del_ioctl(name, p.name, &p);
 55 }
 56 
 57 static void print_tunnel(const void *t)
 58diff --git a/lib/bpf_legacy.c b/lib/bpf_legacy.c
 59index 253e8240..a0afe0bc 100644
 60--- a/lib/bpf_legacy.c
 61+++ b/lib/bpf_legacy.c
 62@@ -771,7 +771,7 @@ static const char *bpf_get_work_dir(enum bpf_prog_type type)
 63 		mnt = bpf_find_mntpt("bpf", BPF_FS_MAGIC, bpf_tmp,
 64 				     sizeof(bpf_tmp), bpf_known_mnts);
 65 	if (!mnt) {
 66-		mnt = mnt_env ? : BPF_DIR_MNT;
 67+		mnt = mnt_env ? mnt_env : BPF_DIR_MNT;
 68 		ret = bpf_mnt_check_target(mnt);
 69 		if (!ret)
 70 			ret = bpf_mnt_fs(mnt);
 71diff --git a/lib/utils.c b/lib/utils.c
 72index 040b935c..cfe0e2e9 100644
 73--- a/lib/utils.c
 74+++ b/lib/utils.c
 75@@ -953,8 +953,10 @@ int __get_hz(void)
 76 	int hz = 0;
 77 	FILE *fp;
 78 
 79-	if (getenv("HZ"))
 80-		return atoi(getenv("HZ")) ? : HZ;
 81+	if (getenv("HZ")) {
 82+		hz = atoi(getenv("HZ"));
 83+		goto out;
 84+	}
 85 
 86 	if (getenv("PROC_NET_PSCHED"))
 87 		snprintf(name, sizeof(name)-1,
 88@@ -975,6 +977,7 @@ int __get_hz(void)
 89 				hz = denom;
 90 		fclose(fp);
 91 	}
 92+out:
 93 	if (hz)
 94 		return hz;
 95 	return HZ;
 96diff --git a/misc/ss.c b/misc/ss.c
 97index e5d97d95..3ed6ac18 100644
 98--- a/misc/ss.c
 99+++ b/misc/ss.c
100@@ -464,7 +464,9 @@ static FILE *generic_proc_open(const char *env, const char *name)
101 	char store[128];
102 
103 	if (!p) {
104-		p = getenv("PROC_ROOT") ? : "/proc";
105+		p = getenv("PROC_ROOT");
106+		if (!p)
107+			p = "/proc";
108 		snprintf(store, sizeof(store)-1, "%s/%s", p, name);
109 		p = store;
110 	}
111@@ -634,12 +636,16 @@ static void user_ent_destroy(void)
112 
113 static void user_ent_hash_build(void)
114 {
115-	const char *root = getenv("PROC_ROOT") ? : "/proc/";
116+	const char *root;
117 	char name[MAX_PATH_LEN];
118 	struct dirent *d;
119 	int nameoff;
120 	DIR *dir;
121 
122+	root = getenv("PROC_ROOT");
123+	if (!root)
124+		root = "/proc/";
125+
126 	strlcpy(name, root, sizeof(name));
127 
128 	if (strlen(name) == 0 || name[strlen(name) - 1] != '/')
129@@ -2301,7 +2307,10 @@ void *parse_hostcond(char *addr, bool is_port)
130 	} else if (addr[0] == '*') {
131 		port = addr+1;
132 	} else {
133-		port = strrchr(strchr(addr, '/') ? : addr, ':');
134+		port = strchr(addr, '/');
135+		if (!port)
136+			port = addr;
137+		port = strrchr(port, ':');
138 	}
139 
140 	if (is_port)
141@@ -4089,9 +4098,9 @@ static void unix_stats_print(struct sockstat *s, struct filter *f)
142 
143 	sock_state_print(s);
144 
145-	sock_addr_print(s->name ?: "*", " ",
146+	sock_addr_print(s->name ? s->name : "*", " ",
147 			uint_to_str(s->lport, port_name), NULL);
148-	sock_addr_print(s->peer_name ?: "*", " ",
149+	sock_addr_print(s->peer_name ? s->peer_name : "*", " ",
150 			uint_to_str(s->rport, port_name), NULL);
151 
152 	proc_ctx_print(s);
153@@ -4294,7 +4303,7 @@ static int unix_show(struct filter *f)
154 			if (!p)
155 				u->peer_name = "?";
156 			else
157-				u->peer_name = p->name ? : "*";
158+				u->peer_name = p->name ? p->name : "*";
159 		}
160 
161 		if (f->f) {
162@@ -4798,9 +4807,10 @@ static int netlink_show_one(struct filter *f,
163 			strncpy(procname, "kernel", 7);
164 		} else if (pid > 0) {
165 			FILE *fp;
166+			const char *root = getenv("PROC_ROOT");
167 
168 			snprintf(procname, sizeof(procname), "%s/%d/stat",
169-				getenv("PROC_ROOT") ? : "/proc", pid);
170+				root ? root : "/proc", pid);
171 			if ((fp = fopen(procname, "r")) != NULL) {
172 				if (fscanf(fp, "%*d (%[^)])", procname) == 1) {
173 					snprintf(procname+strlen(procname),
174@@ -4843,7 +4853,7 @@ static int netlink_show_one(struct filter *f,
175 		else if (pid > 0)
176 			getpidcon(pid, &pid_context);
177 
178-		out(" proc_ctx=%s", pid_context ? : "unavailable");
179+		out(" proc_ctx=%s", pid_context ? pid_context : "unavailable");
180 		freecon(pid_context);
181 	}
182 
183-- 
1842.44.0
185