* autoload.cc (SHFileOperationA): Drop definition.
* ntdll.h (struct _FILE_RENAME_INFORMATION): Define. * path.cc (fs_info::update): Note length of rootdir prefix in root_len. (get_nt_native_path): New function, taking over functionality of path_conv::get_nt_native_path. (path_conv::get_nt_native_path): Just call get_nt_native_path. * path.h (get_nt_native_path): Declare. (struct fs_info): New member root_len. (fs_info::length): New inline method returning root_len. (path_conv::rootdir): New inline method returning rootdir prefix. * syscalls.cc (try_to_bin): Rewrite using only system calls. (unlink_nt): Call try_to_bin with additional handle to open file parameter. (statvfs): Use path_conv::rootdir method. * wincap.h: Define has_recycle_dot_bin throughout. * wincap.cc: Ditto.
This commit is contained in:
@ -15,6 +15,8 @@ details. */
|
||||
#include <fcntl.h>
|
||||
#include <ntdef.h>
|
||||
|
||||
extern PUNICODE_STRING get_nt_native_path (const char *, UNICODE_STRING &);
|
||||
|
||||
inline bool
|
||||
has_attribute (DWORD attributes, DWORD attribs_to_test)
|
||||
{
|
||||
@ -85,6 +87,7 @@ class symlink_info;
|
||||
struct fs_info
|
||||
{
|
||||
private:
|
||||
int root_len;
|
||||
__ino64_t name_hash;
|
||||
struct status_flags
|
||||
{
|
||||
@ -106,6 +109,7 @@ struct fs_info
|
||||
void clear ()
|
||||
{
|
||||
name_hash = 0;
|
||||
root_len = 0;
|
||||
flags () = serial () = 0;
|
||||
is_remote_drive (false);
|
||||
has_buggy_open (false);
|
||||
@ -121,6 +125,7 @@ struct fs_info
|
||||
}
|
||||
inline DWORD& flags () {return status.flags;};
|
||||
inline DWORD& serial () {return status.serial;};
|
||||
inline int length () const {return root_len;}
|
||||
|
||||
IMPLEMENT_STATUS_FLAG (bool, is_remote_drive)
|
||||
IMPLEMENT_STATUS_FLAG (bool, has_buggy_open)
|
||||
@ -150,6 +155,17 @@ class path_conv
|
||||
device dev;
|
||||
bool case_clash;
|
||||
|
||||
int rootdir (char *buf) const
|
||||
{
|
||||
if (!fs.length ())
|
||||
return fs.length ();
|
||||
strncpy (buf, path, fs.length ());
|
||||
/* The length is always stored with trailing backslash. Make sure the
|
||||
backslash is actually present in the returned path. */
|
||||
buf[fs.length () - 1] = '\\';
|
||||
buf[fs.length ()] = '\0';
|
||||
return fs.length ();
|
||||
}
|
||||
bool isremote () const {return fs.is_remote_drive ();}
|
||||
bool has_acls () const {return fs.has_acls (); }
|
||||
bool hasgood_inode () const {return fs.hasgood_inode (); }
|
||||
|
Reference in New Issue
Block a user