From ad1065e213dddc0fc2bbb94a5522dd7cf75b637a Mon Sep 17 00:00:00 2001 From: Alex O'Brien <3541ax@gmail.com> Date: Sun, 6 Mar 2022 20:50:19 +1100 Subject: [PATCH] LibC: Remove semicolon in definition of FD_ZERO This causes problems in code of the form if (/* condition */) FD_ZERO(&thing); else do_other_thing(); Wrapping the call to memset() in a do/while block fixes the issue. --- Userland/Libraries/LibC/fd_set.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibC/fd_set.h b/Userland/Libraries/LibC/fd_set.h index 5a6379acaac1c2..74079d9304b228 100644 --- a/Userland/Libraries/LibC/fd_set.h +++ b/Userland/Libraries/LibC/fd_set.h @@ -7,7 +7,10 @@ #pragma once #define FD_SETSIZE 1024 -#define FD_ZERO(set) memset((set), 0, sizeof(fd_set)); +#define FD_ZERO(set) \ + do { \ + memset((set), 0, sizeof(fd_set)); \ + } while (0) #define FD_CLR(fd, set) ((set)->fds_bits[(fd / 8)] &= ~(1 << (fd) % 8)) #define FD_SET(fd, set) ((set)->fds_bits[(fd / 8)] |= (1 << (fd) % 8)) #define FD_ISSET(fd, set) ((set)->fds_bits[(fd / 8)] & (1 << (fd) % 8))