initial import
[patches.git] / iputils-use-proper-loops.patch
1 use proper looping code rather than labels/gotos as some versions of
2 gcc may miscompile the code.
3
4 Signed-off-by: Robert Moss <robmoss@gentoo.org>
5 Signed-off-by: Mike Frysinger <robmoss@gentoo.org>
6
7 diff --git a/tracepath.c b/tracepath.c
8 index c3f6f74..7ff85a2 100644
9 --- a/tracepath.c
10 +++ b/tracepath.c
11 @@ -77,7 +77,7 @@ int recverr(int fd, int ttl)
12 int progress = -1;
13 int broken_router;
14
15 -restart:
16 + while (1) {
17 memset(&rcvbuf, -1, sizeof(rcvbuf));
18 iov.iov_base = &rcvbuf;
19 iov.iov_len = sizeof(rcvbuf);
20 @@ -94,7 +94,7 @@ restart:
21 if (res < 0) {
22 if (errno == EAGAIN)
23 return progress;
24 - goto restart;
25 + continue;
26 }
27
28 progress = mtu;
29 @@ -217,7 +217,7 @@ restart:
30 perror("NET ERROR");
31 return 0;
32 }
33 - goto restart;
34 + }
35 }
36
37 int probe_ttl(int fd, int ttl)
38 @@ -228,7 +228,6 @@ int probe_ttl(int fd, int ttl)
39
40 memset(sndbuf,0,mtu);
41
42 -restart:
43 for (i=0; i<10; i++) {
44 int res;
45
46 @@ -244,7 +243,8 @@ restart:
47 if (res==0)
48 return 0;
49 if (res > 0)
50 - goto restart;
51 + i = 0;
52 + continue;
53 }
54 hisptr = (hisptr + 1)&63;
55
56 diff --git a/tracepath6.c b/tracepath6.c
57 index 23d6a8c..6d2a95b 100644
58 --- a/tracepath6.c
59 +++ b/tracepath6.c
60 @@ -71,7 +71,7 @@ int recverr(int fd, int ttl)
61 int progress = -1;
62 int broken_router;
63
64 -restart:
65 + while (1) {
66 memset(&rcvbuf, -1, sizeof(rcvbuf));
67 iov.iov_base = &rcvbuf;
68 iov.iov_len = sizeof(rcvbuf);
69 @@ -88,7 +88,7 @@ restart:
70 if (res < 0) {
71 if (errno == EAGAIN)
72 return progress;
73 - goto restart;
74 + continue;
75 }
76
77 progress = 2;
78 @@ -233,34 +233,29 @@ restart:
79 perror("NET ERROR");
80 return 0;
81 }
82 - goto restart;
83 + }
84 }
85
86 int probe_ttl(int fd, int ttl)
87 {
88 - int i;
89 + int i=0, res;
90 char sndbuf[mtu];
91 struct probehdr *hdr = (struct probehdr*)sndbuf;
92
93 -restart:
94 -
95 - for (i=0; i<10; i++) {
96 - int res;
97 -
98 - hdr->ttl = ttl;
99 - gettimeofday(&hdr->tv, NULL);
100 - if (send(fd, sndbuf, mtu-overhead, 0) > 0)
101 - break;
102 - res = recverr(fd, ttl);
103 - if (res==0)
104 - return 0;
105 - if (res > 0)
106 - goto restart;
107 - }
108 -
109 - if (i<10) {
110 - int res;
111 -
112 + while (i<10) {
113 + for (i=0; i<10; i++) {
114 + hdr->ttl = ttl;
115 + gettimeofday(&hdr->tv, NULL);
116 + if (send(fd, sndbuf, mtu-overhead, 0) > 0)
117 + break;
118 + res = recverr(fd, ttl);
119 + if (res==0)
120 + return 0;
121 + if (res > 0) {
122 + i = 0;
123 + continue;
124 + }
125 + }
126 data_wait(fd);
127 if (recv(fd, sndbuf, sizeof(sndbuf), MSG_DONTWAIT) > 0) {
128 printf("%2d?: reply received 8)\n", ttl);
129 @@ -268,7 +263,7 @@ restart:
130 }
131 res = recverr(fd, ttl);
132 if (res == 1)
133 - goto restart;
134 + continue;
135 return res;
136 }
137