Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-06-05 13:21:39 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-06-05 13:21:39 +0400
commitfa821be37b56798f70b488530a07adeb2092b69b (patch)
tree7b998e8c103a40a6b6f390fe72e6842b9924d1ee
parent2c1296f8565c55177449fbae7cc365700726a890 (diff)
* fhandler.cc (fhandler_disk_file::fstat): Always reset file position
to original value after checking for executable magic.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/fhandler.cc23
2 files changed, 20 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c4cf3bb2d..3e15d5ee8 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jun 5 11:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
+
+ * fhandler.cc (fhandler_disk_file::fstat): Always reset file position
+ to original value after checking for executable magic.
+
Mon Jun 4 16:21:00 2001 Corinna Vinschen <corinna@vinschen.de>
* cygheap.h (cygheap_user::cygheap_user): Initialize token to
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 15e0e2303..5c613bccd 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -974,16 +974,23 @@ fhandler_disk_file::fstat (struct stat *buf)
buf->st_mode |= S_IFREG;
if (!dont_care_if_execable () && !get_execable_p ())
{
- DWORD done;
+ DWORD cur, done;
char magic[3];
- /* FIXME should we use /etc/magic ? */
- magic[0] = magic[1] = magic[2] = '\0';
- if (ReadFile (get_handle (), magic, 3, &done, 0)
- && done == 3)
+
+ /* First retrieve current position, set to beginning
+ of file if not already there. */
+ cur = SetFilePointer (get_handle(), 0, NULL, FILE_CURRENT);
+ if (cur != INVALID_SET_FILE_POINTER &&
+ (!cur ||
+ SetFilePointer (get_handle(), 0, NULL, FILE_BEGIN)
+ != INVALID_SET_FILE_POINTER))
{
- if (has_exec_chars (magic, done))
- set_execable_p ();
- SetFilePointer (get_handle(), -(LONG) done, NULL, FILE_CURRENT);
+ /* FIXME should we use /etc/magic ? */
+ magic[0] = magic[1] = magic[2] = '\0';
+ if (ReadFile (get_handle (), magic, 3, &done, 0) &&
+ done == 3 && has_exec_chars (magic, done))
+ set_execable_p ();
+ SetFilePointer (get_handle(), cur, NULL, FILE_BEGIN);
}
}
if (get_execable_p ())