FilePermissions read, FilePermissions write, FilePermissions exec,
char both, char setonly, FilePermissions setxbit)
{
- if (UnixFileSystemInfo.IsType (value, read))
+ if (UnixFileSystemInfo.IsSet (value, read))
access [index] = 'r';
- if (UnixFileSystemInfo.IsType (value, write))
+ if (UnixFileSystemInfo.IsSet (value, write))
access [index+1] = 'w';
access [index+2] = GetSymbolicMode (value, exec, both, setonly, setxbit);
}
private static char GetSymbolicMode (FilePermissions value,
FilePermissions xbit, char both, char setonly, FilePermissions setxbit)
{
- bool is_x = UnixFileSystemInfo.IsType (value, xbit);
- bool is_sx = UnixFileSystemInfo.IsType (value, setxbit);
+ bool is_x = UnixFileSystemInfo.IsSet (value, xbit);
+ bool is_sx = UnixFileSystemInfo.IsSet (value, setxbit);
if (is_x && is_sx)
return both;
public FileTypes FileType {
get {
AssertValid ();
- int type = (int) stat.st_mode;
- return (FileTypes) (type & (int) AllFileTypes);
+ return (FileTypes) (stat.st_mode & Native.FilePermissions.S_IFMT);
}
// no set as chmod(2) won't accept changing the file type.
}
}
public bool IsDirectory {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFDIR);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFDIR);}
}
public bool IsCharacterDevice {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFCHR);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFCHR);}
}
public bool IsBlockDevice {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFBLK);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFBLK);}
}
public bool IsRegularFile {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFREG);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFREG);}
}
public bool IsFifo {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFIFO);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFIFO);}
}
public bool IsSymbolicLink {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFLNK);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFLNK);}
}
public bool IsSocket {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_IFSOCK);}
+ get {AssertValid (); return IsFileType (stat.st_mode, Native.FilePermissions.S_IFSOCK);}
}
public bool IsSetUser {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_ISUID);}
+ get {AssertValid (); return IsSet (stat.st_mode, Native.FilePermissions.S_ISUID);}
}
public bool IsSetGroup {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_ISGID);}
+ get {AssertValid (); return IsSet (stat.st_mode, Native.FilePermissions.S_ISGID);}
}
public bool IsSticky {
- get {AssertValid (); return IsType (stat.st_mode, Native.FilePermissions.S_ISVTX);}
+ get {AssertValid (); return IsSet (stat.st_mode, Native.FilePermissions.S_ISVTX);}
}
- internal static bool IsType (Native.FilePermissions mode, Native.FilePermissions type)
+ internal static bool IsFileType (Native.FilePermissions mode, Native.FilePermissions type)
+ {
+ return (mode & Native.FilePermissions.S_IFMT) == type;
+ }
+
+ internal static bool IsSet (Native.FilePermissions mode, Native.FilePermissions type)
{
return (mode & type) == type;
}
int r = Native.Syscall.lstat (path, out stat);
UnixMarshal.ThrowExceptionForLastErrorIf (r);
- if (IsType (stat.st_mode, Native.FilePermissions.S_IFDIR))
+ if (IsFileType (stat.st_mode, Native.FilePermissions.S_IFDIR))
return new UnixDirectoryInfo (path, stat);
- else if (IsType (stat.st_mode, Native.FilePermissions.S_IFLNK))
+ else if (IsFileType (stat.st_mode, Native.FilePermissions.S_IFLNK))
return new UnixSymbolicLinkInfo (path, stat);
return new UnixFileInfo (path, stat);
}