|
Message-ID: <959b7861-f028-02cc-5226-d7116aab8e2b@gmail.com> Date: Sun, 2 Aug 2020 20:24:29 +0200 From: Petr Skocik <pskocik@...il.com> To: musl@...ts.openwall.com Subject: Musl's FD_{SET,ISSET,CLR} macros from sys/select.h trigger gcc's -Wsign-conversion warnings Example: #include <sys/select.h> void f(int X) { fd_set set; FD_ZERO(&set); FD_SET(X,&set); FD_CLR(X+1,&set); (void)FD_ISSET(X+2,&set); } results in fds.c: In function ‘f’: fds.c:17:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] 17 | FD_SET(X,&set); | ^~~~~~ fds.c:17:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] fds.c:18:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] 18 | FD_CLR(X+1,&set); | ^~~~~~ fds.c:18:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] fds.c:19:8: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] 19 | (void)FD_ISSET(X+2,&set); | ^~~~~~~~ fds.c:19:8: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] on `gcc -Wconversion`. Adding an int-cast before each `sizeof` in the definition of these macros eliminates the warning: #define FD_SET(d, s) ((s)->fds_bits[(d)/(8*(int)sizeof(long))] |= (1UL<<((d)%(8*(int)sizeof(long))))) #define FD_CLR(d, s) ((s)->fds_bits[(d)/(8*(int)sizeof(long))] &= ~(1UL<<((d)%(8*(int)sizeof(long))))) #define FD_ISSET(d, s) !!((s)->fds_bits[(d)/(8*(int)sizeof(long))] & (1UL<<((d)%(8*(int)sizeof(long))))) You might want to add them. Regards, Petr Skocik
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.