From 7d51a93567e7f1e70a0e7f006bdf8a248f94d1ee Mon Sep 17 00:00:00 2001 From: Nakidai Date: Tue, 10 Feb 2026 17:31:35 +0300 Subject: Factor writechanf() calls out to a macro As they will anyway repeat a lot of times, it's better to make a macro for that. Also now this look better and printing doesn't take too much attention within a block of logic --- handle.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/handle.c b/handle.c index 0b8e557..377a95e 100644 --- a/handle.c +++ b/handle.c @@ -98,6 +98,13 @@ mode_channel(struct Message *msg, struct Peer *peer) ensure(modes & CHANNEL_OPER || peer->modes & OPER, reply(peer, 482, channel->name), 0); +/* to not repeat this each time... */ +#define announce_change(issingle) writechanf( \ + 0, channel, \ + issingle ? ":%s!%s@%s MODE %s %c%c" : ":%s!%s@%s MODE %s %c%c %s", \ + getnick(peer), peer->user, peer->host, channel->name, \ + parsed->set ? '+' : '-', parsed->mode, parsed->param \ +) parsed = channel_modes_parse(msg); for (; parsed->param || parsed->mode; ++parsed) switch (parsed->mode) { @@ -109,34 +116,14 @@ mode_channel(struct Message *msg, struct Peer *peer) break; ensure(i != channel->peers_c, reply(peer, 441, parsed->param, channel->name), 0); - writechanf( - 0, - channel, - ":%s!%s@%s MODE %s %co %s", - getnick(peer), - peer->user, - peer->host, - channel->name, - parsed->set ? '+' : '-', - parsed->param - ); - + announce_change(0); if (parsed->set) channel->peers[i].modes |= CHANNEL_OPER; else channel->peers[i].modes &= ~CHANNEL_OPER; break; case 's': /* TODO: implement +s. For now it's just a some mode with no param */ - writechanf( - 0, - channel, - ":%s!%s@%s MODE %s %cs", - getnick(peer), - peer->user, - peer->host, - channel->name, - parsed->set ? '+' : '-' - ); + announce_change(1); if (parsed->set) channel->modes |= CHANNEL_SECRET; else @@ -147,6 +134,7 @@ mode_channel(struct Message *msg, struct Peer *peer) reply(peer, 472, modebuf, channel->name); return 0; } +#undef announce_change return 0; } -- cgit 1.4.1