diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2007-07-30 10:05:27 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2007-07-30 10:05:27 +0000 |
commit | 73151c54d58148eed83117dfa69f9da404fe53ac (patch) | |
tree | 38a3aa3dd75c7a4e0b314e697c1853c53c7b9246 /winsup | |
parent | bcf7308f026982ac3ec82ed942c80eeb0f012266 (diff) | |
download | newlib-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/ChangeLog | 4 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 21 |
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; } |