fatal(errno, "error calling setlocale");
if(argc > 1)
fatal(0, "not intended to be invoked by users");
- if(config_read())
+ if(config_read(1))
fatal(0, "cannot read configuration");
if(!isatty(2)) {
openlog(progname, LOG_PID, LOG_DAEMON);
}
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) {
+ if(n)
+ fatal(0, "EOF reading header");
+ break;
+ } else
+ n += r;
+ }
+ if(!n)
+ break;
/* Sanity check the header */
if(header.rate < 100 || header.rate > 1000000)
fatal(0, "implausible rate %"PRId32"Hz (%#"PRIx32")",