Introduction
Introduction Statistics Contact Development Disclaimer Help
Always clean before exit - ii - irc it, simple FIFO based irc client
git clone git://git.suckless.org/ii
Log
Files
Refs
README
LICENSE
---
commit c25c3793466e2516395e40e2061134ffe553cfe8
parent 39907c79a4c5509db8500b4ad3fb7947eb7b94d9
Author: Petr VanÄ›k <[email protected]>
Date: Thu, 29 Sep 2022 10:40:48 +0200
Always clean before exit
This improves situations when ii exits unexpectedly, due to a ping
timeout or closed remote connection, for example. If this happens, all
"in" FIFOs are removed before exit in similar fashion to regular exit
issued with "/q" command.
Diffstat:
M ii.c | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
---
diff --git a/ii.c b/ii.c
@@ -54,6 +54,7 @@ static int channel_open(Channel *);
static void channel_print(Channel *, const char *);
static int channel_reopen(Channel *);
static void channel_rm(Channel *);
+static void clean(void);
static void create_dirtree(const char *);
static void create_filepath(char *, size_t, const char *, const char *, c…
static void die(const char *, ...);
@@ -92,6 +93,8 @@ die(const char *fmt, ...)
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
+
+ clean();
exit(1);
}
@@ -171,6 +174,20 @@ channel_normalize_name(char *s)
}
static void
+clean(void)
+{
+ Channel *c, *tmp;
+
+ if (channelmaster)
+ channel_leave(channelmaster);
+
+ for (c = channels; c; c = tmp) {
+ tmp = c->next;
+ channel_leave(c);
+ }
+}
+
+static void
create_filepath(char *filepath, size_t len, const char *path,
const char *channel, const char *suffix)
{
@@ -757,6 +774,7 @@ run(int ircfd, const char *host)
} else if (r == 0) {
if (time(NULL) - last_response >= PING_TIMEOUT) {
channel_print(channelmaster, "-!- ii shutting …
+ clean();
exit(2); /* status code 2 for timeout */
}
ewritestr(ircfd, ping_msg);
@@ -777,7 +795,6 @@ run(int ircfd, const char *host)
int
main(int argc, char *argv[])
{
- Channel *c, *tmp;
struct passwd *spw;
const char *key = NULL, *fullname = NULL, *host = "";
const char *uds = NULL, *service = "6667";
@@ -843,13 +860,7 @@ main(int argc, char *argv[])
loginuser(ircfd, host, fullname && *fullname ? fullname : nick);
setup();
run(ircfd, host);
- if (channelmaster)
- channel_leave(channelmaster);
-
- for (c = channels; c; c = tmp) {
- tmp = c->next;
- channel_leave(c);
- }
+ clean();
return 0;
}
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.