35a36,59 > int isgz(char *fn) > { > char *strend; > int ret; > int len; > > if (system ("gzip --version > /dev/null 2>&1") != 0) return -2; > > if(fn==NULL) return -1; > len=strlen(fn); > if(len < 3) return(-1); > > strend = malloc(4*sizeof(char)); > sprintf(strend,"%c%c%c",fn[len-3],fn[len-2],fn[len-1]); > if(strcmp(strend,".gz")==0) > { > ret=0; > } else { > ret=-1; > } > free(strend); > return ret; > } > 928a953 > char *open_cmd; 940a966,968 > /* open command rather than direct file i/o */ > open_cmd = (char *) nmalloc(sizeof(char)*(100+strlen(full_filename))); > 946a975 > free(open_cmd); 968c997 < } else if ((fd = open(full_filename, O_RDONLY)) == -1) { --- > } else if ((fd = open(full_filename, O_RDONLY)) == -1) { 974c1003,1009 < *f = fdopen(fd, "rb"); --- > /* The below lines are added in an attempt to open .gz files */ > if(isgz(full_filename) == 0) { > sprintf(open_cmd,"gzip -cdfq \'%s\'",full_filename); > *f = popen(open_cmd, "r"); > } else { > *f = fdopen(fd, "rb"); > } 980c1015 < } else --- > } else { 981a1017 > } 983a1020 > free(open_cmd); 1716c1753,1755 < --- > char *append_cmd; > char *write_cmd; > /* The commands to write to a .gz file */ 1729c1768,1769 < --- > write_cmd = (char *) nmalloc(sizeof(char)*(100+strlen(realname))); > append_cmd = (char *) nmalloc(sizeof(char)*(100+strlen(realname))); 2032c2072,2082 < f = fdopen(fd, (append == APPEND) ? "ab" : "wb"); --- > if(isgz(realname) == 0) { > if(append == APPEND) { > sprintf(append_cmd, "gzip -c >> \'%s\'", realname); > f = popen(append_cmd, "w"); > } else { > sprintf(write_cmd, "gzip -c > \'%s\'", realname); > f = popen(write_cmd, "w"); > } > } else { > f = fdopen(fd, (append == APPEND) ? "ab" : "wb"); > } 2170c2220,2221 < --- > free(append_cmd); > free(write_cmd);