diff options
author | Michael Brown | 2009-02-15 09:41:46 +0100 |
---|---|---|
committer | Michael Brown | 2009-02-15 09:44:22 +0100 |
commit | 8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2 (patch) | |
tree | e271a28b9cb1ecb3749df8fc33e0d6f54eee8c8e /src/core/xfer.c | |
parent | [umalloc] Avoid problems when _textdata_memsz is a multiple of 4kB (diff) | |
download | ipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.tar.gz ipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.tar.xz ipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.zip |
[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()).
Diffstat (limited to 'src/core/xfer.c')
-rw-r--r-- | src/core/xfer.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/xfer.c b/src/core/xfer.c index 14c77d64..9ed19da2 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -28,6 +28,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 * * @v xfer 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 ); } /** |