diff options
author | hpa <hpa> | 2004-12-20 22:31:04 +0000 |
---|---|---|
committer | hpa <hpa> | 2004-12-20 22:31:04 +0000 |
commit | 6971c383a933046341da07d30270a91434322426 (patch) | |
tree | bf66d7f799614841ce1d003d843c99240389f3fd | |
parent | 27007ae32a1244db12ba1e8e12352785075010a1 (diff) | |
download | syslinux-6971c383a933046341da07d30270a91434322426.tar.gz |
Add support to deal with EAGAIN
-rw-r--r-- | com32/lib/sys/line_input.c | 8 |
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 ) { |