Index: cvs-1.12.12/lib/openat.c =================================================================== --- cvs-1.12.12.orig/lib/openat.c +++ cvs-1.12.12/lib/openat.c @@ -55,9 +55,13 @@ rpl_openat (int fd, char const *filename va_list arg; va_start (arg, flags); - /* Assume that mode_t is passed compatibly with mode_t's type - after argument promotion. */ - mode = va_arg (arg, mode_t); + /* If mode_t is narrower than int, use the promoted type (int), + not mode_t. Use sizeof to guess whether mode_t is nerrower; + we don't know of any practical counterexamples. */ + if (sizeof (mode_t) < sizeof (int)) + mode = va_arg (arg, int); + else + mode = va_arg (arg, mode_t); va_end (arg); }