Exemplo n.º 1
0
static char *
savedirstream (DIR *dirp)
{
  char *name_space = streamsavedir (dirp);
  if (dirp && closedir (dirp) != 0)
    {
      int save_errno = errno;
      free (name_space);
      errno = save_errno;
      return NULL;
    }
  return name_space;
}
Exemplo n.º 2
0
char *
savedir (char const *dir, enum savedir_option option)
{
  DIR *dirp = opendir (dir);
  if (! dirp)
    return NULL;
  else
    {
      char *name_space = streamsavedir (dirp, option);
      if (closedir (dirp) != 0)
        {
          int closedir_errno = errno;
          free (name_space);
          errno = closedir_errno;
          return NULL;
        }
      return name_space;
    }
}
Exemplo n.º 3
0
/* Return the filenames in directory NAME, relative to the chdir_fd.
   If the directory does not exist, report error if MUST_EXIST is
   true.

   Return NULL on errors.
*/
char *
tar_savedir (const char *name, int must_exist)
{
  char *ret = NULL;
  DIR *dir = NULL;
  int fd = openat (chdir_fd, name, open_read_flags | O_DIRECTORY);
  if (fd < 0)
    {
      if (!must_exist && errno == ENOENT)
	return NULL;
      open_error (name);
    }
  else if (! ((dir = fdopendir (fd))
	      && (ret = streamsavedir (dir))))
    savedir_error (name);

  if (dir ? closedir (dir) != 0 : 0 <= fd && close (fd) != 0)
    savedir_error (name);

  return ret;
}