diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-04-09 17:55:01 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-04-09 17:55:01 +0000 |
commit | 0c4023011d7dff1c67ff26e0919b3c6cf82b62ad (patch) | |
tree | e3890503a9402e12124c9f28f449eb467d28bea2 /winsup | |
parent | 214a0e67fd01131131e8f22a73899651511d3e41 (diff) | |
download | newlib-0c4023011d7dff1c67ff26e0919b3c6cf82b62ad.zip newlib-0c4023011d7dff1c67ff26e0919b3c6cf82b62ad.tar.gz newlib-0c4023011d7dff1c67ff26e0919b3c6cf82b62ad.tar.bz2 |
* syscalls.cc (try_to_bin): Use tmp_pathbuf buffer to allocate infobuf
rather than using the stack.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 18 |
2 files changed, 13 insertions, 10 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index cd7bcf4..7ed7942 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2009-04-09 Corinna Vinschen <corinna@vinschen.de> + * syscalls.cc (try_to_bin): Use tmp_pathbuf buffer to allocate infobuf + rather than using the stack. + +2009-04-09 Corinna Vinschen <corinna@vinschen.de> + * syscalls.cc (try_to_bin): Fix alignment of infobuf. 2009-04-09 Corinna Vinschen <corinna@vinschen.de> diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 6198bef..7e684e5 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -153,14 +153,13 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access) PFILE_NAME_INFORMATION pfni; PFILE_INTERNAL_INFORMATION pfii; PFILE_RENAME_INFORMATION pfri; - /* Enforce alignment for multi-purpose infobuf buffer */ - BYTE infobuf[sizeof (FILE_NAME_INFORMATION) + 32767 * sizeof (WCHAR)] - __attribute__ ((aligned)); FILE_DISPOSITION_INFORMATION disp = { TRUE }; + tmp_pathbuf tp; + PBYTE infobuf = (PBYTE) tp.w_get (); + pfni = (PFILE_NAME_INFORMATION) infobuf; - status = NtQueryInformationFile (fh, &io, pfni, sizeof infobuf, - FileNameInformation); + status = NtQueryInformationFile (fh, &io, pfni, 65536, FileNameInformation); if (!NT_SUCCESS (status)) { debug_printf ("NtQueryInformationFile (FileNameInformation) failed, %08x", @@ -233,7 +232,7 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access) /* Create hopefully unique filename. */ RtlAppendUnicodeToString (&recycler, L"\\cyg"); pfii = (PFILE_INTERNAL_INFORMATION) infobuf; - status = NtQueryInformationFile (fh, &io, pfii, sizeof infobuf, + status = NtQueryInformationFile (fh, &io, pfii, 65536, FileInternalInformation); if (!NT_SUCCESS (status)) { @@ -248,8 +247,7 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access) pfri->RootDirectory = rootdir; pfri->FileNameLength = recycler.Length; memcpy (pfri->FileName, recycler.Buffer, recycler.Length); - status = NtSetInformationFile (fh, &io, pfri, sizeof infobuf, - FileRenameInformation); + status = NtSetInformationFile (fh, &io, pfri, 65536, FileRenameInformation); if (status == STATUS_OBJECT_PATH_NOT_FOUND) { /* Ok, so the recycler and/or the recycler/SID directory don't exist. @@ -350,7 +348,7 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access) } NtClose (recyclerdir); /* Shoot again. */ - status = NtSetInformationFile (fh, &io, pfri, sizeof infobuf, + status = NtSetInformationFile (fh, &io, pfri, 65536, FileRenameInformation); } if (!NT_SUCCESS (status)) @@ -397,7 +395,7 @@ try_to_bin (path_conv &pc, HANDLE &fh, ACCESS_MASK access) status); goto out; } - status = NtSetInformationFile (tmp_fh, &io, pfri, sizeof infobuf, + status = NtSetInformationFile (tmp_fh, &io, pfri, 65536, FileRenameInformation); NtClose (tmp_fh); if (!NT_SUCCESS (status)) |