summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorMichael Brown2010-07-02 13:12:16 +0200
committerMichael Brown2010-09-03 22:21:14 +0200
commit364b92521ad19051083db605de3b8a058374e096 (patch)
tree14d3d80d6f7563fc12be91826e03534818ce0cd2 /src/core
parent[eepro100] Add new PCI ID 8086:27dc (diff)
downloadipxe-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.c2
-rw-r--r--src/core/posix_io.c2
-rw-r--r--src/core/xfer.c9
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 );