Hello, A friend asked me why he was getting warnings about conversion of unsigned to signed, when calling chown() with:
chown("/dev/null", -1, -1); The manpage of chown has a prototype of: int chown(const char *path, uid_t owner, gid_t group); But the manpage mentions that (uid_d)-1 is the right value for a chown operation that wants to leave the user part of the owner:group set unchanged. After a bit of research he found that the definition of uid_t was (unsigned int) and that's why -1 was giving him warnings. But the fun doesn't stop there... The implementation of chown in vfs_syscalls.c uses `int' as the type of the two uid_t/gid_t arguments in the *uap argument, and then calls setfown() which accepts uid_t and gid_t !!! Then setfown() copies the values in a `struct vattr' at the va_uid and va_gid members, which are also uid_t and gid_t. The only place where the uid & gid arguments of chown() are int and not uid_t and gid_t is in the prototype of the system call itself. Is this really necessary? Is there a reason behind it? -- FreeBSD: The Power to Serve -- http://www.FreeBSD.org To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message