summary refs log tree commit diff stats
path: root/io/channel-file.c
diff options
context:
space:
mode:
authorNikolay Borisov <nborisov@suse.com>2024-02-29 12:29:56 -0300
committerPeter Xu <peterx@redhat.com>2024-03-01 15:42:04 +0800
commit401e311ff72e0a62c834bfe466de68a82cfd90cb (patch)
tree9a043d67e1b8f4a384008d15783ca38b4a7375c8 /io/channel-file.c
parent4aac6b1e9bd48677c4f24518fe86ffd34c677d5a (diff)
downloadfocaccia-qemu-401e311ff72e0a62c834bfe466de68a82cfd90cb.tar.gz
focaccia-qemu-401e311ff72e0a62c834bfe466de68a82cfd90cb.zip
io: add and implement QIO_CHANNEL_FEATURE_SEEKABLE for channel file
Add a generic QIOChannel feature SEEKABLE which would be used by the
qemu_file* apis. For the time being this will be only implemented for
file channels.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: "Daniel P. Berrangé" <berrange@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20240229153017.2221-3-farosas@suse.de
Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'io/channel-file.c')
-rw-r--r--io/channel-file.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/io/channel-file.c b/io/channel-file.c
index 4a12c61886..f91bf6db1c 100644
--- a/io/channel-file.c
+++ b/io/channel-file.c
@@ -36,6 +36,10 @@ qio_channel_file_new_fd(int fd)
 
     ioc->fd = fd;
 
+    if (lseek(fd, 0, SEEK_CUR) != (off_t)-1) {
+        qio_channel_set_feature(QIO_CHANNEL(ioc), QIO_CHANNEL_FEATURE_SEEKABLE);
+    }
+
     trace_qio_channel_file_new_fd(ioc, fd);
 
     return ioc;
@@ -60,6 +64,10 @@ qio_channel_file_new_path(const char *path,
         return NULL;
     }
 
+    if (lseek(ioc->fd, 0, SEEK_CUR) != (off_t)-1) {
+        qio_channel_set_feature(QIO_CHANNEL(ioc), QIO_CHANNEL_FEATURE_SEEKABLE);
+    }
+
     trace_qio_channel_file_new_path(ioc, path, flags, mode, ioc->fd);
 
     return ioc;