rpc_read_from_socket: fix use-after-free due to missing return
[deb_libnfs.git] / lib / pdu.c
index 5dff51780d6b2edfe21ec5c03265c8515c810e07..c2538efa8e127cf7240545c1a4e42560a112d6ff 100644 (file)
--- a/lib/pdu.c
+++ b/lib/pdu.c
    You should have received a copy of the GNU Lesser General Public License
    along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #ifdef AROS
 #include "aros_compat.h"
 #endif
 
 #ifdef WIN32
 #include "win32_compat.h"
-#else
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#ifdef HAVE_STRINGS_H
 #include <strings.h>
-#endif/*WIN32*/
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
 #include <assert.h>
 #include <errno.h>
 #include "slist.h"
@@ -101,6 +113,10 @@ void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
        free(pdu);
 }
 
+void rpc_set_next_xid(struct rpc_context *rpc, uint32_t xid)
+{
+       rpc->xid = xid;
+}
 
 int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
 {
@@ -218,7 +234,7 @@ int rpc_process_pdu(struct rpc_context *rpc, char *buf, int size)
        struct rpc_pdu *pdu;
        ZDR zdr;
        int pos, recordmarker = 0;
-       unsigned int xid;
+       uint32_t xid;
        char *reasbuf = NULL;
 
        assert(rpc->magic == RPC_CONTEXT_MAGIC);