chiark
/
gitweb
/
~mdw
/
disorder
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
dc450d3
)
more conservative about read() result
author
Richard Kettlewell
<rjk@greenend.org.uk>
Thu, 4 Oct 2007 10:33:57 +0000
(11:33 +0100)
committer
Richard Kettlewell
<rjk@greenend.org.uk>
Thu, 4 Oct 2007 10:33:57 +0000
(11:33 +0100)
server/normalize.c
patch
|
blob
|
blame
|
history
diff --git
a/server/normalize.c
b/server/normalize.c
index c16c70fd4ba2d8f6a01105f26c03c1fa1745d955..073b869ab734b02a35811c49cb9ccf45498d165c 100644
(file)
--- a/
server/normalize.c
+++ b/
server/normalize.c
@@
-127,12
+127,18
@@
int main(int argc, char attribute((unused)) **argv) {
}
memset(&latest_format, 0, sizeof latest_format);
for(;;) {
}
memset(&latest_format, 0, sizeof latest_format);
for(;;) {
- if((n = read(0, &header, sizeof header)) < 0)
- fatal(errno, "read error");
- else if(n == 0)
- exit(0);
- else if((size_t)n < sizeof header)
- fatal(0, "short header");
+ n = 0;
+ while((size_t)n < sizeof header) {
+ int r = read(0, (char *)&header + n, sizeof header - n);
+
+ if(r < 0) {
+ if(errno != EINTR)
+ fatal(errno, "error reading header");
+ } else if(r == 0)
+ fatal(0, "EOF reading header");
+ else
+ n += r;
+ }
/* Sanity check the header */
if(header.rate < 100 || header.rate > 1000000)
fatal(0, "implausible rate %"PRId32"Hz (%#"PRIx32")",
/* Sanity check the header */
if(header.rate < 100 || header.rate > 1000000)
fatal(0, "implausible rate %"PRId32"Hz (%#"PRIx32")",