Beispiel #1
0
        public long Stat(string path, KStat *statbuf)
        {
            if (!_availableFiles.TryGetValue(path, out var o))
            {
                return(-ENOENT);
            }

            StatInternal(statbuf, o);
            return(0);
        }
Beispiel #2
0
        public long Fstat(int fd, KStat *statbuf)
        {
            if (fd < 0 || fd >= _openFiles.Count)
            {
                return(-EBADF);
            }
            var o = _openFiles[fd];

            if (o == null)
            {
                return(-EBADF);
            }
            StatInternal(statbuf, o);
            return(0);
        }
Beispiel #3
0
        private void StatInternal(KStat *s, IFileObject o)
        {
            s->st_dev   = 1;
            s->st_ino   = 1;
            s->st_nlink = 0;

            uint flags = 0;

            if (o.Stream.CanRead)
            {
                flags |= S_IRUSR | S_IRGRP | S_IROTH;
            }
            if (o.Stream.CanWrite)
            {
                flags |= S_IWUSR | S_IWGRP | S_IWOTH;
            }
            if (o.Stream.CanSeek)
            {
                flags |= S_IFREG;
            }
            else
            {
                flags |= S_IFIFO;
            }
            s->st_mode = flags;
            s->st_uid  = 0;
            s->st_gid  = 0;
            s->__pad0  = 0;
            s->st_rdev = 0;
            if (o.Stream.CanSeek)
            {
                s->st_size = o.Stream.Length;
            }
            else
            {
                s->st_size = 0;
            }
            s->st_blksize = 4096;
            s->st_blocks  = (s->st_size + 511) / 512;

            s->st_atime_sec  = 1262304000000;
            s->st_atime_nsec = 1000000000 / 2;
            s->st_mtime_sec  = 1262304000000;
            s->st_mtime_nsec = 1000000000 / 2;
            s->st_ctime_sec  = 1262304000000;
            s->st_ctime_nsec = 1000000000 / 2;
        }