public long Stat(string path, KStat *statbuf) { if (!_availableFiles.TryGetValue(path, out var o)) { return(-ENOENT); } StatInternal(statbuf, o); return(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); }
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; }