aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2007-07-30 10:05:27 +0000
committerCorinna Vinschen <corinna@vinschen.de>2007-07-30 10:05:27 +0000
commit73151c54d58148eed83117dfa69f9da404fe53ac (patch)
tree38a3aa3dd75c7a4e0b314e697c1853c53c7b9246 /winsup
parentbcf7308f026982ac3ec82ed942c80eeb0f012266 (diff)
downloadnewlib-73151c54d58148eed83117dfa69f9da404fe53ac.zip
newlib-73151c54d58148eed83117dfa69f9da404fe53ac.tar.gz
newlib-73151c54d58148eed83117dfa69f9da404fe53ac.tar.bz2
* syscalls.cc (stat_worker): Don't call build_fh_pc with invalid pc.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog4
-rw-r--r--winsup/cygwin/syscalls.cc21
2 files changed, 15 insertions, 10 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 26d4c52..85f3303 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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>
* fhandler.cc (fhandler_base::wait_overlapped): Handle read EOF better
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 83b7bbb..290253c 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;
}