Introduction
Introduction Statistics Contact Development Disclaimer Help
ii-1.8-ucspi.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
ii-1.8-ucspi.diff (9092B)
---
1 diff -up ii-1.8/ii.c ii-1.8-mod/ii.c
2 --- ii-1.8/ii.c Sun Feb 4 14:36:09 2018
3 +++ ii-1.8-mod/ii.c Mon Feb 26 22:24:36 2018
4 @@ -1,16 +1,13 @@
5 /* See LICENSE file for license details. */
6 #include <sys/select.h>
7 -#include <sys/socket.h>
8 #include <sys/stat.h>
9 #include <sys/types.h>
10 -#include <sys/un.h>
11
12 #include <ctype.h>
13 #include <errno.h>
14 #include <fcntl.h>
15 #include <limits.h>
16 #include <netdb.h>
17 -#include <netinet/in.h>
18 #include <pwd.h>
19 #include <signal.h>
20 #include <stdarg.h>
21 @@ -20,6 +17,9 @@
22 #include <time.h>
23 #include <unistd.h>
24
25 +#define READ_FD 6
26 +#define WRITE_FD 7
27 +
28 char *argv0;
29
30 #include "arg.h"
31 @@ -56,16 +56,16 @@ static void channel_rm(Channel *);
32 static void create_dirtree(const char *);
33 static void create_filepath(char *, size_t, const char *, const ch…
34 static void ewritestr(int, const char *);
35 -static void handle_channels_input(int, Channel *);
36 -static void handle_server_output(int);
37 +static void handle_channels_input(Channel *);
38 +static void handle_server_output(void);
39 static int isnumeric(const char *);
40 -static void loginkey(int, const char *);
41 -static void loginuser(int, const char *, const char *);
42 -static void proc_channels_input(int, Channel *, char *);
43 -static void proc_channels_privmsg(int, Channel *, char *);
44 -static void proc_server_cmd(int, char *);
45 +static void loginkey(const char *);
46 +static void loginuser(const char *, const char *);
47 +static void proc_channels_input(Channel *, char *);
48 +static void proc_channels_privmsg(Channel *, char *);
49 +static void proc_server_cmd(char *);
50 static int read_line(int, char *, size_t);
51 -static void run(int, const char *);
52 +static void run(const char *);
53 static void setup(void);
54 static void sighandler(int);
55 static int tcpopen(const char *, const char *);
56 @@ -319,84 +319,22 @@ channel_leave(Channel *c)
57 }
58
59 static void
60 -loginkey(int ircfd, const char *key)
61 +loginkey(const char *key)
62 {
63 snprintf(msg, sizeof(msg), "PASS %s\r\n", key);
64 - ewritestr(ircfd, msg);
65 + ewritestr(WRITE_FD, msg);
66 }
67
68 static void
69 -loginuser(int ircfd, const char *host, const char *fullname)
70 +loginuser(const char *host, const char *fullname)
71 {
72 snprintf(msg, sizeof(msg), "NICK %s\r\nUSER %s localhost %s :%s…
73 nick, nick, host, fullname);
74 puts(msg);
75 - ewritestr(ircfd, msg);
76 + ewritestr(WRITE_FD, msg);
77 }
78
79 static int
80 -udsopen(const char *uds)
81 -{
82 - struct sockaddr_un sun;
83 - size_t len;
84 - int fd;
85 -
86 - if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
87 - fprintf(stderr, "%s: socket: %s\n", argv0, strerror(err…
88 - exit(1);
89 - }
90 -
91 - sun.sun_family = AF_UNIX;
92 - if (strlcpy(sun.sun_path, uds, sizeof(sun.sun_path)) >= sizeof(…
93 - fprintf(stderr, "%s: UNIX domain socket path truncation…
94 - exit(1);
95 - }
96 - len = strlen(sun.sun_path) + 1 + sizeof(sun.sun_family);
97 - if (connect(fd, (struct sockaddr *)&sun, len) == -1) {
98 - fprintf(stderr, "%s: connect: %s\n", argv0, strerror(er…
99 - exit(1);
100 - }
101 - return fd;
102 -}
103 -
104 -static int
105 -tcpopen(const char *host, const char *service)
106 -{
107 - struct addrinfo hints, *res = NULL, *rp;
108 - int fd = -1, e;
109 -
110 - memset(&hints, 0, sizeof(hints));
111 - hints.ai_family = AF_UNSPEC; /* allow IPv4 or IPv6 */
112 - hints.ai_flags = AI_NUMERICSERV; /* avoid name lookup for port …
113 - hints.ai_socktype = SOCK_STREAM;
114 -
115 - if ((e = getaddrinfo(host, service, &hints, &res))) {
116 - fprintf(stderr, "%s: getaddrinfo: %s\n", argv0, gai_str…
117 - exit(1);
118 - }
119 -
120 - for (rp = res; rp; rp = rp->ai_next) {
121 - fd = socket(res->ai_family, res->ai_socktype, res->ai_p…
122 - if (fd == -1)
123 - continue;
124 - if (connect(fd, res->ai_addr, res->ai_addrlen) == -1) {
125 - close(fd);
126 - fd = -1;
127 - continue;
128 - }
129 - break; /* success */
130 - }
131 - if (fd == -1) {
132 - fprintf(stderr, "%s: could not connect to %s:%s: %s\n",
133 - argv0, host, service, strerror(errno));
134 - exit(1);
135 - }
136 -
137 - freeaddrinfo(res);
138 - return fd;
139 -}
140 -
141 -static int
142 isnumeric(const char *s)
143 {
144 errno = 0;
145 @@ -445,22 +383,22 @@ channel_print(Channel *c, const char *buf)
146 }
147
148 static void
149 -proc_channels_privmsg(int ircfd, Channel *c, char *buf)
150 +proc_channels_privmsg(Channel *c, char *buf)
151 {
152 snprintf(msg, sizeof(msg), "<%s> %s", nick, buf);
153 channel_print(c, msg);
154 snprintf(msg, sizeof(msg), "PRIVMSG %s :%s\r\n", c->name, buf);
155 - ewritestr(ircfd, msg);
156 + ewritestr(WRITE_FD, msg);
157 }
158
159 static void
160 -proc_channels_input(int ircfd, Channel *c, char *buf)
161 +proc_channels_input(Channel *c, char *buf)
162 {
163 char *p = NULL;
164 size_t buflen;
165
166 if (buf[0] != '/' && buf[0] != '\0') {
167 - proc_channels_privmsg(ircfd, c, buf);
168 + proc_channels_privmsg(c, buf);
169 return;
170 }
171 msg[0] = '\0';
172 @@ -481,7 +419,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
173 channel_join(&buf[3]);
174 } else if (p) {
175 if ((c = channel_join(&buf[3])))
176 - proc_channels_privmsg(ircfd, c,…
177 + proc_channels_privmsg(c, p + 1);
178 return;
179 }
180 break;
181 @@ -513,7 +451,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
182 else
183 snprintf(msg, sizeof(msg),
184 "PART %s :leaving\r\n", c->nam…
185 - ewritestr(ircfd, msg);
186 + ewritestr(WRITE_FD, msg);
187 channel_leave(c);
188 return;
189 break;
190 @@ -523,7 +461,7 @@ proc_channels_input(int ircfd, Channel *c, char *buf)
191 else
192 snprintf(msg, sizeof(msg),
193 "QUIT %s\r\n", "bye");
194 - ewritestr(ircfd, msg);
195 + ewritestr(WRITE_FD, msg);
196 isrunning = 0;
197 return;
198 break;
199 @@ -536,11 +474,11 @@ proc_channels_input(int ircfd, Channel *c, char *b…
200 snprintf(msg, sizeof(msg), "%s\r\n", &buf[1]);
201 }
202 if (msg[0] != '\0')
203 - ewritestr(ircfd, msg);
204 + ewritestr(WRITE_FD, msg);
205 }
206
207 static void
208 -proc_server_cmd(int fd, char *buf)
209 +proc_server_cmd(char *buf)
210 {
211 Channel *c;
212 const char *channel;
213 @@ -588,7 +526,7 @@ proc_server_cmd(int fd, char *buf)
214 return;
215 } else if (!strcmp("PING", argv[TOK_CMD])) {
216 snprintf(msg, sizeof(msg), "PONG %s\r\n", argv[TOK_TEXT…
217 - ewritestr(fd, msg);
218 + ewritestr(WRITE_FD, msg);
219 return;
220 } else if (!argv[TOK_NICKSRV] || !argv[TOK_USER]) {
221 /* server command */
222 @@ -675,7 +613,7 @@ read_line(int fd, char *buf, size_t bufsiz)
223 }
224
225 static void
226 -handle_channels_input(int ircfd, Channel *c)
227 +handle_channels_input(Channel *c)
228 {
229 char buf[IRC_MSG_MAX];
230
231 @@ -684,22 +622,22 @@ handle_channels_input(int ircfd, Channel *c)
232 channel_rm(c);
233 return;
234 }
235 - proc_channels_input(ircfd, c, buf);
236 + proc_channels_input(c, buf);
237 }
238
239 static void
240 -handle_server_output(int ircfd)
241 +handle_server_output(void)
242 {
243 char buf[IRC_MSG_MAX];
244
245 - if (read_line(ircfd, buf, sizeof(buf)) == -1) {
246 + if (read_line(READ_FD, buf, sizeof(buf)) == -1) {
247 fprintf(stderr, "%s: remote host closed connection: %s\…
248 argv0, strerror(errno));
249 exit(1);
250 }
251 fprintf(stdout, "%lu %s\n", (unsigned long)time(NULL), buf);
252 fflush(stdout);
253 - proc_server_cmd(ircfd, buf);
254 + proc_server_cmd(buf);
255 }
256
257 static void
258 @@ -721,7 +659,7 @@ setup(void)
259 }
260
261 static void
262 -run(int ircfd, const char *host)
263 +run(const char *host)
264 {
265 Channel *c, *tmp;
266 fd_set rdset;
267 @@ -731,9 +669,9 @@ run(int ircfd, const char *host)
268
269 snprintf(ping_msg, sizeof(ping_msg), "PING %s\r\n", host);
270 while (isrunning) {
271 - maxfd = ircfd;
272 + maxfd = READ_FD;
273 FD_ZERO(&rdset);
274 - FD_SET(ircfd, &rdset);
275 + FD_SET(READ_FD, &rdset);
276 for (c = channels; c; c = c->next) {
277 if (c->fdin > maxfd)
278 maxfd = c->fdin;
279 @@ -752,17 +690,17 @@ run(int ircfd, const char *host)
280 channel_print(channelmaster, "-!- ii sh…
281 exit(2); /* status code 2 for timeout */
282 }
283 - ewritestr(ircfd, ping_msg);
284 + ewritestr(WRITE_FD, ping_msg);
285 continue;
286 }
287 - if (FD_ISSET(ircfd, &rdset)) {
288 - handle_server_output(ircfd);
289 + if (FD_ISSET(READ_FD, &rdset)) {
290 + handle_server_output();
291 last_response = time(NULL);
292 }
293 for (c = channels; c; c = tmp) {
294 tmp = c->next;
295 if (FD_ISSET(c->fdin, &rdset))
296 - handle_channels_input(ircfd, c);
297 + handle_channels_input(c);
298 }
299 }
300 }
301 @@ -775,7 +713,7 @@ main(int argc, char *argv[])
302 const char *key = NULL, *fullname = NULL, *host = "";
303 const char *uds = NULL, *service = "6667";
304 char prefix[PATH_MAX];
305 - int ircfd, r;
306 + int r;
307
308 /* use nickname and home dir of user by default */
309 if (!(spw = getpwuid(getuid()))) {
310 @@ -815,11 +753,6 @@ main(int argc, char *argv[])
311 if (!*host)
312 usage();
313
314 - if (uds)
315 - ircfd = udsopen(uds);
316 - else
317 - ircfd = tcpopen(host, service);
318 -
319 #ifdef __OpenBSD__
320 /* OpenBSD pledge(2) support */
321 if (pledge("stdio rpath wpath cpath dpath", NULL) == -1) {
322 @@ -837,10 +770,10 @@ main(int argc, char *argv[])
323
324 channelmaster = channel_add(""); /* master channel */
325 if (key)
326 - loginkey(ircfd, key);
327 - loginuser(ircfd, host, fullname && *fullname ? fullname : nick);
328 + loginkey(key);
329 + loginuser(host, fullname && *fullname ? fullname : nick);
330 setup();
331 - run(ircfd, host);
332 + run(host);
333 if (channelmaster)
334 channel_leave(channelmaster);
335
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.