* fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY
as exactly the same. If one is set, both are set. * net.cc (fhandler_socket::fcntl): Ditto.
This commit is contained in:
		| @@ -1,3 +1,9 @@ | |||||||
|  | Wed Oct 25 10:43:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY | ||||||
|  | 	as exactly the same. If one is set, both are set. | ||||||
|  | 	* net.cc (fhandler_socket::fcntl): Ditto. | ||||||
|  |  | ||||||
| Tue Oct 24 23:58:35 2000  Christopher Faylor <cgf@cygnus.com> | Tue Oct 24 23:58:35 2000  Christopher Faylor <cgf@cygnus.com> | ||||||
|  |  | ||||||
| 	* dcrt0.cc (do_exit): Remove debugging statement. | 	* dcrt0.cc (do_exit): Remove debugging statement. | ||||||
|   | |||||||
| @@ -1021,12 +1021,17 @@ int fhandler_base::fcntl (int cmd, void *arg) | |||||||
| 	 * Each other flag will be ignored. | 	 * Each other flag will be ignored. | ||||||
| 	 * Since O_ASYNC isn't defined in fcntl.h it's currently | 	 * Since O_ASYNC isn't defined in fcntl.h it's currently | ||||||
| 	 * ignored as well. | 	 * ignored as well. | ||||||
| 	 * There's no functionality at all, so... |  | ||||||
| 	 */ | 	 */ | ||||||
|         const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY; |         const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY; | ||||||
|  |  | ||||||
|  |         /* Care for the old O_NDELAY flag. If one of the flags is set, | ||||||
|  |            both flags are set. */ | ||||||
|  | 	int new_flags = (int) arg; | ||||||
|  |         if (new_flags & (O_NONBLOCK | OLD_O_NDELAY)) | ||||||
|  |           new_flags |= O_NONBLOCK | OLD_O_NDELAY; | ||||||
|  |  | ||||||
|         int flags = get_flags () & ~allowed_flags; |         int flags = get_flags () & ~allowed_flags; | ||||||
|         set_flags (flags | ((int)arg & allowed_flags)); |         set_flags (flags | (new_flags & allowed_flags)); | ||||||
|       } |       } | ||||||
|       res = 0; |       res = 0; | ||||||
|       break; |       break; | ||||||
|   | |||||||
| @@ -1988,15 +1988,22 @@ fhandler_socket::fcntl (int cmd, void *arg) | |||||||
|   switch (cmd) |   switch (cmd) | ||||||
|     { |     { | ||||||
|     case F_SETFL: |     case F_SETFL: | ||||||
|       request = ((int) arg & O_NONBLOCK) ? 1 : 0; |       { | ||||||
|       current = (get_flags () & O_NONBLOCK) ? 1 : 0; |         /* Care for the old O_NDELAY flag. If one of the flags is set, | ||||||
|       if (request != current && (res = ioctl (FIONBIO, &request))) |            both flags are set. */ | ||||||
|  |         int new_flags = (int) arg; | ||||||
|  |         if (new_flags & (O_NONBLOCK | OLD_O_NDELAY)) | ||||||
|  |           new_flags |= O_NONBLOCK | OLD_O_NDELAY; | ||||||
|  |         request = (new_flags & O_NONBLOCK) ? 1 : 0; | ||||||
|  |         current = (get_flags () & O_NONBLOCK) ? 1 : 0; | ||||||
|  |         if (request != current && (res = ioctl (FIONBIO, &request))) | ||||||
|  |           break; | ||||||
|  |         if (request) | ||||||
|  |           set_flags (get_flags () | O_NONBLOCK | OLD_O_NDELAY); | ||||||
|  |         else | ||||||
|  |           set_flags (get_flags () & ~(O_NONBLOCK | OLD_O_NDELAY)); | ||||||
|         break; |         break; | ||||||
|       if (request) |       } | ||||||
|         set_flags (get_flags () | O_NONBLOCK); |  | ||||||
|       else |  | ||||||
|         set_flags (get_flags () & ~O_NONBLOCK); |  | ||||||
|       break; |  | ||||||
|     default: |     default: | ||||||
|       res = fhandler_base::fcntl (cmd, arg); |       res = fhandler_base::fcntl (cmd, arg); | ||||||
|       break; |       break; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user