FILE * sat_xfopen_fd(const char *fn, int fd, const char *mode) { char *suf; gzFile *gzf; suf = fn ? strrchr(fn, '.') : 0; if (!mode) { int fl = fcntl(fd, F_GETFL, 0); if (fl == -1) return 0; fl &= O_RDONLY|O_WRONLY|O_RDWR; if (fl == O_WRONLY) mode = "w"; else if (fl == O_RDWR) { if (!suf || strcmp(suf, ".gz") != 0) mode = "r+"; else mode = "r"; } else mode = "r"; } if (!suf || strcmp(suf, ".gz") != 0) return fdopen(fd, mode); gzf = gzdopen(fd, mode); if (!gzf) return 0; return mygzfopen(gzf); }
FILE * solv_xfopen(const char *fn, const char *mode) { char *suf; if (!fn) return 0; if (!mode) mode = "r"; suf = strrchr(fn, '.'); if (suf && !strcmp(suf, ".gz")) return mygzfopen(fn, mode); #ifdef ENABLE_LZMA_COMPRESSION if (suf && !strcmp(suf, ".xz")) return myxzfopen(fn, mode); if (suf && !strcmp(suf, ".lzma")) return mylzfopen(fn, mode); #else if (suf && !strcmp(suf, ".xz")) return 0; if (suf && !strcmp(suf, ".lzma")) return 0; #endif #ifdef ENABLE_BZIP2_COMPRESSION if (suf && !strcmp(suf, ".bz2")) return mybzfopen(fn, mode); #else if (suf && !strcmp(suf, ".bz2")) return 0; #endif return fopen(fn, mode); }
FILE * sat_xfopen(const char *fn, const char *mode) { char *suf; gzFile *gzf; if (!fn) return 0; if (!mode) mode = "r"; suf = strrchr(fn, '.'); if (!suf || strcmp(suf, ".gz") != 0) return fopen(fn, mode); gzf = gzopen(fn, mode); if (!gzf) return 0; return mygzfopen(gzf); }