Skip to content

Commit 6703fe4

Browse files
committed
applied 3 additional patches by Dimitris
1 parent 5eaa0ff commit 6703fe4

File tree

3 files changed

+99
-30
lines changed

3 files changed

+99
-30
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ clean:
3434
dist: clean
3535
@echo creating dist tarball
3636
@mkdir -p sic-${VERSION}
37-
@cp -R LICENSE Makefile README config.mk sic.1 sic.c util.c sic-${VERSION}
37+
@cp -R LICENSE Makefile README config.def.h config.mk sic.1 sic.c util.c sic-${VERSION}
3838
@tar -cf sic-${VERSION}.tar sic-${VERSION}
3939
@gzip sic-${VERSION}.tar
4040
@rm -rf sic-${VERSION}

arg.h

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copy me if you can.
3+
* by 20h
4+
*/
5+
6+
#ifndef ARG_H__
7+
#define ARG_H__
8+
9+
extern char *argv0;
10+
11+
/* use main(int argc, char *argv[]) */
12+
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
13+
argv[0] && argv[0][1]\
14+
&& argv[0][0] == '-';\
15+
argc--, argv++) {\
16+
char argc_;\
17+
char **argv_;\
18+
int brk_;\
19+
if (argv[0][1] == '-' && argv[0][2] == '\0') {\
20+
argv++;\
21+
argc--;\
22+
break;\
23+
}\
24+
for (brk_ = 0, argv[0]++, argv_ = argv;\
25+
argv[0][0] && !brk_;\
26+
argv[0]++) {\
27+
if (argv_ != argv)\
28+
break;\
29+
argc_ = argv[0][0];\
30+
switch (argc_)
31+
32+
/* Handles obsolete -NUM syntax */
33+
#define ARGNUM case '0':\
34+
case '1':\
35+
case '2':\
36+
case '3':\
37+
case '4':\
38+
case '5':\
39+
case '6':\
40+
case '7':\
41+
case '8':\
42+
case '9'
43+
44+
#define ARGEND }\
45+
}
46+
47+
#define ARGC() argc_
48+
49+
#define ARGNUMF(base) (brk_ = 1, estrtol(argv[0], (base)))
50+
51+
#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
52+
((x), abort(), (char *)0) :\
53+
(brk_ = 1, (argv[0][1] != '\0')?\
54+
(&argv[0][1]) :\
55+
(argc--, argv++, argv[0])))
56+
57+
#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
58+
(char *)0 :\
59+
(brk_ = 1, (argv[0][1] != '\0')?\
60+
(&argv[0][1]) :\
61+
(argc--, argv++, argv[0])))
62+
63+
#endif

sic.c

+35-29
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
#include <time.h>
99
#include <unistd.h>
1010

11+
#include "arg.h"
1112
#include "config.h"
1213

14+
char *argv0;
1315
static char *host = DEFAULT_HOST;
1416
static char *port = DEFAULT_PORT;
1517
static char *password;
@@ -133,40 +135,44 @@ parsesrv(char *cmd) {
133135
}
134136
}
135137

138+
139+
static void
140+
usage(void) {
141+
eprint("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n", argv0);
142+
}
143+
136144
int
137145
main(int argc, char *argv[]) {
138-
int i, c;
139146
struct timeval tv;
140147
const char *user = getenv("USER");
148+
int n;
141149
fd_set rd;
142150

143151
strlcpy(nick, user ? user : "unknown", sizeof nick);
144-
for(i = 1; i < argc; i++) {
145-
c = argv[i][1];
146-
if(argv[i][0] != '-' || argv[i][2])
147-
c = -1;
148-
switch(c) {
149-
case 'h':
150-
if(++i < argc) host = argv[i];
151-
break;
152-
case 'p':
153-
if(++i < argc) port = argv[i];
154-
break;
155-
case 'n':
156-
if(++i < argc) strlcpy(nick, argv[i], sizeof nick);
157-
break;
158-
case 'k':
159-
if(++i < argc) password = argv[i];
160-
break;
161-
case 'v':
162-
eprint("sic-"VERSION", © 2005-2012 Kris Maglione, Anselm R. Garbe, Nico Golde\n");
163-
default:
164-
eprint("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n");
165-
}
166-
}
152+
ARGBEGIN {
153+
case 'h':
154+
host = EARGF(usage());
155+
break;
156+
case 'p':
157+
port = EARGF(usage());
158+
break;
159+
case 'n':
160+
strlcpy(nick, EARGF(usage()), sizeof nick);
161+
break;
162+
case 'k':
163+
password = EARGF(usage());
164+
break;
165+
case 'v':
166+
eprint("sic-"VERSION", © 2005-2014 Kris Maglione, Anselm R. Garbe, Nico Golde\n");
167+
break;
168+
default:
169+
usage();
170+
} ARGEND;
171+
167172
/* init */
168-
i = dial(host, port);
169-
srv = fdopen(i, "r+");
173+
srv = fdopen(dial(host, port), "r+");
174+
if (!srv)
175+
eprint("fdopen:");
170176
/* login */
171177
if(password)
172178
sout("PASS %s", password);
@@ -181,13 +187,13 @@ main(int argc, char *argv[]) {
181187
FD_SET(fileno(srv), &rd);
182188
tv.tv_sec = 120;
183189
tv.tv_usec = 0;
184-
i = select(fileno(srv) + 1, &rd, 0, 0, &tv);
185-
if(i < 0) {
190+
n = select(fileno(srv) + 1, &rd, 0, 0, &tv);
191+
if(n < 0) {
186192
if(errno == EINTR)
187193
continue;
188194
eprint("sic: error on select():");
189195
}
190-
else if(i == 0) {
196+
else if(n == 0) {
191197
if(time(NULL) - trespond >= 300)
192198
eprint("sic shutting down: parse timeout\n");
193199
sout("PING %s", host);

0 commit comments

Comments
 (0)