* fhandler.cc (fhandler_base::fstat): Move dev and ino calculation into caller.

* syscalls.cc (stat_worker): Calculate dev and ino calculation here, if zero.
* fhandler_proc.cc (fhandler_proc::fhandler_proc): Minor reorg for debugging.
* fhandler_process.cc (fhandler_process::exists): Return 0 on nonexistence.
(fhandler_process::fstat): Simplify pid logic.
* fhandler_tape.cc (fhandler_dev_tape::fstat): Minor reformatting.
This commit is contained in:
Christopher Faylor
2002-06-02 03:13:22 +00:00
parent 415f62a72c
commit e065a187ab
6 changed files with 37 additions and 28 deletions

View File

@@ -1073,18 +1073,17 @@ stat_worker (const char *name, struct __stat64 *buf, int nofollow,
path_conv real_path;
fhandler_base *fh = NULL;
if (!pc)
pc = &real_path;
MALLOC_CHECK;
if (check_null_invalid_struct_errno (buf))
goto done;
if (!pc)
pc = &real_path;
fh = cygheap->fdtab.build_fhandler_from_name (-1, name, NULL, *pc,
(nofollow ?
PC_SYM_NOFOLLOW
: PC_SYM_FOLLOW)
(nofollow ? PC_SYM_NOFOLLOW
: PC_SYM_FOLLOW)
| PC_FULL, stat_suffixes);
if (pc->error)
{
debug_printf ("got %d error from build_fhandler_from_name", pc->error);
@@ -1094,8 +1093,15 @@ stat_worker (const char *name, struct __stat64 *buf, int nofollow,
{
debug_printf ("(%s, %p, %d, %p), file_attributes %d", name, buf, nofollow,
pc, (DWORD) real_path);
memset (buf, 0, sizeof (struct __stat64));
memset (buf, 0, sizeof (*buf));
res = fh->fstat (buf, pc);
if (!res)
{
if (!buf->st_ino)
buf->st_ino = hash_path_name (0, fh->get_win32_name ());
if (!buf->st_dev)
buf->st_dev = FHDEVN (fh->get_device ()) << 8 | (fh->get_unit () & 0xff);
}
}
done: