예제 #1
0
        void CopyFile(ProgressMonitor monitor, string src, string dest, DeployFileAttributes atts)
        {
            dest = FileService.GetFullPath(dest);
            monitor.Log.WriteLine(GettextCatalog.GetString("Deploying file {0}.", dest));

            string targetDir = Path.GetDirectoryName(dest);

            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
            }
            FileService.CopyFile(src, dest);

            Mono.Unix.Native.FilePermissions perms = Mono.Unix.Native.FilePermissions.DEFFILEMODE;
            if ((atts & DeployFileAttributes.Executable) != 0)
            {
                perms |= Mono.Unix.Native.FilePermissions.S_IXGRP | Mono.Unix.Native.FilePermissions.S_IXUSR | Mono.Unix.Native.FilePermissions.S_IXOTH;
            }
            if ((atts & DeployFileAttributes.ReadOnly) != 0)
            {
                perms &= ~(Mono.Unix.Native.FilePermissions.S_IWGRP | Mono.Unix.Native.FilePermissions.S_IWOTH | Mono.Unix.Native.FilePermissions.S_IWUSR);
            }
            if (perms != Mono.Unix.Native.FilePermissions.DEFFILEMODE)
            {
                Mono.Unix.Native.Syscall.chmod(dest, perms);
            }
        }
        public void Create(Mono.Unix.Native.FilePermissions mode)
        {
            int r = Mono.Unix.Native.Syscall.mkdir(FullPath, mode);

            UnixMarshal.ThrowExceptionForLastErrorIf(r);
            base.Refresh();
        }
예제 #3
0
 public static void MakeExecutable(string filename)
 {
     Mono.Unix.Native.Stat stat;
     if (0 == Mono.Unix.Native.Syscall.stat(filename, out stat))
     {
         Mono.Unix.Native.FilePermissions fp = stat.st_mode | Mono.Unix.Native.FilePermissions.S_IXUSR;
         Mono.Unix.Native.Syscall.chmod(filename, fp);
     }
 }
예제 #4
0
        public static bool IsWritable(string path)
        {
            Mono.Unix.Native.Stat stat;
            Mono.Unix.Native.Syscall.lstat(path, out stat);

            Mono.Unix.Native.FilePermissions type = (stat.st_mode & Mono.Unix.Native.FilePermissions.S_IFMT);

            if (type == Mono.Unix.Native.FilePermissions.S_IWUSR ||
                type == Mono.Unix.Native.FilePermissions.S_IWGRP ||
                type == Mono.Unix.Native.FilePermissions.S_IWOTH)
            {
                return(true);
            }

            return(false);
        }
예제 #5
0
파일: Utils.cs 프로젝트: ciiqr/xdg-sharp
        public static void makedirs(string path, Mono.Unix.Native.FilePermissions permissions = Mono.Unix.Native.FilePermissions.ALLPERMS)
        {
            string[] pathParts = path.Split(Path.PathSeparator);

            for (int i = 0; i < pathParts.Length; i++)
            {
                if (i > 0)
                {
                    pathParts[i] = Path.Combine(pathParts[i - 1], pathParts[i]);
                }

                if (!Directory.Exists(pathParts[i]))
                {
                    Mono.Unix.Native.Syscall.mkdir(pathParts[i], permissions);
                }
            }
        }
예제 #6
0
        static public bool IsSpecialFile(string path)
        {
            Mono.Unix.Native.Stat stat;
            Mono.Unix.Native.Syscall.lstat(path, out stat);

            Mono.Unix.Native.FilePermissions type = (stat.st_mode & Mono.Unix.Native.FilePermissions.S_IFMT);

            if (type == Mono.Unix.Native.FilePermissions.S_IFLNK ||
                type == Mono.Unix.Native.FilePermissions.S_IFCHR ||
                type == Mono.Unix.Native.FilePermissions.S_IFBLK ||
                type == Mono.Unix.Native.FilePermissions.S_IFIFO ||
                type == Mono.Unix.Native.FilePermissions.S_IFSOCK)
            {
                return(true);
            }

            return(false);
        }
 public void Create()
 {
     Mono.Unix.Native.FilePermissions mode =
         Mono.Unix.Native.FilePermissions.ACCESSPERMS;
     Create(mode);
 }