tentative fix for ppc64 problems with ioctl.
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 21 Apr 2008 03:23:59 +0000 (03:23 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 21 Apr 2008 03:23:59 +0000 (03:23 -0000)
Zero code size impact.

include/libbb.h
libbb/xfuncs_printf.c

index f9f28f9836d34e97f052b7c80fc168240cffb513..7a8bfdffbd9c2c4f842e4c29b8cc1514d680d44a 100644 (file)
@@ -1019,16 +1019,17 @@ extern int update_passwd(const char *filename, const char *username,
 /* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
 int get_terminal_width_height(int fd, int *width, int *height);
 
-int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
-int ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
+/* NB: "unsigned request" is crucial! "int request" will break some arches! */
+int ioctl_or_perror(int fd, unsigned request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
+int ioctl_or_perror_and_die(int fd, unsigned request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
 #if ENABLE_IOCTL_HEX2STR_ERROR
-int bb_ioctl_or_warn(int fd, int request, void *argp, const char *ioctl_name);
-int bb_xioctl(int fd, int request, void *argp, const char *ioctl_name);
+int bb_ioctl_or_warn(int fd, unsigned request, void *argp, const char *ioctl_name);
+int bb_xioctl(int fd, unsigned request, void *argp, const char *ioctl_name);
 #define ioctl_or_warn(fd,request,argp) bb_ioctl_or_warn(fd,request,argp,#request)
 #define xioctl(fd,request,argp)        bb_xioctl(fd,request,argp,#request)
 #else
-int bb_ioctl_or_warn(int fd, int request, void *argp);
-int bb_xioctl(int fd, int request, void *argp);
+int bb_ioctl_or_warn(int fd, unsigned request, void *argp);
+int bb_xioctl(int fd, unsigned request, void *argp);
 #define ioctl_or_warn(fd,request,argp) bb_ioctl_or_warn(fd,request,argp)
 #define xioctl(fd,request,argp)        bb_xioctl(fd,request,argp)
 #endif
index dd8687dc61448006a44e11a0da9ac78d6bc97c17..d3fb39f04a290a669d01bc44c266079d46d12532 100644 (file)
@@ -451,7 +451,7 @@ void selinux_or_die(void)
 #endif
 }
 
-int ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...)
+int ioctl_or_perror_and_die(int fd, unsigned request, void *argp, const char *fmt,...)
 {
        int ret;
        va_list p;
@@ -467,7 +467,7 @@ int ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...
        return ret;
 }
 
-int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...)
+int ioctl_or_perror(int fd, unsigned request, void *argp, const char *fmt,...)
 {
        va_list p;
        int ret = ioctl(fd, request, argp);
@@ -481,7 +481,7 @@ int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...)
 }
 
 #if ENABLE_IOCTL_HEX2STR_ERROR
-int bb_ioctl_or_warn(int fd, int request, void *argp, const char *ioctl_name)
+int bb_ioctl_or_warn(int fd, unsigned request, void *argp, const char *ioctl_name)
 {
        int ret;
 
@@ -490,7 +490,7 @@ int bb_ioctl_or_warn(int fd, int request, void *argp, const char *ioctl_name)
                bb_simple_perror_msg(ioctl_name);
        return ret;
 }
-int bb_xioctl(int fd, int request, void *argp, const char *ioctl_name)
+int bb_xioctl(int fd, unsigned request, void *argp, const char *ioctl_name)
 {
        int ret;
 
@@ -500,7 +500,7 @@ int bb_xioctl(int fd, int request, void *argp, const char *ioctl_name)
        return ret;
 }
 #else
-int bb_ioctl_or_warn(int fd, int request, void *argp)
+int bb_ioctl_or_warn(int fd, unsigned request, void *argp)
 {
        int ret;
 
@@ -509,7 +509,7 @@ int bb_ioctl_or_warn(int fd, int request, void *argp)
                bb_perror_msg("ioctl %#x failed", request);
        return ret;
 }
-int bb_xioctl(int fd, int request, void *argp)
+int bb_xioctl(int fd, unsigned request, void *argp)
 {
        int ret;