summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhpa <hpa>2004-12-20 22:31:04 +0000
committerhpa <hpa>2004-12-20 22:31:04 +0000
commit6971c383a933046341da07d30270a91434322426 (patch)
treebf66d7f799614841ce1d003d843c99240389f3fd
parent27007ae32a1244db12ba1e8e12352785075010a1 (diff)
downloadsyslinux-6971c383a933046341da07d30270a91434322426.tar.gz
Add support to deal with EAGAIN
-rw-r--r--com32/lib/sys/line_input.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/com32/lib/sys/line_input.c b/com32/lib/sys/line_input.c
index c24cf920..afeeec00 100644
--- a/com32/lib/sys/line_input.c
+++ b/com32/lib/sys/line_input.c
@@ -33,17 +33,23 @@
*/
#include "file.h"
+#include <errno.h>
ssize_t __line_input(struct file_info *fp, char *buf, size_t bufsize,
ssize_t (*get_char)(struct file_info *, void *, size_t))
{
size_t n = 0;
char ch;
+ int rv;
ssize_t (* const Write)(struct file_info *, const void *, size_t) =
fp->oop->write;
for(;;) {
- if ( get_char(fp, &ch, 1) != 1 )
+ rv = get_char(fp, &ch, 1);
+
+ if ( rv == -1 && (errno == EINTR || errno == EAGAIN) )
+ continue;
+ else if ( rv != 1 )
return n;
switch ( ch ) {