Add second path_conv * argument to fstat()s throughout.
* fhandler.h: Change read and fstat to regparm/stdcall throughout. (fhandler_base::fstat): Just declare. Don't define. (fhandler_disk_file::fstat_helper): Declare. * fhandler.cc (fhandler_base::fstat): Move here from fhandler.h, adapt from former stat_dev(). (fhandler_disk_file::fstat): Move most of the disk-file-specific logic from stat_worker to here. Use fstat_helper to derive final fstat output. (fhandler_disk_file::fstat_helper): New method, renamed from former fstat method. (num_entries): Moved here from syscalls.cc. * fhandler_mem.cc (fhandler_dev_mem::fstat): Use base class to initialize most stuff. Invert has_physical_mem_access test for establishing permissions. * fhandler_raw.cc (fhandler_dev_raw::fstat): Eliminate unneed test and memory clearing. Use base class to initialize most stuff. * syscalls.cc (stat_dev): Eliminate. (stat_worker): Simply call fstat method to generate fstat output. Move all device specific code to appropriate fstats. * dir.cc (opendir): Pass correct arg to stat_worker to allow following symlinks.
This commit is contained in:
@@ -156,22 +156,10 @@ fhandler_dev_raw::close (void)
|
||||
}
|
||||
|
||||
int
|
||||
fhandler_dev_raw::fstat (struct stat *buf)
|
||||
fhandler_dev_raw::fstat (struct stat *buf, path_conv *pc)
|
||||
{
|
||||
if (!buf)
|
||||
{
|
||||
set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset (buf, 0, sizeof *buf);
|
||||
buf->st_mode = S_IFCHR |
|
||||
S_IRUSR | S_IWUSR |
|
||||
S_IRGRP | S_IWGRP |
|
||||
S_IROTH | S_IWOTH;
|
||||
buf->st_nlink = 1;
|
||||
this->fhandler_base::fstat (buf, pc);
|
||||
buf->st_blksize = devbuf ? devbufsiz : 1;
|
||||
buf->st_dev = buf->st_rdev = get_device () << 8 | (unit & 0xff);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user