* cygwin.din: Export fdopendir.
* dir.cc (opendir): Call fhandler's opendir with fd set to -1. (fdopendir): New function. (seekdir64): Use dirent_info_mask. (rewinddir): Ditto. (closedir): Only release underlying file descriptor if it has been reserved by opendir itself. * fhandler.cc (fhandler_base::opendir): Accommodate new parameter. * fhandler.h (dirent_states): Add dirent_valid_fd and dirent_info_mask. (fhander_XXX::opendir): Add file descriptor parameter. Use regparms. (fhandler_procnet::opendir): Drop declaration. * fhandler_disk_file.cc (fhandler_disk_file::opendir): Ditto. If called from fdopendir, use existing handle to re-open directory with valid flags. Rename fd to cfd. Use only if no valid incoming fd. (fhandler_cygdrive::opendir): Accommodate new parameter. * fhandler_process.cc (fhandler_process::opendir): Ditto. * fhandler_procnet.cc (fhandler_procnet::opendir): Drop definition. * fhandler_virtual.cc (fhandler_virtual::opendir): Accommodate new parameter. Only create new file descriptor entry if called from opendir. Remove duplicated setting of dir->__flags. * posix.sgml: Add fdopendir to list of implemented Solaris functions. * include/cygwin/version.h: Bump API minor number. * include/sys/dirent.h: Declare fdopendir.
This commit is contained in:
		@@ -198,15 +198,11 @@ fhandler_process::fstat (struct __stat64 *buf)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DIR *
 | 
			
		||||
fhandler_process::opendir ()
 | 
			
		||||
fhandler_process::opendir (int fd)
 | 
			
		||||
{
 | 
			
		||||
  DIR *dir = fhandler_virtual::opendir ();
 | 
			
		||||
  if (dir)
 | 
			
		||||
    {
 | 
			
		||||
      if (fileid == PROCESS_FD)
 | 
			
		||||
	fill_filebuf ();
 | 
			
		||||
      dir->__flags = 0;
 | 
			
		||||
    }
 | 
			
		||||
  DIR *dir = fhandler_virtual::opendir (fd);
 | 
			
		||||
  if (dir && fileid == PROCESS_FD)
 | 
			
		||||
    fill_filebuf ();
 | 
			
		||||
  return dir;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user