* fhandler.cc (ACCFLAGS): Remove macro.
(fhandler_base::get_default_fmode): Use O_ACCMODE instead of ACCFLAGS and or'ed read/write flags. (fhandler_base::open_9x): Use O_ACCMODE instead of or'ed read/write flags. (fhandler_base::open): Ditto. * fhandler_disk_file.cc (fhandler_base::open_fs): Ditto. * fhandler_mem.cc (fhandler_dev_mem::open): Ditto. * fhandler_raw.cc (fhandler_dev_raw::open): Ditto.
This commit is contained in:
		| @@ -1,3 +1,15 @@ | |||||||
|  | 2005-12-14  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* fhandler.cc (ACCFLAGS): Remove macro. | ||||||
|  | 	(fhandler_base::get_default_fmode): Use O_ACCMODE instead of ACCFLAGS | ||||||
|  | 	and or'ed read/write flags. | ||||||
|  | 	(fhandler_base::open_9x): Use O_ACCMODE instead of or'ed read/write | ||||||
|  | 	flags. | ||||||
|  | 	(fhandler_base::open): Ditto. | ||||||
|  | 	* fhandler_disk_file.cc (fhandler_base::open_fs): Ditto. | ||||||
|  | 	* fhandler_mem.cc (fhandler_dev_mem::open): Ditto. | ||||||
|  | 	* fhandler_raw.cc (fhandler_dev_raw::open): Ditto. | ||||||
|  |  | ||||||
| 2005-12-14  Corinna Vinschen  <corinna@vinschen.de> | 2005-12-14  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* fhandler.cc (fhandler_base::open_9x): Handle O_SYNC and O_DIRECT | 	* fhandler.cc (fhandler_base::open_9x): Handle O_SYNC and O_DIRECT | ||||||
|   | |||||||
| @@ -298,7 +298,6 @@ written: | |||||||
|   return bytes_written; |   return bytes_written; | ||||||
| } | } | ||||||
|  |  | ||||||
| #define ACCFLAGS(x) (x & (O_RDONLY | O_WRONLY | O_RDWR)) |  | ||||||
| int | int | ||||||
| fhandler_base::get_default_fmode (int flags) | fhandler_base::get_default_fmode (int flags) | ||||||
| { | { | ||||||
| @@ -306,11 +305,11 @@ fhandler_base::get_default_fmode (int flags) | |||||||
|   if (perfile_table) |   if (perfile_table) | ||||||
|     { |     { | ||||||
|       size_t nlen = strlen (get_name ()); |       size_t nlen = strlen (get_name ()); | ||||||
|       unsigned accflags = ACCFLAGS (flags); |       unsigned accflags = (flags & O_ACCMODE); | ||||||
|       for (__cygwin_perfile *pf = perfile_table; pf->name; pf++) |       for (__cygwin_perfile *pf = perfile_table; pf->name; pf++) | ||||||
| 	if (!*pf->name && ACCFLAGS (pf->flags) == accflags) | 	if (!*pf->name && (pf->flags & O_ACCMODE) == accflags) | ||||||
| 	  { | 	  { | ||||||
| 	    fmode = pf->flags & ~(O_RDONLY | O_WRONLY | O_RDWR); | 	    fmode = pf->flags & ~O_ACCMODE; | ||||||
| 	    break; | 	    break; | ||||||
| 	  } | 	  } | ||||||
| 	else | 	else | ||||||
| @@ -319,9 +318,10 @@ fhandler_base::get_default_fmode (int flags) | |||||||
| 	    const char *stem = get_name () + nlen - pflen; | 	    const char *stem = get_name () + nlen - pflen; | ||||||
| 	    if (pflen > nlen || (stem != get_name () && !isdirsep (stem[-1]))) | 	    if (pflen > nlen || (stem != get_name () && !isdirsep (stem[-1]))) | ||||||
| 	      continue; | 	      continue; | ||||||
| 	    else if (ACCFLAGS (pf->flags) == accflags && strcasematch (stem, pf->name)) | 	    else if ((pf->flags & O_ACCMODE) == accflags | ||||||
|  | 		     && strcasematch (stem, pf->name)) | ||||||
| 	      { | 	      { | ||||||
| 		fmode = pf->flags & ~(O_RDONLY | O_WRONLY | O_RDWR); | 		fmode = pf->flags & ~O_ACCMODE; | ||||||
| 		break; | 		break; | ||||||
| 	      } | 	      } | ||||||
| 	  } | 	  } | ||||||
| @@ -459,9 +459,9 @@ fhandler_base::open_9x (int flags, mode_t mode) | |||||||
| 	access = GENERIC_READ | FILE_WRITE_ATTRIBUTES; | 	access = GENERIC_READ | FILE_WRITE_ATTRIBUTES; | ||||||
| 	break; | 	break; | ||||||
|       default: |       default: | ||||||
| 	if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDONLY) | 	if ((flags & O_ACCMODE) == O_RDONLY) | ||||||
| 	  access = GENERIC_READ; | 	  access = GENERIC_READ; | ||||||
| 	else if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY) | 	else if ((flags & O_ACCMODE) == O_WRONLY) | ||||||
| 	  access = GENERIC_WRITE; | 	  access = GENERIC_WRITE; | ||||||
| 	else | 	else | ||||||
| 	  access = GENERIC_READ | GENERIC_WRITE; | 	  access = GENERIC_READ | GENERIC_WRITE; | ||||||
| @@ -524,7 +524,7 @@ fhandler_base::open_9x (int flags, mode_t mode) | |||||||
|     { |     { | ||||||
|       if (pc.isdir ()) |       if (pc.isdir ()) | ||||||
| 	{ | 	{ | ||||||
| 	  if (flags & (O_WRONLY | O_RDWR)) | 	  if ((flags & O_ACCMODE) != O_RDONLY) | ||||||
| 	    set_errno (EISDIR); | 	    set_errno (EISDIR); | ||||||
| 	  else | 	  else | ||||||
| 	    nohandle (true); | 	    nohandle (true); | ||||||
| @@ -603,9 +603,9 @@ fhandler_base::open (int flags, mode_t mode) | |||||||
| 	break; | 	break; | ||||||
|       default: |       default: | ||||||
| 	create_options = 0; | 	create_options = 0; | ||||||
| 	if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDONLY) | 	if ((flags & O_ACCMODE) == O_RDONLY) | ||||||
| 	  access = GENERIC_READ; | 	  access = GENERIC_READ; | ||||||
| 	else if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY) | 	else if ((flags & O_ACCMODE) == O_WRONLY) | ||||||
| 	  access = GENERIC_WRITE | FILE_READ_ATTRIBUTES; | 	  access = GENERIC_WRITE | FILE_READ_ATTRIBUTES; | ||||||
| 	else | 	else | ||||||
| 	  access = GENERIC_READ | GENERIC_WRITE; | 	  access = GENERIC_READ | GENERIC_WRITE; | ||||||
|   | |||||||
| @@ -956,7 +956,7 @@ fhandler_base::open_fs (int flags, mode_t mode) | |||||||
|  |  | ||||||
|   /* Unfortunately NT allows to open directories for writing, but that's |   /* Unfortunately NT allows to open directories for writing, but that's | ||||||
|      disallowed according to SUSv3. */ |      disallowed according to SUSv3. */ | ||||||
|   if (pc.isdir () && (flags & (O_WRONLY | O_RDWR))) |   if (pc.isdir () && (flags & O_ACCMODE) != O_RDONLY) | ||||||
|     { |     { | ||||||
|       set_errno (EISDIR); |       set_errno (EISDIR); | ||||||
|       return 0; |       return 0; | ||||||
|   | |||||||
| @@ -88,12 +88,12 @@ fhandler_dev_mem::open (int flags, mode_t) | |||||||
| 			      NULL, NULL); | 			      NULL, NULL); | ||||||
|  |  | ||||||
|   ACCESS_MASK section_access; |   ACCESS_MASK section_access; | ||||||
|   if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDONLY) |   if ((flags & O_ACCMODE) == O_RDONLY) | ||||||
|     { |     { | ||||||
|       set_access (GENERIC_READ); |       set_access (GENERIC_READ); | ||||||
|       section_access = SECTION_MAP_READ; |       section_access = SECTION_MAP_READ; | ||||||
|     } |     } | ||||||
|   else if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY) |   else if ((flags & O_ACCMODE) == O_WRONLY) | ||||||
|     { |     { | ||||||
|       set_access (GENERIC_WRITE); |       set_access (GENERIC_WRITE); | ||||||
|       section_access = SECTION_MAP_READ | SECTION_MAP_WRITE; |       section_access = SECTION_MAP_READ | SECTION_MAP_WRITE; | ||||||
|   | |||||||
| @@ -84,7 +84,7 @@ fhandler_dev_raw::open (int flags, mode_t) | |||||||
|   flags |= O_BINARY; |   flags |= O_BINARY; | ||||||
|  |  | ||||||
|   /* Write-only doesn't work well with raw devices */ |   /* Write-only doesn't work well with raw devices */ | ||||||
|   if ((flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY) |   if ((flags & O_ACCMODE) == O_WRONLY) | ||||||
|     flags = ((flags & ~O_WRONLY) | O_RDWR); |     flags = ((flags & ~O_WRONLY) | O_RDWR); | ||||||
|  |  | ||||||
|   int res = fhandler_base::open (flags, 0); |   int res = fhandler_base::open (flags, 0); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user