diff options
| author | Michael Brown | 2010-07-02 13:12:16 +0200 |
|---|---|---|
| committer | Michael Brown | 2010-09-03 22:21:14 +0200 |
| commit | 364b92521ad19051083db605de3b8a058374e096 (patch) | |
| tree | 14d3d80d6f7563fc12be91826e03534818ce0cd2 /src/core | |
| parent | [eepro100] Add new PCI ID 8086:27dc (diff) | |
| download | ipxe-364b92521ad19051083db605de3b8a058374e096.tar.gz ipxe-364b92521ad19051083db605de3b8a058374e096.tar.xz ipxe-364b92521ad19051083db605de3b8a058374e096.zip | |
[xfer] Generalise metadata "whence" field to "flags" field
iPXE has never supported SEEK_END; the usage of "whence" offers only
the options of SEEK_SET and SEEK_CUR and so is effectively a boolean
flag. Further flags will be required to support additional metadata
required by the Fibre Channel network model, so repurpose the "whence"
field as a generic "flags" field.
xfer_seek() has always been used with SEEK_SET, so remove the "whence"
field altogether from its argument list.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/downloader.c | 2 | ||||
| -rw-r--r-- | src/core/posix_io.c | 2 | ||||
| -rw-r--r-- | src/core/xfer.c | 9 |
3 files changed, 6 insertions, 7 deletions
diff --git a/src/core/downloader.c b/src/core/downloader.c index 488c86d9c..3e21ee9a3 100644 --- a/src/core/downloader.c +++ b/src/core/downloader.c @@ -160,7 +160,7 @@ static int downloader_xfer_deliver ( struct downloader *downloader, int rc; /* Calculate new buffer position */ - if ( meta->whence != SEEK_CUR ) + if ( meta->flags & XFER_FL_ABS_OFFSET ) downloader->pos = 0; downloader->pos += meta->offset; diff --git a/src/core/posix_io.c b/src/core/posix_io.c index f7ca3f0db..38bd727b0 100644 --- a/src/core/posix_io.c +++ b/src/core/posix_io.c @@ -105,7 +105,7 @@ static int posix_file_xfer_deliver ( struct posix_file *file, struct xfer_metadata *meta ) { /* Keep track of file position solely for the filesize */ - if ( meta->whence != SEEK_CUR ) + if ( meta->flags & XFER_FL_ABS_OFFSET ) file->pos = 0; file->pos += meta->offset; if ( file->filesize < file->pos ) diff --git a/src/core/xfer.c b/src/core/xfer.c index dce245f9c..112adfcba 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -276,18 +276,17 @@ int xfer_printf ( struct interface *intf, const char *format, ... ) { * * @v intf Data transfer interface * @v offset Offset to new position - * @v whence Basis for new position * @ret rc Return status code */ -int xfer_seek ( struct interface *intf, off_t offset, int whence ) { +int xfer_seek ( struct interface *intf, off_t offset ) { struct io_buffer *iobuf; struct xfer_metadata meta = { + .flags = XFER_FL_ABS_OFFSET, .offset = offset, - .whence = whence, }; - DBGC ( INTF_COL ( intf ), "INTF " INTF_FMT " seek %s+%ld\n", - INTF_DBG ( intf ), whence_text ( whence ), offset ); + DBGC ( INTF_COL ( intf ), "INTF " INTF_FMT " seek to %ld\n", + INTF_DBG ( intf ), offset ); /* Allocate and send a zero-length data buffer */ iobuf = xfer_alloc_iob ( intf, 0 ); |
