X-Git-Url: http://dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=src%2Fcallfcgi.c;h=1abe7d3ee815922a3190dc212eac829a1584248b;hp=e1d71f277c4aa68df13559d6ecf043c9962daf8d;hb=d06b6013fea7b2c01e75c5fe8bf98ab7caf1346c;hpb=c7f4f7500d96a0ce71bfe9dd0e5b3c939a9a3298 diff --git a/src/callfcgi.c b/src/callfcgi.c index e1d71f2..1abe7d3 100644 --- a/src/callfcgi.c +++ b/src/callfcgi.c @@ -569,35 +569,26 @@ static int sendrec(FILE *out, int type, int rid, char *data, size_t dlen) return(0); } -#define fgetc2(f) ({int __c__ = fgetc(f); if(__c__ == EOF) return(-1); __c__;}) - static int recvrec(FILE *in, int *type, int *rid, char **data, size_t *dlen) { - int b1, b2, pl; + unsigned char header[8]; + int tl; - if(fgetc2(in) != 1) + if(fread(header, 1, 8, in) != 8) + return(-1); + if(header[0] != 1) return(-1); - *type = fgetc2(in); - b1 = fgetc2(in); - b2 = fgetc2(in); - *rid = (b1 << 8) | b2; - b1 = fgetc2(in); - b2 = fgetc2(in); - *dlen = (b1 << 8) | b2; - pl = fgetc2(in); - if(fgetc2(in) != 0) + *type = header[1]; + *rid = (header[2] << 8) | header[3]; + *dlen = (header[4] << 8) | header[5]; + tl = *dlen + header[6]; + if(header[7] != 0) return(-1); - *data = smalloc(max(*dlen, 1)); - if(fread(*data, 1, *dlen, in) != *dlen) { + *data = smalloc(max(tl, 1)); + if(fread(*data, 1, tl, in) != tl) { free(*data); return(-1); } - for(; pl > 0; pl--) { - if(fgetc(in) == EOF) { - free(*data); - return(-1); - } - } return(0); } @@ -767,7 +758,6 @@ static void sigign(int sig) static void sigexit(int sig) { shutdown(0, SHUT_RDWR); - exit(0); } static void usage(FILE *out) @@ -811,7 +801,7 @@ int main(int argc, char **argv) signal(SIGINT, sigexit); signal(SIGTERM, sigexit); mustart(listenloop, 0); - atexit(killcuraddr); ioloop(); + killcuraddr(); return(0); }