* dir.cc: Rename opendir_* to dirent_* throughout.
(opendir_states): Move and rename. * fhandler.h (dirent_states): to here. * fhandler_disk_file.cc (fhandler_disk_file::readdir): Use raw readdir when skipping through entries since it is keeping track of "." and "..". (fhandler_cygdrive::seekdir): Use fhandler_disk_file::readdir to do everything. * fhandler_virtual.cc (fhandler_virtual::opendir): Set flag indicating that we provide . and .. (fhandler_virtual::seekdir): Ditto. (fhandler_virtual::rewinddir): Ditto. * fhandler_registry.cc (fhandler_registry::rewinddir): Ditto.
This commit is contained in:
		| @@ -1,3 +1,19 @@ | ||||
| 2005-03-16  Christopher Faylor  <cgf@timesys.com> | ||||
|  | ||||
| 	* dir.cc: Rename opendir_* to dirent_* throughout. | ||||
| 	(opendir_states): Move and rename. | ||||
| 	* fhandler.h (dirent_states): to here. | ||||
| 	* fhandler_disk_file.cc (fhandler_disk_file::readdir): Use raw readdir | ||||
| 	when skipping through entries since it is keeping track of "." and | ||||
| 	"..". | ||||
| 	(fhandler_cygdrive::seekdir): Use fhandler_disk_file::readdir to do | ||||
| 	everything. | ||||
| 	* fhandler_virtual.cc (fhandler_virtual::opendir): Set flag indicating | ||||
| 	that we provide .  and .. | ||||
| 	(fhandler_virtual::seekdir): Ditto. | ||||
| 	(fhandler_virtual::rewinddir): Ditto. | ||||
| 	* fhandler_registry.cc (fhandler_registry::rewinddir): Ditto. | ||||
|  | ||||
| 2005-03-16  Christopher Faylor  <cgf@timesys.com> | ||||
|  | ||||
| 	* cygtls.cc (free_local): New macro. | ||||
|   | ||||
| @@ -38,14 +38,6 @@ dirfd (DIR *dir) | ||||
|   return dir->__d_dirent->d_fd; | ||||
| } | ||||
|  | ||||
| enum opendir_states | ||||
| { | ||||
|   opendir_ok = 0, | ||||
|   opendir_saw_dot = 1, | ||||
|   opendir_saw_dot_dot = 2, | ||||
|   opendir_saw_eof = 4 | ||||
| }; | ||||
|  | ||||
| /* opendir: POSIX 5.1.2.1 */ | ||||
| extern "C" DIR * | ||||
| opendir (const char *name) | ||||
| @@ -89,18 +81,18 @@ readdir (DIR *dir) | ||||
|  | ||||
|   if (!res) | ||||
|     { | ||||
|       if (!(dir->__flags & opendir_saw_dot)) | ||||
|       if (!(dir->__flags & dirent_saw_dot)) | ||||
| 	{ | ||||
| 	  res = dir->__d_dirent; | ||||
| 	  strcpy (res->d_name, "."); | ||||
| 	  dir->__flags |= opendir_saw_dot; | ||||
| 	  dir->__flags |= dirent_saw_dot; | ||||
| 	  dir->__d_position++; | ||||
| 	} | ||||
|       else if (!(dir->__flags & opendir_saw_dot_dot)) | ||||
|       else if (!(dir->__flags & dirent_saw_dot_dot)) | ||||
| 	{ | ||||
| 	  res = dir->__d_dirent; | ||||
| 	  strcpy (res->d_name, ".."); | ||||
| 	  dir->__flags |= opendir_saw_dot_dot; | ||||
| 	  dir->__flags |= dirent_saw_dot_dot; | ||||
| 	  dir->__d_position++; | ||||
| 	} | ||||
|     } | ||||
| @@ -114,13 +106,13 @@ readdir (DIR *dir) | ||||
| 	  if (res->d_name[1] == '\0') | ||||
| 	    { | ||||
| 	      dir->__d_dirent->d_ino = dir->__d_dirhash; | ||||
| 	      dir->__flags |= opendir_saw_dot; | ||||
| 	      dir->__flags |= dirent_saw_dot; | ||||
| 	    } | ||||
| 	  else if (res->d_name[1] != '.' || res->d_name[2] != '\0') | ||||
| 	    goto hashit; | ||||
| 	  else | ||||
| 	    { | ||||
| 	      dir->__flags |= opendir_saw_dot_dot; | ||||
| 	      dir->__flags |= dirent_saw_dot_dot; | ||||
| 	      char *p, up[strlen (dir->__d_dirname) + 1]; | ||||
| 	      strcpy (up, dir->__d_dirname); | ||||
| 	      if (!(p = strrchr (up, '\\'))) | ||||
|   | ||||
| @@ -38,6 +38,14 @@ struct dirent; | ||||
| struct iovec; | ||||
| struct __acl32; | ||||
|  | ||||
| enum dirent_states | ||||
| { | ||||
|   dirent_ok = 0, | ||||
|   dirent_saw_dot = 1, | ||||
|   dirent_saw_dot_dot = 2, | ||||
|   dirent_saw_eof = 4 | ||||
| }; | ||||
|  | ||||
| enum conn_state | ||||
| { | ||||
|   unconnected = 0, | ||||
|   | ||||
| @@ -378,6 +378,7 @@ fhandler_registry::rewinddir (DIR * dir) | ||||
|       dir->__handle = INVALID_HANDLE_VALUE; | ||||
|     } | ||||
|   dir->__d_position = 0; | ||||
|   dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; | ||||
|   return; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -83,7 +83,7 @@ fhandler_virtual::opendir () | ||||
| 	  dir->__handle = INVALID_HANDLE_VALUE; | ||||
| 	  dir->__d_position = 0; | ||||
| 	  dir->__d_dirhash = get_namehash (); | ||||
|  | ||||
| 	  dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; | ||||
| 	  res = dir; | ||||
| 	} | ||||
|     } | ||||
| @@ -100,6 +100,7 @@ _off64_t fhandler_virtual::telldir (DIR * dir) | ||||
| void | ||||
| fhandler_virtual::seekdir (DIR * dir, _off64_t loc) | ||||
| { | ||||
|   dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot; | ||||
|   dir->__d_position = loc; | ||||
|   return; | ||||
| } | ||||
| @@ -108,6 +109,7 @@ void | ||||
| fhandler_virtual::rewinddir (DIR * dir) | ||||
| { | ||||
|   dir->__d_position = 0; | ||||
|   dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot; | ||||
|   return; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user