* 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:
@ -71,6 +71,8 @@ enum
|
||||
FH_FFIXUP = 0x02000000, /* Set if need to fixup after fork. */
|
||||
FH_LOCAL = 0x04000000, /* File is unix domain socket */
|
||||
FH_FIFO = 0x08000000, /* File is FIFO */
|
||||
FH_ISREMOTE= 0x10000000, /* File is on a remote drive */
|
||||
FH_DCEXEC = 0x20000000, /* Don't care if this is executable */
|
||||
FH_HASACLS = 0x40000000, /* True if fs of file has ACLS */
|
||||
|
||||
/* Device flags */
|
||||
@ -241,8 +243,10 @@ public:
|
||||
void set_execable_p (executable_states val)
|
||||
{
|
||||
FHCONDSETF (val == is_executable, EXECABL);
|
||||
FHCONDSETF (val == dont_care_if_executable, DCEXEC);
|
||||
}
|
||||
void set_execable_p () { FHSETF (EXECABL); }
|
||||
int dont_care_if_execable () { return FHISSETF (DCEXEC); }
|
||||
|
||||
int get_append_p () { return FHISSETF (APPEND); }
|
||||
void set_append_p (int val) { FHCONDSETF (val, APPEND); }
|
||||
@ -264,6 +268,9 @@ public:
|
||||
int has_acls () { return FHISSETF (HASACLS); }
|
||||
void set_has_acls (int val) { FHCONDSETF (val, HASACLS); }
|
||||
|
||||
int isremote () { return FHISSETF (ISREMOTE); }
|
||||
void set_isremote (int val) { FHCONDSETF (val, ISREMOTE); }
|
||||
|
||||
int no_free_names () { return FHISSETF (NOFRNAME); }
|
||||
void set_no_free_names (int val) { FHCONDSETF (val, NOFRNAME); }
|
||||
void set_no_free_names () { FHSETF (NOFRNAME); }
|
||||
|
Reference in New Issue
Block a user