* fhandler.h (fhandler_base::fstat_helper): Declare with additional
file attributes argument. * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Use file attributes evaluated from NtQueryFileInformation or FileInformationByHandle in call to fstat_helper. Set pc.fileattr from just evaluated file attributes here. (fhandler_base::fstat_by_name): Use file attributes evaluated from FindFileFirst or default attribute in call to fstat_helper. Set pc.fileattr from just evaluated file attributes here. (fhandler_base::fstat_helper): Use file attributes given as argument, not file attributes stored in this fhandler, since this information is potentially wrong. Add comment to explain this. * path.h (has_attribute): New global inline function. (path_conv::set_attributes): New method to change fileattr.
This commit is contained in:
@@ -14,6 +14,13 @@ details. */
|
||||
#include <fcntl.h>
|
||||
#include <ntdef.h>
|
||||
|
||||
inline bool
|
||||
has_attribute (DWORD attributes, DWORD attribs_to_test)
|
||||
{
|
||||
return attributes != INVALID_FILE_ATTRIBUTES
|
||||
&& (attributes & attribs_to_test);
|
||||
}
|
||||
|
||||
enum executable_states
|
||||
{
|
||||
is_executable,
|
||||
@@ -161,6 +168,7 @@ class path_conv
|
||||
bool isro () const {return !!(path_flags & PATH_RO);}
|
||||
bool exists () const {return fileattr != INVALID_FILE_ATTRIBUTES;}
|
||||
bool has_attribute (DWORD x) const {return exists () && (fileattr & x);}
|
||||
void set_attributes (DWORD x) {fileattr = x;}
|
||||
int isdir () const {return has_attribute (FILE_ATTRIBUTE_DIRECTORY);}
|
||||
executable_states exec_state ()
|
||||
{
|
||||
|
Reference in New Issue
Block a user