| 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); |
| } |