52f8332cd1f5c4678cff1e7f950c38c03387adeb
[feed/packages.git] / net / xl2tpd / patches / 201-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch
1 From 8c5853b8e22f34bc1c1acba278f7850ab7946894 Mon Sep 17 00:00:00 2001
2 From: Yousong Zhou <yszhou4tech@gmail.com>
3 Date: Tue, 28 Apr 2015 21:26:15 +0800
4 Subject: [PATCH 1/7] xl2tpd-control: check end-of-file when reading pipe to
5 avoid dead loop.
6
7 ---
8 xl2tpd-control.c | 11 +++++++----
9 1 file changed, 7 insertions(+), 4 deletions(-)
10
11 --- a/xl2tpd-control.c
12 +++ b/xl2tpd-control.c
13 @@ -306,17 +306,20 @@ int read_result(int result_fd, char* buf
14 /*FIXME: there is a chance to hang up reading.
15 Should I create watching thread with timeout?
16 */
17 - ssize_t readed;
18 + ssize_t readed = 0;
19 + ssize_t len;
20 +
21 do
22 {
23 - readed = read (result_fd, buf, size);
24 - if (readed < 0)
25 + len = read (result_fd, buf + readed, size - readed);
26 + if (len < 0)
27 {
28 print_error (ERROR_LEVEL,
29 "error: can't read command result: %s\n", strerror (errno));
30 break;
31 }
32 - } while (readed == 0);
33 + readed += len;
34 + } while (len > 0 && (size - readed) > 0);
35 buf[readed] = '\0';
36
37 /* scan result code */