# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.483   -> 1.484  
#       drivers/usb/class/printer.c     1.26    -> 1.27   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/06/13      [EMAIL PROTECTED]     1.484
# [PATCH] usblp_ioctl for non-little-endian machines
# 
# ioctl(LPGETSTATUS) is known to put the status into  an  int.  The  usblp
# driver has a problem in this area as it does not put it into an int  but
# into a char. Let's see :
# 
# from drivers/char/lp.c : lp_ioctl :
#     int status
#     copy_to_user((int *) arg, &status, sizeof(int))
# 
# from drivers/usb/printer.c : usblp_ioctl :
#     unsigned char status;
#     copy_to_user ((unsigned char *)arg, &status, 1)
# 
# Even though in  most  cases  it  can  work  unnoticed  on  little-endian
# machines ;o), it's broken on non-little-endian machines (I got bitten on
# PPC).
# --------------------------------------------
#
diff -Nru a/drivers/usb/class/printer.c b/drivers/usb/class/printer.c
--- a/drivers/usb/class/printer.c       Fri Jun 14 14:15:30 2002
+++ b/drivers/usb/class/printer.c       Fri Jun 14 14:15:30 2002
@@ -418,7 +418,8 @@
 {
        struct usblp *usblp = file->private_data;
        int length, err, i;
-       unsigned char status, newChannel;
+       unsigned char lpstatus, newChannel;
+       int status;
        int twoints[2];
        int retval = 0;
 
@@ -569,12 +570,13 @@
                switch (cmd) {
 
                        case LPGETSTATUS:
-                               if (usblp_read_status(usblp, &status)) {
+                               if (usblp_read_status(usblp, &lpstatus)) {
                                        err("usblp%d: failed reading printer status", 
usblp->minor);
                                        retval = -EIO;
                                        goto done;
                                }
-                               if (copy_to_user ((unsigned char *)arg, &status, 1))
+                               status = lpstatus;
+                               if (copy_to_user ((int *)arg, &status, sizeof(int)))
                                        retval = -EFAULT;
                                break;
 

_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas - 
http://devcon.sprintpcs.com/adp/index.cfm?source=osdntextlink

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to