diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-07-28 10:39:55 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-07-28 10:39:55 +0000 |
commit | 8d641a5b46d3e5903c6f35125a45e23a4cbc8205 (patch) | |
tree | ed2bb2722255c95902d004e6bf0d002deaed4fc3 /winsup/cygwin/mount.h | |
parent | d826cbf322fdf9a0db4431e8d8db1c145d19bccc (diff) | |
download | cygnal-8d641a5b46d3e5903c6f35125a45e23a4cbc8205.tar.gz cygnal-8d641a5b46d3e5903c6f35125a45e23a4cbc8205.tar.bz2 cygnal-8d641a5b46d3e5903c6f35125a45e23a4cbc8205.zip |
* mount.h (enum fs_info_type): New type.
(IMPLEMENT_FS_FLAG): New define.
(class fs_info): Convert filesystem type status flags into an enum
fs_info_type. Add cifs FS. Revert change to has_buggy_open and
has_buggy_fileid_dirinfo. Make them normal; status flags again.
Implement is_FS functions using IMPLEMENT_FS_FLAG.
* mount.cc (fs_info::update): Define MINIMAL_WIN_NTFS_FLAGS and
FS_IS_WINDOWS_NTFS. Add comment. Only test remote filesystems
for "NTFS" once. Add is_cifs check using FS_IS_WINDOWS_NTFS.
Set has_buggy_open flag for SUNWNFS. Set has_buggy_fileid_dirinfo
flag for UNIXFS and all cifs type filesystems. Only check for
caseinsensitivity once.
(fillout_mntent): Create locale fs_names array. Use for setting
_my_tls.locals.mnt_type.
Diffstat (limited to 'winsup/cygwin/mount.h')
-rw-r--r-- | winsup/cygwin/mount.h | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/winsup/cygwin/mount.h b/winsup/cygwin/mount.h index 8876bbe13..39d27569c 100644 --- a/winsup/cygwin/mount.h +++ b/winsup/cygwin/mount.h @@ -12,39 +12,47 @@ details. */ #ifndef _MOUNT_H #define _MOUNT_H +enum fs_info_type +{ + none = 0, + fat, + ntfs, + samba, + nfs, + netapp, + cdrom, + udf, + csc_cache, + sunwnfs, + unixfs, + mvfs, + cifs, + /* Always last. */ + max_fs_type +}; + +#define IMPLEMENT_FS_FLAG(func, flag) \ + bool func (bool val) { if (val) status.fs_type = flag; return val; } \ + bool func () const { return status.fs_type == flag; } + class fs_info { struct status_flags { - ULONG flags; /* Volume flags */ - ULONG samba_version; /* Samba version if available */ - ULONG name_len; /* MaximumComponentNameLength */ + ULONG flags; /* Volume flags */ + ULONG samba_version; /* Samba version if available */ + ULONG name_len; /* MaximumComponentNameLength */ + fs_info_type fs_type; /* Filesystem type */ unsigned is_remote_drive : 1; unsigned has_acls : 1; unsigned hasgood_inode : 1; unsigned caseinsensitive : 1; - union - { - struct - { - unsigned is_fat : 1; - unsigned is_ntfs : 1; - unsigned is_samba : 1; - unsigned is_nfs : 1; - unsigned is_netapp : 1; - unsigned is_cdrom : 1; - unsigned is_udf : 1; - unsigned is_csc_cache : 1; - unsigned is_sunwnfs : 1; - unsigned is_unixfs : 1; - unsigned is_mvfs : 1; - }; - unsigned long fs_flags; - }; + unsigned has_buggy_open : 1; + unsigned has_buggy_fileid_dirinfo : 1; } status; - ULONG sernum; - char fsn[80]; - unsigned long got_fs () { return status.fs_flags; } + ULONG sernum; /* Volume Serial Number */ + char fsn[80]; /* Windows filesystem name */ + unsigned long got_fs () const { return status.fs_type != none; } public: void clear () @@ -62,21 +70,24 @@ class fs_info IMPLEMENT_STATUS_FLAG (bool, has_acls) IMPLEMENT_STATUS_FLAG (bool, hasgood_inode) IMPLEMENT_STATUS_FLAG (bool, caseinsensitive) - IMPLEMENT_STATUS_FLAG (bool, is_fat) - IMPLEMENT_STATUS_FLAG (bool, is_ntfs) - IMPLEMENT_STATUS_FLAG (bool, is_samba) - IMPLEMENT_STATUS_FLAG (bool, is_nfs) - IMPLEMENT_STATUS_FLAG (bool, is_netapp) - IMPLEMENT_STATUS_FLAG (bool, is_cdrom) - IMPLEMENT_STATUS_FLAG (bool, is_udf) - IMPLEMENT_STATUS_FLAG (bool, is_csc_cache) - IMPLEMENT_STATUS_FLAG (bool, is_sunwnfs) - IMPLEMENT_STATUS_FLAG (bool, is_unixfs) - IMPLEMENT_STATUS_FLAG (bool, is_mvfs) + IMPLEMENT_STATUS_FLAG (bool, has_buggy_open) + IMPLEMENT_STATUS_FLAG (bool, has_buggy_fileid_dirinfo) + IMPLEMENT_FS_FLAG (is_fat, fat) + IMPLEMENT_FS_FLAG (is_ntfs, ntfs) + IMPLEMENT_FS_FLAG (is_samba, samba) + IMPLEMENT_FS_FLAG (is_nfs, nfs) + IMPLEMENT_FS_FLAG (is_netapp, netapp) + IMPLEMENT_FS_FLAG (is_cdrom, cdrom) + IMPLEMENT_FS_FLAG (is_udf, udf) + IMPLEMENT_FS_FLAG (is_csc_cache, csc_cache) + IMPLEMENT_FS_FLAG (is_sunwnfs, sunwnfs) + IMPLEMENT_FS_FLAG (is_unixfs, unixfs) + IMPLEMENT_FS_FLAG (is_mvfs, mvfs) + IMPLEMENT_FS_FLAG (is_cifs, cifs) + fs_info_type what_fs () const { return status.fs_type; } + ULONG serial_number () const { return sernum; } - int has_buggy_open () const {return is_sunwnfs ();} - int has_buggy_fileid_dirinfo () const {return is_unixfs ();} const char *fsname () const { return fsn[0] ? fsn : "unknown"; } bool update (PUNICODE_STRING, HANDLE) __attribute__ ((regparm (3))); |