]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/nfs/krpc_subr.c
xnu-2422.90.20.tar.gz
[apple/xnu.git] / bsd / nfs / krpc_subr.c
index 694b152f581331b1c21c7b520cdf1add705f3168..8ded0f04bedf7c0710560d98df1b34a2d6f8d1d8 100644 (file)
@@ -1,23 +1,29 @@
 /*
- * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
  *
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
  * 
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
 /*
@@ -70,7 +76,6 @@
 #include <sys/socketvar.h>
 #include <sys/systm.h>
 #include <sys/reboot.h>
-#include <sys/uio_internal.h>
 
 #include <net/if.h>
 #include <netinet/in.h>
@@ -210,10 +215,11 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
        mbuf_t m, nam, mhead;
        struct rpc_call *call;
        struct rpc_reply *reply;
-       int error, timo, secs, len;
+       int error, timo, secs;
+       size_t len;
        static u_int32_t xid = ~0xFF;
        u_int16_t tport;
-       int maxpacket = 1<<16;
+       size_t maxpacket = 1<<16;
 
        /*
         * Validate address family.
@@ -229,7 +235,7 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
         * Create socket and set its recieve timeout.
         */
        if ((error = sock_socket(AF_INET, sotype, 0, 0, 0, &so)))
-               goto out;
+               goto out1;
 
        {
                struct timeval tv;
@@ -329,7 +335,7 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
         */
        if (sotype == SOCK_STREAM) {
                /* first, fill in RPC record marker */
-               u_long *recmark = mbuf_data(mhead);
+               u_int32_t *recmark = mbuf_data(mhead);
                *recmark = htonl(0x80000000 | (mbuf_pkthdr_len(mhead) - 4));
                call = (struct rpc_call *)(recmark + 1);
        } else {
@@ -394,11 +400,11 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
                        }
                        if (sotype == SOCK_STREAM) {
                                int maxretries = 60;
-                               struct iovec_32 aio;
-                               aio.iov_base = (uintptr_t) &len;
-                               aio.iov_len = sizeof(u_long);
+                               struct iovec aio;
+                               aio.iov_base = &len;
+                               aio.iov_len = sizeof(u_int32_t);
                                bzero(&msg, sizeof(msg));
-                               msg.msg_iov = (struct iovec *) &aio;
+                               msg.msg_iov = &aio;
                                msg.msg_iovlen = 1;
                                do {
                                   error = sock_receive(so, &msg, MSG_WAITALL, &readlen);
@@ -408,8 +414,8 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
                                if (!error && readlen < aio.iov_len) {
                                    /* only log a message if we got a partial word */
                                    if (readlen != 0)
-                                           printf("short receive (%d/%d) from server " IP_FORMAT "\n",
-                                                readlen, sizeof(u_long), IP_LIST(&(sin->sin_addr.s_addr)));
+                                           printf("short receive (%ld/%ld) from server " IP_FORMAT "\n",
+                                                readlen, sizeof(u_int32_t), IP_LIST(&(sin->sin_addr.s_addr)));
                                    error = EPIPE;
                                }
                                if (error)
@@ -420,7 +426,7 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
                                 * and forcing a disconnect/reconnect is all I can do.
                                 */
                                if (len > maxpacket) {
-                                   printf("impossible packet length (%d) from server %s\n",
+                                   printf("impossible packet length (%ld) from server " IP_FORMAT "\n",
                                        len, IP_LIST(&(sin->sin_addr.s_addr)));
                                    error = EFBIG;
                                    goto out;
@@ -431,8 +437,8 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
                                    error = sock_receivembuf(so, NULL, &m, MSG_WAITALL, &readlen);
                                } while (error == EWOULDBLOCK);
 
-                               if (!error && (len > (int)readlen)) {
-                                   printf("short receive (%d/%d) from server %s\n",
+                               if (!error && (len > readlen)) {
+                                   printf("short receive (%ld/%ld) from server " IP_FORMAT "\n",
                                        readlen, len, IP_LIST(&(sin->sin_addr.s_addr)));
                                    error = EPIPE;
                                }
@@ -550,8 +556,9 @@ krpc_call(sa, sotype, prog, vers, func, data, from_p)
        /* result */
        *data = m;
  out:
+       sock_close(so);
+out1:
        if (nam) mbuf_freem(nam);
        if (mhead) mbuf_freem(mhead);
-       sock_close(so);
        return error;
 }