---
ii.c | 63 +++++++++++++++++++++++++++++++++------------------------------
1 file changed, 33 insertions(+), 30 deletions(-)
diff --git a/ii.c b/ii.c
index 283a415..760cc99 100644
--- a/ii.c
+++ b/ii.c
_AT_@ -35,7 +35,7 @@ struct Channel {
static time_t last_response = 0;
static Channel *channels = NULL;
static char nick[32]; /* might change while running */
-static char path[_POSIX_PATH_MAX]; /* irc dir (-i) */
+static char path[PATH_MAX]; /* irc dir (-i) */
static char msg[IRC_MSG_MAX]; /* message buf used for communication */
static void
_AT_@ -46,7 +46,7 @@ usage(void) {
}
static char *
-striplower(char *s) {
+normalizechannel(char *s) {
char *p = NULL;
for(p = s; p && *p; p++) {
_AT_@ -60,7 +60,7 @@ striplower(char *s) {
/* creates directories bottom-up, if necessary */
static void
create_dirtree(const char *dir) {
- char tmp[_POSIX_PATH_MAX];
+ char tmp[PATH_MAX];
char *p = NULL;
struct stat st = { 0 };
size_t len;
_AT_@ -88,7 +88,7 @@ create_filepath(char *filepath, size_t len, char *channel, char *suffix) {
const char *e = "ii: path to irc directory too long\n";
if(channel && channel[0]) {
- striplower(channel);
+ normalizechannel(channel);
if(snprintf(filepath, len, "%s/%s", path, channel) <= 0)
eprintf(e);
create_dirtree(filepath);
_AT_@ -100,7 +100,7 @@ create_filepath(char *filepath, size_t len, char *channel, char *suffix) {
static int
open_channel(char *name) {
- char infile[_POSIX_PATH_MAX];
+ char infile[PATH_MAX];
create_filepath(infile, sizeof(infile), name, "in");
if(access(infile, F_OK) == -1)
_AT_@ -114,7 +114,7 @@ add_channel(char *cname) {
int fd;
char *name;
- name = striplower(cname);
+ name = normalizechannel(cname);
for(c = channels; c; c = c->next)
if(!strcmp(name, c->name))
return; /* already handled */
_AT_@ -127,12 +127,9 @@ add_channel(char *cname) {
if(!(c = calloc(1, sizeof(Channel))))
eprintf("ii: cannot allocate memory:");
- if(!channels)
- channels = c;
- else {
+ if(channels)
c->next = channels;
- channels = c;
- }
+ channels = c;
c->fd = fd;
c->name = strdup(name);
}
_AT_@ -141,9 +138,9 @@ static void
rm_channel(Channel *c) {
Channel *p;
- if(channels == c)
+ if(channels == c) {
channels = channels->next;
- else {
+ } else {
for(p = channels; p && p->next != c; p = p->next);
if(p->next == c)
p->next = c->next;
_AT_@ -192,6 +189,15 @@ tcpopen(const char *host, const char *service) {
return fd;
}
+static int
+isnumeric(const char *s) {
+ if(!s)
+ return 0;
+ errno = 0;
+ strtol(s, NULL, 10);
+ return errno == 0;
+}
+
static size_t
tokenize(char **result, size_t reslen, char *str, char delim) {
char *p = NULL, *n = NULL;
_AT_@ -204,14 +210,15 @@ tokenize(char **result, size_t reslen, char *str, char delim) {
while(*n != '\0') {
if(i >= reslen)
return 0;
- if(i > TOK_CHAN - TOK_CMD && strtol(result[0], NULL, 10) > 0)
+ if(i > TOK_CHAN - TOK_CMD && isnumeric(result[0]))
delim = ':'; /* workaround non-RFC compliant messages */
if(*n == delim) {
*n = '\0';
result[i++] = p;
p = ++n;
- } else
+ } else {
n++;
+ }
}
if(i < reslen && p < n && p && *p)
result[i++] = p;
_AT_@ -220,8 +227,7 @@ tokenize(char **result, size_t reslen, char *str, char delim) {
static void
print_out(char *channel, char *buf) {
- char outfile[_POSIX_PATH_MAX];
- char buft[18] = "";
+ char outfile[PATH_MAX], buft[18] = "";
FILE *out = NULL;
time_t t = time(NULL);
_AT_@ -251,7 +257,7 @@ proc_channels_privmsg(int fd, char *channel, char *buf) {
static void
proc_channels_input(int fd, Channel *c, char *buf) {
- char infile[_POSIX_PATH_MAX];
+ char infile[PATH_MAX];
char *p = NULL;
size_t buflen;
_AT_@ -309,7 +315,7 @@ proc_channels_input(int fd, Channel *c, char *buf) {
snprintf(msg, sizeof(msg), "PART %s :%s\r\n", c->name, &buf[3]);
else
snprintf(msg, sizeof(msg),
- "PART %s :ii - 500 SLOC are too much\r\n", c->name);
+ "PART %s :leaving\r\n", c->name);
write(fd, msg, strnlen(msg, sizeof(msg)));
close(c->fd);
/* remove "in" file on leaving the channel */
_AT_@ -355,13 +361,15 @@ proc_server_cmd(int fd, char *buf) {
*p = '\0';
argv[TOK_USER] = ++p;
}
- } else
+ } else {
cmd = buf;
+ }
/* remove CRLFs */
- for(p = cmd; p && *p != '\0'; p++)
+ for(p = cmd; p && *p != '\0'; p++) {
if(*p == '\r' || *p == '\n')
*p = '\0';
+ }
if((p = strchr(cmd, ':'))) {
*p = '\0';
_AT_@ -452,8 +460,7 @@ handle_channels_input(int ircfd, Channel *c) {
if(read_line(c->fd, buf, sizeof(buf)) == -1) {
close(c->fd);
- fd = open_channel(c->name);
- if(fd != -1)
+ if((fd = open_channel(c->name)) != -1)
c->fd = fd;
else
rm_channel(c);
_AT_@ -489,7 +496,6 @@ run(int ircfd, char *host) {
maxfd = c->fd;
FD_SET(c->fd, &rd);
}
-
tv.tv_sec = 120;
tv.tv_usec = 0;
r = select(maxfd + 1, &rd, 0, 0, &tv);
_AT_@ -509,9 +515,10 @@ run(int ircfd, char *host) {
handle_server_output(ircfd);
last_response = time(NULL);
}
- for(c = channels; c; c = c->next)
+ for(c = channels; c; c = c->next) {
if(FD_ISSET(c->fd, &rd))
handle_channels_input(ircfd, c);
+ }
}
}
_AT_@ -519,7 +526,7 @@ int
main(int argc, char *argv[]) {
struct passwd *spw;
char *key = NULL, *fullname = NULL, *host = "";
- char prefix[_POSIX_PATH_MAX], *service = "6667";
+ char prefix[PATH_MAX], *service = "6667";
int ircfd;
/* use nickname and home dir of user for ii by default */
_AT_@ -529,10 +536,6 @@ main(int argc, char *argv[]) {
snprintf(prefix, sizeof(prefix), "%s/irc", spw->pw_dir);
ARGBEGIN {
- case 'h':
- case 'v':
- usage();
- break;
case 'i':
strlcpy(prefix, EARGF(usage()), sizeof(prefix));
break;
--
2.4.10
--Multipart=_Mon__9_May_2016_17_21_10_+0200_I.6cpFVydhq75aaE
Content-Type: text/x-diff;
name="0041-overhaul-v2.patch"
Content-Disposition: attachment;
filename="0041-overhaul-v2.patch"
Content-Transfer-Encoding: quoted-printable
Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Mon May 09 2016 - 17:24:22 CEST