Exemplo n.º 1
0
        protected override Errno OnGetPathStatus(string path, out Stat stat)
        {
            stat = new Stat();
            if (path == "/")
            {
                DirectoryInfo di = new DirectoryInfo(Source);
                stat.st_mode  = FilePermissions.S_IFDIR | NativeConvert.FromOctalPermissionString("0666");
                stat.st_size  = (4096 * (long)Math.Ceiling(walker.RootNode.Nodes.Count * 0.1));
                stat.st_mtime = NativeConvert.FromDateTime(di.LastWriteTime);
                stat.st_nlink = 2 + (ulong)Helpers.GetEntriesCount(walker.RootNode, new EntryKind[] { EntryKind.Directory, EntryKind.ZipFile, EntryKind.ZipDirectoryEntry });
            }

            else
            {
                try
                {
                    Entry fsEntry = walker.SearchEntry(path.Substring(1));
                    if (fsEntry == null)
                    {
                        return(Errno.ENOENT);
                    }
                    Helpers.SetStatInfo(fsEntry, ref stat);
                }
                catch (DirectoryNotFoundException)
                {
                    return(Errno.ENOTDIR);
                }
                catch (IOException)
                {
                    return(Errno.EIO);
                }
            }
            return(0);
        }
Exemplo n.º 2
0
        static internal void SetStatInfo(Entry entry, ref Stat stat)
        {
            stat.st_mode = NativeConvert.FromOctalPermissionString("0444");
            switch (entry.Kind)
            {
            case EntryKind.Directory:
            case EntryKind.ZipDirectoryEntry:
            case EntryKind.ZipFile:
                stat.st_mode |= FilePermissions.S_IFDIR | NativeConvert.FromOctalPermissionString("0222");
                stat.st_nlink = 2 + ((entry.Node != null) ? (ulong)GetEntriesCount(entry.Node, new EntryKind[] { EntryKind.Directory, EntryKind.ZipFile, EntryKind.ZipDirectoryEntry }) : 0);
                break;

            case EntryKind.File:
                stat.st_mode |= FilePermissions.S_IFLNK | NativeConvert.FromOctalPermissionString("0777");
                stat.st_nlink = 1;
                break;

            case EntryKind.ZipFileEntry:
                stat.st_mode |= FilePermissions.S_IFREG;
                stat.st_nlink = 1;
                break;
            }
            stat.st_size  = entry.Size;
            stat.st_mtime = NativeConvert.FromDateTime(entry.LastWriteTime);
        }
        internal DirectoryEntry MakeDirectoryEntry(string name, DateTime writeTime, long size)
        {
            DirectoryEntry dirEntry = new DirectoryEntry(name);

            dirEntry.Stat.st_mode  = NativeConvert.FromOctalPermissionString("0666") | FilePermissions.S_IFDIR;
            dirEntry.Stat.st_size  = size;
            dirEntry.Stat.st_mtime = NativeConvert.FromDateTime(writeTime);
            return(dirEntry);
        }