I know that the standard doesn't say anything about the signedness of uid_t
or gid_t
.
Page http://www.gnu.org/software/libc/manual/html_node/Reading-Persona.html says:
In the GNU C Library, this is an alias for unsigned int.
But man setreuid
says:
Supplying a value of -1 for either the real or effective user ID forces the system to leave that ID unchanged.
So, is uid_t
signed or unsigned in the GNU Library?
How can I supply -1
if uid_t
and gid_t
are unsigned (-1
will be converted to 0xFFFFFFFF
)?
POSIX says explicitly that pid_t
is a signed integer type used for representing process and process group IDs.
It says that ino_t
is an unsigned integer type used for file serial numbers.
For both uid_t
and gid_t
, it says that the type is an integer type (no mention of signed or unsigned) used for user IDs and group IDS.
Thus, the standard clearly states that the type of uid_t
and gid_t
can be signed or unsigned depending on the platform. It is very reasonable to suppose that this indeterminacy arose because actual implementations used both signed and unsigned types, and the standard was designed not to invalidate existing implementations.