X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Usermode%2FLibraries%2Flibposix.so_src%2Fstat.c;h=50bd98ec0c8ca1f053fefb6b9d32cbcaec2943b9;hb=2238e69eea50d2274553926f3f294822c1972ff0;hp=198f7d5b1e3c985030003d7673a796c1c8317d7f;hpb=a8759b69a7dddfeff55bdfde62a9a0765ccc7eee;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libposix.so_src/stat.c b/Usermode/Libraries/libposix.so_src/stat.c index 198f7d5b..50bd98ec 100644 --- a/Usermode/Libraries/libposix.so_src/stat.c +++ b/Usermode/Libraries/libposix.so_src/stat.c @@ -40,13 +40,33 @@ int fstat(int fd, struct stat *buf) t_sysFInfo info; int rv = _SysFInfo(fd, &info, 0); - if( !rv ) { + if( rv == -1 ) { return -1; } + _SysDebug("fstat(fd=%i,buf=%p)", fd, buf); + // TODO: Populate buf - buf->st_mode = 0; -// memset(buf, 0, sizeof(*buf)); + buf->st_dev = info.mount; + buf->st_ino = info.inode; + if( info.flags & FILEFLAG_SYMLINK ) + buf->st_mode = S_IFLNK; + else if( info.flags & FILEFLAG_DIRECTORY ) + buf->st_mode = S_IFDIR; + else + buf->st_mode = S_IFREG; + // TODO: User modes (assume 660) + buf->st_mode |= 0660; + buf->st_nlink = 1; + buf->st_uid = info.uid; + buf->st_gid = info.gid; + buf->st_rdev = NULL; + buf->st_size = info.size; + buf->st_blksize = 512; + buf->st_blocks = (info.size+511)/512; + buf->st_atime = info.atime; + buf->st_mtime = info.mtime; + buf->st_ctime = info.ctime; return 0; }