* syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc.

This commit is contained in:
Corinna Vinschen 2007-07-30 10:05:27 +00:00
parent bcf7308f02
commit 73151c54d5
2 changed files with 15 additions and 10 deletions

View File

@ -1,3 +1,7 @@
2007-07-30 Corinna Vinschen <corinna@vinschen.de>
* syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc.
2007-07-29 Christopher Faylor <me+cygwin@cgf.cx> 2007-07-29 Christopher Faylor <me+cygwin@cgf.cx>
* fhandler.cc (fhandler_base::wait_overlapped): Handle read EOF better * fhandler.cc (fhandler_base::wait_overlapped): Handle read EOF better

View File

@ -1202,22 +1202,23 @@ int __stdcall
stat_worker (path_conv &pc, struct __stat64 *buf) stat_worker (path_conv &pc, struct __stat64 *buf)
{ {
int res = -1; int res = -1;
fhandler_base *fh = NULL;
myfault efault; myfault efault;
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
goto error; goto error;
if (!(fh = build_fh_pc (pc))) if (pc.error)
goto error;
if (fh->error ())
{ {
debug_printf ("got %d error from build_fh_name", fh->error ()); debug_printf ("got %d error from build_fh_name", pc.error);
set_errno (fh->error ()); set_errno (pc.error);
} }
else if (fh->exists ()) else if (pc.exists ())
{ {
fhandler_base *fh;
if (!(fh = build_fh_pc (pc)))
goto error;
debug_printf ("(%s, %p, %p), file_attributes %d", debug_printf ("(%s, %p, %p), file_attributes %d",
pc.normalized_path, buf, fh, (DWORD) *fh); pc.normalized_path, buf, fh, (DWORD) *fh);
memset (buf, 0, sizeof (*buf)); memset (buf, 0, sizeof (*buf));
@ -1231,14 +1232,14 @@ stat_worker (path_conv &pc, struct __stat64 *buf)
if (!buf->st_rdev) if (!buf->st_rdev)
buf->st_rdev = buf->st_dev; buf->st_rdev = buf->st_dev;
} }
delete fh;
} }
else else
set_errno (ENOENT); set_errno (ENOENT);
delete fh;
error: error:
MALLOC_CHECK; MALLOC_CHECK;
syscall_printf ("%d = (%s, %p)", res, pc.normalized_path, buf); syscall_printf ("%d = (%s, %p)", res, pc.normalized_path ?: "", buf);
return res; return res;
} }