* path.cc (chdir): Always send unsigned chars to isspace since newlib's isspace
doesn't deal well with "negative" chars. * fhandler.cc (fhandler_disk_file::open): Propagate remote status of file garnered from path_conv. Move #! checking to fstat. (fhandler_disk_file::fstat): Reorganize st_mode setting to eliminate duplication. Move check for #! here from fhandler::open. * fhandler.h (fhandler_base::isremote): New method. (fhandler_base::set_isremote): Ditto. (fhandler_base::set_execable_p): Also record "don't care if executable state". (fhandler_base::dont_care_if_execable): New method. * path.cc (path_conv::check): Clear new flags. Appropriately set vol_flags, drive_type, and is_remote_drive. * path.h: Add new flags and methods for manipulating them. * syscalls.cc (_unlink): Use isremote() to determine if a path is remote rather than calling GetDriveType. (stat_worker): Ditto. * security.cc (get_file_attribute): Or attribute with result of NTReadEA to be consistent with get_nt_attribute.
This commit is contained in:
		| @@ -57,19 +57,24 @@ class path_conv | ||||
| { | ||||
|   char path[MAX_PATH]; | ||||
|   void add_ext_from_sym (symlink_info&); | ||||
|   bool is_remote_drive; | ||||
|  public: | ||||
|  | ||||
|   unsigned path_flags; | ||||
|   DWORD vol_flags; | ||||
|   DWORD drive_type; | ||||
|   DWORD vol_serial; | ||||
|  | ||||
|   int isdisk () {return path_flags & PATH_ISDISK;} | ||||
|   int has_acls () {return path_flags & PATH_HASACLS;} | ||||
|   int has_symlinks () {return path_flags & PATH_HAS_SYMLINKS;} | ||||
|   int hasgood_inode () {return path_flags & PATH_HASACLS;}  // Not strictly correct | ||||
|   int has_buggy_open () {return path_flags & PATH_HASBUGGYOPEN;} | ||||
|   int isbinary () {return path_flags & PATH_BINARY;} | ||||
|   int issymlink () {return path_flags & PATH_SYMLINK;} | ||||
|   int issocket () {return path_flags & PATH_SOCKET;} | ||||
|   int iscygexec () {return path_flags & PATH_CYGWIN_EXEC;} | ||||
|   int isdisk () const { return path_flags & PATH_ISDISK;} | ||||
|   int isremote () const {return is_remote_drive;} | ||||
|   int has_acls () const {return path_flags & PATH_HASACLS;} | ||||
|   int has_symlinks () const {return path_flags & PATH_HAS_SYMLINKS;} | ||||
|   int hasgood_inode () const {return path_flags & PATH_HASACLS;}  // Not strictly correct | ||||
|   int has_buggy_open () const {return path_flags & PATH_HASBUGGYOPEN;} | ||||
|   int isbinary () const {return path_flags & PATH_BINARY;} | ||||
|   int issymlink () const {return path_flags & PATH_SYMLINK;} | ||||
|   int issocket () const {return path_flags & PATH_SOCKET;} | ||||
|   int iscygexec () const {return path_flags & PATH_CYGWIN_EXEC;} | ||||
|   executable_states exec_state () | ||||
|   { | ||||
|     extern int _check_for_executable; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user