From 8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 15 Feb 2009 08:41:46 +0000 Subject: [xfer] Make consistent assumptions that xfer metadata can never be NULL The documentation in xfer.h and xfer.c does not say that the metadata parameter is optional in calls such as xfer_deliver_iob_meta() and the deliver_iob() method. However, some code in net/ is prepared to accept a NULL pointer, and xfer_deliver_as_iob() passes a NULL pointer directly to the deliver_iob() method. Fix this mess of conflicting assumptions by making everything assume that the metadata parameter is mandatory, and fixing xfer_deliver_as_iob() to pass in a dummy metadata structure (as is already done in xfer_deliver_iob()). --- src/core/xfer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/xfer.c b/src/core/xfer.c index 14c77d64f..9ed19da21 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -27,6 +27,14 @@ * */ +/** + * Dummy transfer metadata + * + * This gets passed to xfer_interface::deliver_iob() and equivalents + * when no metadata is available. + */ +static struct xfer_metadata dummy_metadata; + /** * Close data transfer interface * @@ -159,7 +167,6 @@ int xfer_deliver_iob_meta ( struct xfer_interface *xfer, */ int xfer_deliver_iob ( struct xfer_interface *xfer, struct io_buffer *iobuf ) { - static struct xfer_metadata dummy_metadata; return xfer_deliver_iob_meta ( xfer, iobuf, &dummy_metadata ); } @@ -366,7 +373,7 @@ int xfer_deliver_as_iob ( struct xfer_interface *xfer, return -ENOMEM; memcpy ( iob_put ( iobuf, len ), data, len ); - return xfer->op->deliver_iob ( xfer, iobuf, NULL ); + return xfer->op->deliver_iob ( xfer, iobuf, &dummy_metadata ); } /** -- cgit v1.2.3-55-g7522