22 lines
761 B
Diff
22 lines
761 B
Diff
|
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);
|
||
|
}
|