From bc3a4ae5d465a7ae6127dc0af173aebe39a2594f Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Tue, 8 May 2001 13:55:02 +0000 Subject: needs to poll() for available data before loading ramdisk because ftp transfers would fail in some situations --- mdk-stage1/tools.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'mdk-stage1') diff --git a/mdk-stage1/tools.c b/mdk-stage1/tools.c index cd1b40fe8..767c8c830 100644 --- a/mdk-stage1/tools.c +++ b/mdk-stage1/tools.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #include "stage1.h" #include "log.h" #include "mount.h" @@ -249,8 +251,19 @@ enum return_type load_ramdisk_fd(int ramdisk_fd, int size) int bytes_read = 0; int actually; int seems_ok = 0; + struct pollfd polls; + + /* first of all, we wait for data to be available on fd; because + when it's a socket, data can be unavailable at the beginning */ + polls.fd = ramdisk_fd; + polls.events = POLLIN; + if (poll(&polls, 1, 10000) != 1) { + log_message("poll'ing ramdisk fd: timeout or error"); + return RETURN_ERROR; + } st2 = BZ2_bzdopen(ramdisk_fd, "r"); + BZ2_bzerror(st2, &z_errnum); if (!st2) { log_message("Opening compressed ramdisk: %s", BZ2_bzerror(st2, &z_errnum)); -- cgit v1.2.1