]> sourceware.org Git - newlib-cygwin.git/commitdiff
* syscalls.cc (try_to_bin): Use tmp_pathbuf buffer to allocate infobuf
authorCorinna Vinschen <corinna@vinschen.de>
Thu, 9 Apr 2009 17:55:01 +0000 (17:55 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Thu, 9 Apr 2009 17:55:01 +0000 (17:55 +0000)
rather than using the stack.

winsup/cygwin/ChangeLog
winsup/cygwin/syscalls.cc

index cd7bcf45f7a6d451558c3c3ae06d2968b86c46dd..7ed7942c7cc35d3ea19e79b9099955506a97a221 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 6198bef981e771edb5bdb85bb9d2d67cbbc4c572..7e684e56138ea56551e2bf610ca92cfec747833d 100644 (file)
@@ -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))
This page took 0.038538 seconds and 5 git commands to generate.