From 9c6eda7fa68ab1f6d6a09a2de8421061f2e422a8 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Thu, 12 May 2005 20:40:47 +0000 Subject: [PATCH] * Syscall.cs: The Statvfs structure should contain a MountFlags enumeration, not a ulong (we can "safely" do this since POSIX defines some values for f_flag, so we should be kind and expose them). * UnixConvert.cs: Add MountFlags conversion functions. svn path=/trunk/mcs/; revision=44466 --- mcs/class/Mono.Posix/Mono.Unix/ChangeLog | 7 ++++ mcs/class/Mono.Posix/Mono.Unix/Syscall.cs | 16 +++++++++- mcs/class/Mono.Posix/Mono.Unix/UnixConvert.cs | 32 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/mcs/class/Mono.Posix/Mono.Unix/ChangeLog b/mcs/class/Mono.Posix/Mono.Unix/ChangeLog index ecd3a7f2f4b..34ec5cb9f12 100644 --- a/mcs/class/Mono.Posix/Mono.Unix/ChangeLog +++ b/mcs/class/Mono.Posix/Mono.Unix/ChangeLog @@ -1,3 +1,10 @@ +2005-05-12 Jonathan Pryor + + * Syscall.cs: The Statvfs structure should contain a MountFlags enumeration, + not a ulong (we can "safely" do this since POSIX defines some values for + f_flag, so we should be kind and expose them). + * UnixConvert.cs: Add MountFlags conversion functions. + 2005-05-02 Joe Shaw * UnixListener.cs (Init): Remove the call to Cleanup() and the diff --git a/mcs/class/Mono.Posix/Mono.Unix/Syscall.cs b/mcs/class/Mono.Posix/Mono.Unix/Syscall.cs index bc5317eaeb7..feaa7b37d57 100644 --- a/mcs/class/Mono.Posix/Mono.Unix/Syscall.cs +++ b/mcs/class/Mono.Posix/Mono.Unix/Syscall.cs @@ -620,6 +620,20 @@ namespace Mono.Unix { XATTR_REPLACE = 2, } + [Map][Flags] + public enum MountFlags : ulong { + ST_RDONLY = 1, // Mount read-only + ST_NOSUID = 2, // Ignore suid and sgid bits + ST_NODEV = 4, // Disallow access to device special files + ST_SYNCHRONOUS = 16, // Writes are synced at once + ST_MANDLOCK = 64, // Allow mandatory locks on an FS + ST_WRITE = 128, // Write on file/directory/symlink + ST_APPEND = 256, // Append-only file + ST_IMMUTABLE = 512, // Immutable file + ST_NOATIME = 1024, // Do not update access times + ST_NODIRATIME = 2048, // Do not update directory access times + } + #endregion #region Structures @@ -666,7 +680,7 @@ namespace Mono.Unix { public /* fsfilcnt_t */ ulong f_ffree; // # free inodes public /* fsfilcnt_t */ ulong f_favail; // # free inodes for non-root public ulong f_fsid; // file system id - public ulong f_flag; // mount flags + public MountFlags f_flag; // mount flags public ulong f_namemax; // maximum filename length } diff --git a/mcs/class/Mono.Posix/Mono.Unix/UnixConvert.cs b/mcs/class/Mono.Posix/Mono.Unix/UnixConvert.cs index 18405eb8bcc..3831331f0cf 100644 --- a/mcs/class/Mono.Posix/Mono.Unix/UnixConvert.cs +++ b/mcs/class/Mono.Posix/Mono.Unix/UnixConvert.cs @@ -695,6 +695,38 @@ namespace Mono.Unix { return rval; } + [DllImport (LIB, EntryPoint="Mono_Posix_FromMountFlags")] + private static extern int FromMountFlags (MountFlags value, out UInt64 rval); + + public static bool TryFromMountFlags (MountFlags value, out UInt64 rval) + { + return FromMountFlags (value, out rval) == 0; + } + + public static UInt64 FromMountFlags (MountFlags value) + { + UInt64 rval; + if (FromMountFlags (value, out rval) == -1) + ThrowArgumentException (value); + return rval; + } + + [DllImport (LIB, EntryPoint="Mono_Posix_ToMountFlags")] + private static extern int ToMountFlags (UInt64 value, out MountFlags rval); + + public static bool TryToMountFlags (UInt64 value, out MountFlags rval) + { + return ToMountFlags (value, out rval) == 0; + } + + public static MountFlags ToMountFlags (UInt64 value) + { + MountFlags rval; + if (ToMountFlags (value, out rval) == -1) + ThrowArgumentException (value); + return rval; + } + // // Non-generated exports // -- 2.25.1