Hello, Diego Nieto Cid, le dim. 28 sept. 2025 21:26:40 +0100, a ecrit: > Hello, > > While going through the warnings in the Hurd repo I found > the following: > > ../../utils/w.c:95:42: warning: result of '536870912 << 3' requires 34 > bits to represent, but 'int' only has 32 bits [-Wshift-overflow=] > 95 | #define W_PSTAT_LOGIN (PSTAT_USER_BASE << 3) > | ^~ > ../../utils/w.c:169:19: note: in expansion of macro 'W_PSTAT_LOGIN' > 169 | have |= (need & W_PSTAT_LOGIN); > | ^~~~~~~~~~~~~ > > PSTAT_USER_BASE is defined as > > libps/ps.h:#define PSTAT_USER_BASE 0x20000000 > > 'have' and 'need' are ps_flags_t which is defined as: > > libps/ps.h:typedef unsigned ps_flags_t; > > I'm not sure how to fix it in a portable way. It looks like ps_flags_t should > be a 64-bit integer and probably PSTAT_USER_BASE get an 'l' suffix. > > Something like below works, but I'm not sure about portability
unsigned long will not be 64b on 32b systems, so it'd have to be uint64_t. More importantly, changing the type of ps_flags_t will break dpkg and console-kit2, see https://codesearch.debian.net/search?q=%5Cbps_flags_t%5Cb&literal=0 so you need to care about backward compatibility by introducing another type, that programs will have to use explicitly to manipulate values beyond 32 bits. Samuel > and whether > other constants should also get the l prefix. > > Thanks, > Diego > > -- >8 -- >8 -- > > libps: make ps_flags_t 64-bit long. > > diff --git a/libps/ps.h b/libps/ps.h > index 3e59c66a..b89e5c14 100644 > --- a/libps/ps.h > +++ b/libps/ps.h > @@ -174,7 +174,7 @@ error_t ps_context_find_user (struct ps_context *pc, > uid_t uid, > /* A PROC_STAT holds lots of info about the process PID at SERVER; exactly > which info is dependent on its FLAGS field. */ > > -typedef unsigned ps_flags_t; > +typedef unsigned long ps_flags_t; > typedef unsigned ps_state_t; > > struct proc_stat > @@ -356,7 +356,7 @@ struct proc_stat > #define PSTAT_NO_MSGPORT 0x1000000 /* Don't use the msgport at all */ > > /* Bits from PSTAT_USER_BASE on up are available for user-use. */ > -#define PSTAT_USER_BASE 0x20000000 > +#define PSTAT_USER_BASE 0x20000000l > #define PSTAT_USER_MASK ~(PSTAT_USER_BASE - 1) > ^L > /* If the PSTAT_STATE flag is set, then the proc_stats state field holds a > -- Samuel I am the "ILOVEGNU" signature virus. Just copy me to your signature. This email was infected under the terms of the GNU General Public License.
