]>
Commit | Line | Data |
---|---|---|
5e993f12 | 1 | ? ldrs |
2 | ? ldrviewer | |
3 | Index: headers.h | |
4 | =================================================================== | |
5 | RCS file: /cvsroot/gcc3/ldrviewer/headers.h,v | |
6 | retrieving revision 1.2 | |
7 | diff -u -p -r1.2 headers.h | |
8 | --- headers.h 22 Sep 2006 01:44:59 -0000 1.2 | |
9 | +++ headers.h 17 Oct 2006 20:54:10 -0000 | |
10 | @@ -21,6 +21,7 @@ | |
11 | #include <stdlib.h> | |
12 | #include <string.h> | |
13 | #include <strings.h> | |
14 | +#include <errno.h> | |
15 | #include <assert.h> | |
16 | #include <stdint.h> | |
17 | #include <sys/types.h> | |
18 | Index: helpers.c | |
19 | =================================================================== | |
20 | RCS file: /cvsroot/gcc3/ldrviewer/helpers.c,v | |
21 | retrieving revision 1.2 | |
22 | diff -u -p -r1.2 helpers.c | |
23 | --- helpers.c 22 Sep 2006 01:44:59 -0000 1.2 | |
24 | +++ helpers.c 17 Oct 2006 20:54:10 -0000 | |
25 | @@ -40,3 +40,24 @@ int parse_bool(const char *boo) | |
26 | return 0; | |
27 | err("Invalid boolean: '%s'", boo); | |
28 | } | |
29 | + | |
30 | +ssize_t read_retry(int fd, void *buf, size_t count) | |
31 | +{ | |
32 | + ssize_t ret = 0, temp_ret; | |
33 | + while (count > 0) { | |
34 | + temp_ret = read(fd, buf, count); | |
35 | + if (temp_ret > 0) { | |
36 | + ret += temp_ret; | |
37 | + buf += temp_ret; | |
38 | + count -= temp_ret; | |
39 | + } else if (temp_ret == 0) { | |
40 | + break; | |
41 | + } else { | |
42 | + if (errno == EINTR) | |
43 | + continue; | |
44 | + ret = -1; | |
45 | + break; | |
46 | + } | |
47 | + } | |
48 | + return ret; | |
49 | +} | |
50 | Index: helpers.h | |
51 | =================================================================== | |
52 | RCS file: /cvsroot/gcc3/ldrviewer/helpers.h,v | |
53 | retrieving revision 1.2 | |
54 | diff -u -p -r1.2 helpers.h | |
55 | --- helpers.h 22 Sep 2006 01:44:59 -0000 1.2 | |
56 | +++ helpers.h 17 Oct 2006 20:54:10 -0000 | |
57 | @@ -41,5 +41,6 @@ extern const char *argv0; | |
58 | void *xmalloc(size_t); | |
59 | void *xrealloc(void *, size_t); | |
60 | int parse_bool(const char *); | |
61 | +ssize_t read_retry(int, void *, size_t); | |
62 | ||
63 | #endif | |
64 | Index: ldr.c | |
65 | =================================================================== | |
66 | RCS file: /cvsroot/gcc3/ldrviewer/ldr.c,v | |
67 | retrieving revision 1.2 | |
68 | diff -u -p -r1.2 ldr.c | |
69 | --- ldr.c 22 Sep 2006 01:44:59 -0000 1.2 | |
70 | +++ ldr.c 17 Oct 2006 20:54:10 -0000 | |
71 | @@ -379,7 +379,7 @@ canned_failure: | |
72 | printf("OK!\n"); | |
73 | ||
74 | printf("Trying to read autobaud ... "); | |
75 | - ret = read(fd, autobaud, 4); | |
76 | + ret = read_retry(fd, autobaud, 4); | |
77 | if (ret != 4) | |
78 | goto canned_failure; | |
79 | printf("OK!\n"); |