Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / isdn / sc / ioctl.c
index 70e0faa..f4f7122 100644 (file)
@@ -14,7 +14,6 @@
 
 extern int indicate_status(int, int, unsigned long, char *);
 extern int startproc(int);
-extern int loadproc(int, char *record);
 extern int reset(int);
 extern int send_and_receive(int, unsigned int, unsigned char,unsigned char,
                unsigned char,unsigned char, 
@@ -23,7 +22,7 @@ extern int send_and_receive(int, unsigned int, unsigned char,unsigned char,
 extern board *sc_adapter[];
 
 
-int GetStatus(int card, boardInfo *);
+static int GetStatus(int card, boardInfo *);
 
 /*
  * Process private IOCTL messages (typically from scctrl)
@@ -47,7 +46,8 @@ int sc_ioctl(int card, scs_ioctl *data)
                pr_debug("%s: SCIOCRESET: ioctl received\n",
                        sc_adapter[card]->devicename);
                sc_adapter[card]->StartOnReset = 0;
-               return (reset(card));
+               kfree(rcvmsg);
+               return reset(card);
        }
 
        case SCIOCLOAD:
@@ -72,14 +72,14 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Get the SRec from user space
                 */
-               if (copy_from_user(srec, (char *) data->dataptr, sizeof(srec))) {
+               if (copy_from_user(srec, data->dataptr, SCIOC_SRECSIZE)) {
                        kfree(rcvmsg);
                        kfree(srec);
                        return -EFAULT;
                }
 
                status = send_and_receive(card, CMPID, cmReqType2, cmReqClass0, cmReqLoadProc,
-                               0, sizeof(srec), srec, rcvmsg, SAR_TIMEOUT);
+                               0, SCIOC_SRECSIZE, srec, rcvmsg, SAR_TIMEOUT);
                kfree(rcvmsg);
                kfree(srec);
 
@@ -118,8 +118,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Get the switch type from user space
                 */
-               if (copy_from_user(&switchtype, (char *)data->dataptr,
-                                  sizeof(char))) {
+               if (copy_from_user(&switchtype, data->dataptr, sizeof(char))) {
                        kfree(rcvmsg);
                        return -EFAULT;
                }
@@ -152,7 +151,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                 * Get the switch type from the board
                 */
                status = send_and_receive(card, CEPID, ceReqTypeCall, ceReqClass0, 
-                       ceReqCallGetSwitchType, 0, 0, 0, rcvmsg, SAR_TIMEOUT);
+                       ceReqCallGetSwitchType, 0, 0, NULL, rcvmsg, SAR_TIMEOUT);
                if (!status && !(rcvmsg->rsp_status)) {
                        pr_debug("%s: SCIOCGETSWITCH: command successful\n",
                                        sc_adapter[card]->devicename);
@@ -169,7 +168,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Package the switch type and send to user space
                 */
-               if (copy_to_user((char *)data->dataptr, &switchtype,
+               if (copy_to_user(data->dataptr, &switchtype,
                                 sizeof(char))) {
                        kfree(rcvmsg);
                        return -EFAULT;
@@ -185,7 +184,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                                sc_adapter[card]->devicename);
 
                spid = kmalloc(SCIOC_SPIDSIZE, GFP_KERNEL);
-               if(!spid) {
+               if (!spid) {
                        kfree(rcvmsg);
                        return -ENOMEM;
                }
@@ -193,14 +192,14 @@ int sc_ioctl(int card, scs_ioctl *data)
                 * Get the spid from the board
                 */
                status = send_and_receive(card, CEPID, ceReqTypeCall, ceReqClass0, ceReqCallGetSPID,
-                                       data->channel, 0, 0, rcvmsg, SAR_TIMEOUT);
+                                       data->channel, 0, NULL, rcvmsg, SAR_TIMEOUT);
                if (!status) {
                        pr_debug("%s: SCIOCGETSPID: command successful\n",
                                        sc_adapter[card]->devicename);
-               }
-               else {
+               } else {
                        pr_debug("%s: SCIOCGETSPID: command failed (status = %d)\n",
                                sc_adapter[card]->devicename, status);
+                       kfree(spid);
                        kfree(rcvmsg);
                        return status;
                }
@@ -209,7 +208,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Package the switch type and send to user space
                 */
-               if (copy_to_user((char *)data->dataptr, spid, SCIOC_SPIDSIZE)) {
+               if (copy_to_user(data->dataptr, spid, SCIOC_SPIDSIZE)) {
                        kfree(spid);
                        kfree(rcvmsg);
                        return -EFAULT;
@@ -234,7 +233,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Get the spid from user space
                 */
-               if (copy_from_user(spid, (char *) data->dataptr, SCIOC_SPIDSIZE)) {
+               if (copy_from_user(spid, data->dataptr, SCIOC_SPIDSIZE)) {
                        kfree(rcvmsg);
                        return -EFAULT;
                }
@@ -269,7 +268,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                 * Get the dn from the board
                 */
                status = send_and_receive(card, CEPID, ceReqTypeCall, ceReqClass0, ceReqCallGetMyNumber,
-                                       data->channel, 0, 0, rcvmsg, SAR_TIMEOUT);
+                                       data->channel, 0, NULL, rcvmsg, SAR_TIMEOUT);
                if (!status) {
                        pr_debug("%s: SCIOCGETDN: command successful\n",
                                        sc_adapter[card]->devicename);
@@ -292,7 +291,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Package the dn and send to user space
                 */
-               if (copy_to_user((char *)data->dataptr, dn, SCIOC_DNSIZE)) {
+               if (copy_to_user(data->dataptr, dn, SCIOC_DNSIZE)) {
                        kfree(dn);
                        return -EFAULT;
                }
@@ -313,7 +312,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                /*
                 * Get the spid from user space
                 */
-               if (copy_from_user(dn, (char *)data->dataptr, SCIOC_DNSIZE)) {
+               if (copy_from_user(dn, data->dataptr, SCIOC_DNSIZE)) {
                        kfree(rcvmsg);
                        kfree(dn);
                        return -EFAULT;
@@ -366,8 +365,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                kfree(rcvmsg);
                GetStatus(card, bi);
 
-               if (copy_to_user((boardInfo *)data->dataptr, bi,
-                                sizeof(boardInfo))) {
+               if (copy_to_user(data->dataptr, bi, sizeof(boardInfo))) {
                        kfree(bi);
                        return -EFAULT;
                }
@@ -385,7 +383,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                 * Get the speed from the board
                 */
                status = send_and_receive(card, CEPID, ceReqTypeCall, ceReqClass0, 
-                       ceReqCallGetCallType, data->channel, 0, 0, rcvmsg, SAR_TIMEOUT);
+                       ceReqCallGetCallType, data->channel, 0, NULL, rcvmsg, SAR_TIMEOUT);
                if (!status && !(rcvmsg->rsp_status)) {
                        pr_debug("%s: SCIOCGETSPEED: command successful\n",
                                sc_adapter[card]->devicename);
@@ -405,7 +403,7 @@ int sc_ioctl(int card, scs_ioctl *data)
                 * Package the switch type and send to user space
                 */
 
-               if (copy_to_user((char *) data->dataptr, &speed, sizeof(char)))
+               if (copy_to_user(data->dataptr, &speed, sizeof(char)))
                        return -EFAULT;
 
                return 0;
@@ -430,7 +428,7 @@ int sc_ioctl(int card, scs_ioctl *data)
        return 0;
 }
 
-int GetStatus(int card, boardInfo *bi)
+static int GetStatus(int card, boardInfo *bi)
 {
        RspMessage rcvmsg;
        int i, status;