internal UnixFileSystemInfo(String path, Native.Stat stat) { this.originalPath = path; this.fullPath = UnixPath.GetFullPath(path); this.stat = stat; this.valid = true; }
private void UpdateDetailPermissions() { Stat buf = new Mono.Unix.Native.Stat(); Syscall.stat(slices.ActiveSlice.GetActiveNode().File, out buf); permissionCheckOR.Active = false; permissionCheckGR.Active = false; permissionCheckUR.Active = false; permissionCheckOW.Active = false; permissionCheckGW.Active = false; permissionCheckUW.Active = false; permissionCheckOX.Active = false; permissionCheckGX.Active = false; permissionCheckUX.Active = false; if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IRUSR) != 0) { permissionCheckOR.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IRGRP) != 0) { permissionCheckGR.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IROTH) != 0) { permissionCheckUR.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWUSR) != 0) { permissionCheckOW.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWGRP) != 0) { permissionCheckGW.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWOTH) != 0) { permissionCheckUW.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXUSR) != 0) { permissionCheckOX.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXGRP) != 0) { permissionCheckGX.Active = true; } if ((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXOTH) != 0) { permissionCheckUX.Active = true; } }
protected virtual bool GetFileStatus(string path, out Native.Stat stat) { return(Native.Syscall.stat(path, out stat) == 0); }
internal UnixDirectoryInfo(string path, Native.Stat stat) : base(path, stat) { }
internal UnixFileInfo(string path, Native.Stat stat) : base(path, stat) { }
private void UpdateDetailPermissions() { Stat buf = new Mono.Unix.Native.Stat() ; Syscall.stat(slices.ActiveSlice.GetActiveNode().File, out buf); permissionCheckOR.Active = false; permissionCheckGR.Active = false; permissionCheckUR.Active = false; permissionCheckOW.Active = false; permissionCheckGW.Active = false; permissionCheckUW.Active = false; permissionCheckOX.Active = false; permissionCheckGX.Active = false; permissionCheckUX.Active = false; if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IRUSR) != 0) { permissionCheckOR.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IRGRP) != 0) { permissionCheckGR.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IROTH) != 0) { permissionCheckUR.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWUSR) != 0) { permissionCheckOW.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWGRP) != 0) { permissionCheckGW.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IWOTH) != 0) { permissionCheckUW.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXUSR) != 0) { permissionCheckOX.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXGRP) != 0) { permissionCheckGX.Active = true; } if((buf.st_mode & Mono.Unix.Native.FilePermissions.S_IXOTH) != 0) { permissionCheckUX.Active = true; } }
/// <summary> /// Set chmod a+x on a path in Linux. No-op in Windows. /// The x mode bit will make a file executable or a directory searchable. /// </summary> public static void SetExecutable(string path) { #if __MonoCS__ if (!FileUtils.FileExists(path) && !FileUtils.DirectoryExists(path)) throw new FileNotFoundException(); var fileStat = new Mono.Unix.Native.Stat(); Mono.Unix.Native.Syscall.stat(path, out fileStat); var originalMode = fileStat.st_mode; var modeWithExecute = originalMode | FilePermissions.S_IXUSR | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH; Mono.Unix.Native.Syscall.chmod(path, modeWithExecute); #endif }
internal UnixSymbolicLinkInfo(string path, Native.Stat stat) : base(path, stat) { }
protected override bool GetFileStatus(string path, out Native.Stat stat) { return(Native.Syscall.lstat(path, out stat) == 0); }
/// <summary> /// Helper for tests. Remove execute or searchable mode bit from a file or directory. /// </summary> private void RemoveExecuteBit(string path) { #if __MonoCS__ var fileStat = new Mono.Unix.Native.Stat(); Mono.Unix.Native.Syscall.stat(path, out fileStat); var originalMode = fileStat.st_mode; var xModeBits = FilePermissions.S_IXUSR | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH; var modeWithoutX = originalMode & ~xModeBits; Mono.Unix.Native.Syscall.chmod(path, modeWithoutX); #endif }
public static bool TryCopy(IntPtr source, out Stat destination) { return(ToStat(source, out destination) == 0); }
public static bool TryCopy(ref Stat source, IntPtr destination) { return(FromStat(ref source, destination) == 0); }
private static extern int ToStat(IntPtr source, out Stat destination);
private static extern int FromStat(ref Stat source, IntPtr destination);