#include "config.h"
#include "common.h"
+#include "both.h"
#include "version.h"
enum fdmodifiervalues {
static void xfread(void *p, size_t sz, FILE *file) {
size_t nr;
- nr= fread(p,1,sz,file);
+ nr= working_fread(p,sz,file);
if (nr != sz) protoreaderror(file,"in data");
}
protoerror("stderr message length %d is far too long",
progress_r->data.errmsg.messagelen);
for (i=0; i<progress_r->data.errmsg.messagelen; i++) {
- c= getc(file); if (c==EOF) protoreaderror(file,"in error message");
+ c= working_getc(file);
+ if (c==EOF) protoreaderror(file,"in error message");
if (isprint(c)) putc(c,stderr);
else fprintf(stderr,"\\x%02x",(unsigned char)c);
}
struct sigaction sig;
char catnamebuf[sizeof(int)*3+30];
int fd, reading;
+ pid_t child;
for (fd=0; fd<fdsetupsize; fd++) {
if (!fdsetup[fd].filename) continue;
if (fdsetup[fd].copyfd<0)
syscallerror("open file `%s' for fd %d",fdsetup[fd].filename,fd);
}
- fdsetup[fd].catpid= fork();
- if (fdsetup[fd].catpid==-1) syscallerror("fork for cat for fd %d",fd);
- if (!fdsetup[fd].catpid) {
+ blocksignals(SIG_BLOCK);
+ child= fork();
+ fdsetup[fd].catpid= child;
+ blocksignals(SIG_UNBLOCK);
+ if (child==-1) syscallerror("fork for cat for fd %d",fd);
+ if (!child) {
snprintf(catnamebuf,sizeof(catnamebuf),"cat fd%d",fd);
catnamebuf[sizeof(catnamebuf)-1]= 0;
sig.sa_handler= SIG_DFL;