Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}