nio

a simple irc client
git clone git@git.kloet.net/nio.git
Download | Log | Files | Refs | README

commit 0e07631cb4b92b74d6fe7c027d41cd7cc80e576d
parent b4cb5ca9f3f17b5b179e14f9cec4a60eae62b393
Author: Andrew Kloet <andrew@kloet.net>
Date:   Sun, 29 Mar 2026 01:45:32 -0400

cleanup

Diffstat:
D.gitignore | 3---
MMakefile | 4++--
Mnio.1 | 2+-
Mnio.c | 122+++++++++++++++++++++++++------------------------------------------------------
4 files changed, 41 insertions(+), 90 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,2 +0,0 @@ -irc -*.sw[po] -\ No newline at end of file diff --git a/Makefile b/Makefile @@ -1,7 +1,7 @@ BIN = nio -CFLAGS = -std=c99 -Os -D_POSIX_C_SOURCE=201112 -D_GNU_SOURCE -D_XOPEN_CURSES -D_XOPEN_SOURCE_EXTENDED=1 -D_DEFAULT_SOURCE -D_BSD_SOURCE -LDLIBS = -lncursesw -lssl -lcrypto +CFLAGS = -std=c99 -Os -Wall -Wextra -Wpedantic -D_POSIX_C_SOURCE=201112 -D_GNU_SOURCE -D_XOPEN_CURSES -D_XOPEN_SOURCE_EXTENDED=1 -D_DEFAULT_SOURCE -D_BSD_SOURCE +LDLIBS = -lncursesw -lssl -lcrypto -ltinfo PREFIX=/usr/local diff --git a/nio.1 b/nio.1 @@ -152,6 +152,6 @@ m nickserv cert add .El . .Sh AUTHORS +.An Andrew Kloet Aq Mt andrew@kloet.net .An Quentin Carbonneaux Aq Mt qcarbonneaux@gmail.com .An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org -.An Andrew Kloet Aq Mt andrew@kloet.net diff --git a/nio.c b/nio.c @@ -67,8 +67,7 @@ enum { typedef wchar_t Rune; static struct { - int x; - int y; + size_t x, y; WINDOW *sw, *mw, *iw; } scr; @@ -157,28 +156,6 @@ utf8decode(char *c, Rune *u, size_t clen) return len; } -static char -utf8encodebyte(Rune u, size_t i) -{ - return utfbyte[i] | (u & ~utfmask[i]); -} - -static size_t -utf8encode(Rune u, char *c) -{ - size_t len, i; - - len = utf8validate(&u, 0); - if (len > UtfSz) - return 0; - for (i = len - 1; i != 0; --i) { - c[i] = utf8encodebyte(u, 0); - u >>= 6; - } - c[0] = utf8encodebyte(u, len); - return len; -} - static int is_empty(const char *str) { return (str == NULL || str[0] == '\0'); @@ -274,27 +251,26 @@ static char * dial(const char *host, const char *service) { struct addrinfo hints, *res = NULL, *rp; - int fd = -1, e; + int fd = -1; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; /* allow IPv4 or IPv6 */ hints.ai_flags = AI_NUMERICSERV; /* avoid name lookup for port */ hints.ai_socktype = SOCK_STREAM; - if ((e = getaddrinfo(host, service, &hints, &res))) + if (getaddrinfo(host, service, &hints, &res)) return "Getaddrinfo failed."; for (rp = res; rp; rp = rp->ai_next) { - if ((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) - continue; - if (connect(fd, res->ai_addr, res->ai_addrlen) == -1) { - close(fd); + fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (fd == -1) continue; - } - break; + if (connect(fd, rp->ai_addr, rp->ai_addrlen) == 0) + break; + close(fd); + fd = -1; } freeaddrinfo(res); - if (fd == -1) + if ((srv.fd = fd) == -1) return "Cannot connect to host."; - srv.fd = fd; if (ssl) { SSL_load_error_strings(); SSL_library_init(); @@ -322,19 +298,11 @@ dial(const char *host, const char *service) static void hangup(void) { - if (srv.ssl) { - SSL_shutdown(srv.ssl); - SSL_free(srv.ssl); - srv.ssl = 0; - } - if (srv.fd) { - close(srv.fd); - srv.fd = 0; - } - if (srv.ctx) { - SSL_CTX_free(srv.ctx); - srv.ctx = 0; - } + if (srv.ssl) SSL_shutdown(srv.ssl); + SSL_free(srv.ssl); + if (srv.fd) close(srv.fd); + SSL_CTX_free(srv.ctx); + memset(&srv, 0, sizeof(srv)); } static inline int @@ -376,7 +344,9 @@ chadd(const char *name, int joined) static int chdel(char *name) { - int n = chfind(name); if (n <= 0) return 0; + int n = chfind(name); + + if (n <= 0) return 0; free(chl[n].buf); nch--; if (n < nch) /* Shift the channel buffers down. */ @@ -390,7 +360,8 @@ chdel(char *name) static char * pushl(char *p, char *e) { - int x, cl; + size_t x; + int cl; char *w; Rune u[2]; cchar_t cc; @@ -409,7 +380,7 @@ pushl(char *p, char *e) w++; x += p - w; } - if (p >= e || *p == ' ' || p - w + INDENT >= scr.x - 1) { + if (p >= e || *p == ' ' || p - w + INDENT >= (ptrdiff_t)scr.x - 1) { while (w < p) { w += utf8decode(w, u, UtfSz); if (wcwidth(*u) > 0 || *u == '\n') { @@ -417,8 +388,7 @@ pushl(char *p, char *e) wadd_wch(scr.mw, &cc); } } - if (p >= e) - return e; + if (p >= e) return e; } p += utf8decode(p, u, UtfSz); if ((cl = wcwidth(*u)) >= 0) @@ -454,7 +424,6 @@ pushf(int cn, const char *fmt, ...) s = c->eol + n; n += vsnprintf(s, LineLen - n - 1, fmt, vl); va_end(vl); - if (logfp) { fprintf(logfp, "%-12.12s\t%04d-%02d-%02dT%02d:%02d:%02dZ\t%s\n", c->name, @@ -462,7 +431,6 @@ pushf(int cn, const char *fmt, ...) gmtm->tm_hour, gmtm->tm_min, gmtm->tm_sec, s); fflush(logfp); } - strcat(c->eol, "\n"); if (n >= LineLen - 1) c->eol += LineLen - 1; @@ -486,21 +454,18 @@ scmd(char *usr, char *cmd, char *par, char *data) char *pm = strtok(par, " "); char *chan; - for (int i = 0; i < sizeof(cmd_map)/sizeof(cmd_map[0]); i++) { + for (size_t i = 0; i < sizeof(cmd_map)/sizeof(cmd_map[0]); i++) { if (!strcmp(cmd, cmd_map[i].name)) { type = cmd_map[i].id; break; } } - if (!usr) usr = "?"; else { char *bang = strchr(usr, '!'); - if (bang) - *bang = 0; + if (bang) *bang = 0; } - switch (type) { case PRIVMSG: if (!pm || !data) break; @@ -593,11 +558,9 @@ uparse(char *m) if (!p[0] || (p[1] != ' ' && p[1] != 0)) { pmsg: - if (ch == 0) - return; + if (ch == 0) return; m += strspn(m, " "); - if (!*m) - return; + if (!*m) return; pushf(ch, PFMT, nick, m); sndf("PRIVMSG %s :%s", chl[ch].name, m); return; @@ -617,14 +580,13 @@ uparse(char *m) case 'l': /* Leave channels. */ p += 1 + (p[1] == ' '); if (!*p) { - if (ch == 0) - return; /* Cannot leave server window. */ - strcat(p, chl[ch].name); + if (ch == 0) return; /* Cannot leave server window. */ + p = chl[ch].name; } p = strtok(p, " "); while (p) { - if (chdel(p)) - sndf("PART %s", p); + if (chdel(p) && strchr("&#!+", p[0])) + sndf("PART %s", p); /* PART should not be sent for users. */ p = strtok(0, " "); } tredraw(); @@ -651,8 +613,7 @@ uparse(char *m) static void sigwinch(int sig) { - if (sig) - winchg = 1; + if (sig) winchg = 1; } static void @@ -688,8 +649,7 @@ tresize(void) winchg = 0; if (ioctl(0, TIOCGWINSZ, &ws) < 0) panic("Ioctl (TIOCGWINSZ) failed."); - if (ws.ws_row <= 2) - return; + if (ws.ws_row <= 2) return; resizeterm(scr.y = ws.ws_row, scr.x = ws.ws_col); wresize(scr.mw, scr.y - 2, scr.x); wresize(scr.iw, 1, scr.x); @@ -721,7 +681,7 @@ tredraw(void) c->n -= i; } q = p; - while (nl < scr.y - 2) { + while (nl < (int)scr.y - 2) { while (*q != '\n' && q > c->buf) q--; nl++; @@ -746,7 +706,6 @@ tdrawbar(void) for (l = 0; fst > 0 && l < scr.x / 2; fst--) l += strlen(chl[fst].name) + 3; - werase(scr.sw); for (l = 0; fst < nch && l < scr.x; fst++) { char *p = chl[fst].name; @@ -819,30 +778,26 @@ tgetch(void) dirty = len = cu; break; case CTRL('u'): - if (cu == 0) - return; + if (cu == 0) return; len -= cu; memmove(l, &l[cu], len); dirty = cu = 0; break; case CTRL('d'): - if (cu >= len) - return; + if (cu >= len) return; memmove(&l[cu], &l[cu + 1], len - cu - 1); dirty = cu; len--; break; case CTRL('h'): case KEY_BACKSPACE: - if (cu == 0) - return; + if (cu == 0) return; memmove(&l[cu - 1], &l[cu], len - cu); dirty = --cu; len--; break; case CTRL('w'): - if (cu == 0) - break; + if (cu == 0) break; i = 1; while (l[cu - i] == ' ' && cu - i != 0) i++; while (l[cu - i] != ' ' && cu - i != 0) i++; @@ -949,8 +904,7 @@ main(int argc, char *argv[]) goto usage; tinit(); err = dial(server, port); - if (err) - panic(err); + if (err) panic(err); chadd(server, 0); sinit(nick, user); reconn = 0;