From 8b86659699e7daf9490f60d7c710272fcb2f9425 Mon Sep 17 00:00:00 2001 From: corinna Date: Mon, 30 Jul 2007 10:05:26 +0000 Subject: [PATCH] * syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc. --- winsup/cygwin/ChangeLog | 4 ++++ winsup/cygwin/syscalls.cc | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 26d4c5255f..85f3303fd6 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +2007-07-30 Corinna Vinschen + + * syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc. + 2007-07-29 Christopher Faylor * fhandler.cc (fhandler_base::wait_overlapped): Handle read EOF better diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 83b7bbb842..290253cd87 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1202,22 +1202,23 @@ int __stdcall stat_worker (path_conv &pc, struct __stat64 *buf) { int res = -1; - fhandler_base *fh = NULL; myfault efault; if (efault.faulted (EFAULT)) goto error; - if (!(fh = build_fh_pc (pc))) - goto error; - - if (fh->error ()) + if (pc.error) { - debug_printf ("got %d error from build_fh_name", fh->error ()); - set_errno (fh->error ()); + debug_printf ("got %d error from build_fh_name", pc.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", pc.normalized_path, buf, fh, (DWORD) *fh); memset (buf, 0, sizeof (*buf)); @@ -1231,14 +1232,14 @@ stat_worker (path_conv &pc, struct __stat64 *buf) if (!buf->st_rdev) buf->st_rdev = buf->st_dev; } + delete fh; } else set_errno (ENOENT); - delete fh; error: MALLOC_CHECK; - syscall_printf ("%d = (%s, %p)", res, pc.normalized_path, buf); + syscall_printf ("%d = (%s, %p)", res, pc.normalized_path ?: "", buf); return res; } -- 2.11.0