]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler.h (fhandler_cygdrive:DRVSZ): New enum.
authorChristopher Faylor <me@cgf.cx>
Tue, 4 Aug 2009 04:20:36 +0000 (04:20 +0000)
committerChristopher Faylor <me@cgf.cx>
Tue, 4 Aug 2009 04:20:36 +0000 (04:20 +0000)
(pdrive_buf): New place to hold information about cygdrive.
* fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Store drive info in
pdrive_buf since get_win32_name() could now be too small to hold everything.
(fhandler_cygdrive::rewinddir): Reset pdrive to pdrive_buf.
(fhandler_cygdrive::closedir): Ditto.
* pipe.cc (fhandler_pipe::init): Be more defensive when referencing
get_win32_name().  Rework logic which made a copy of the POSIX path and then
never used it.

winsup/cygwin/ChangeLog
winsup/cygwin/cxx.cc
winsup/cygwin/dcrt0.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/libstdcxx_wrapper.cc
winsup/cygwin/path.h
winsup/cygwin/pipe.cc

index 04681bee4aa157cbb446019cf4f861e932ff5fd3..7948357ca390f1e968ed52956e86d510d4f3a832 100644 (file)
@@ -1,3 +1,16 @@
+2009-08-04  Christopher Faylor  <me+cygwin@cgf.cx>
+
+       * fhandler.h (fhandler_cygdrive:DRVSZ): New enum.
+       (pdrive_buf): New place to hold information about cygdrive.
+       * fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Store drive
+       info in pdrive_buf since get_win32_name() could now be too small to
+       hold everything.
+       (fhandler_cygdrive::rewinddir): Reset pdrive to pdrive_buf.
+       (fhandler_cygdrive::closedir): Ditto.
+       * pipe.cc (fhandler_pipe::init): Be more defensive when referencing
+       get_win32_name().  Rework logic which made a copy of the POSIX path and
+       then never used it.
+
 2009-08-02  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * sigproc.cc (stopped_or_terminated): Don't return a match when stopsig
index 63262f59ef7705585baa026a2ec190b91d39ca8f..523fb4268e0dee72bed96b98a3368aea6fd6c063 100644 (file)
@@ -89,7 +89,7 @@ __cxa_guard_release ()
 /* These routines are made available as last-resort fallbacks
    for the application.  Should not be used in practice.  */
 
-struct per_process_cxx_malloc default_cygwin_cxx_malloc = 
+struct per_process_cxx_malloc default_cygwin_cxx_malloc =
 {
   &(operator new),
   &(operator new[]),
index 9cff06f4750fc9e7ee233cc5ee6036d6134128d5..e491837961646537374d78c4ffa4cb7c1f882a47 100644 (file)
@@ -994,7 +994,7 @@ extern "C" void
 __main (void)
 {
   /* Ordering is critical here.  DLL ctors have already been
-     run as they were being loaded, so we should stack the 
+     run as they were being loaded, so we should stack the
      queued call to DLL dtors now.  */
   atexit (dll_global_dtors);
   do_global_ctors (user_data->ctors, false);
index 382a592cb985299fd5175bf0c8a0f99e5c589a27..87ae390d7b20346b6e3b704e8694830f7f787106 100644 (file)
@@ -753,8 +753,13 @@ class fhandler_disk_file: public fhandler_base
 
 class fhandler_cygdrive: public fhandler_disk_file
 {
+  enum
+  {
+    DRVSZ = sizeof ("x:\\")
+  };
   int ndrives;
   const char *pdrive;
+  char pdrive_buf[2 * 26 * DRVSZ];
   void set_drives ();
  public:
   fhandler_cygdrive ();
index 2baabaef39df0e73e8b39e2ed6fd53af1cad599e..579c6ef21ff2ba48a4505b1ce681e90b53257a8c 100644 (file)
@@ -2123,14 +2123,11 @@ fhandler_cygdrive::close ()
   return 0;
 }
 
-#define DRVSZ sizeof ("x:\\")
 void
 fhandler_cygdrive::set_drives ()
 {
-  const int len = 2 + 26 * DRVSZ;
-  char *p = const_cast<char *> (get_win32_name ());
-  pdrive = p;
-  ndrives = GetLogicalDriveStrings (len, p) / DRVSZ;
+  pdrive = pdrive_buf;
+  ndrives = GetLogicalDriveStrings (sizeof pdrive_buf, pdrive_buf) / DRVSZ;
 }
 
 int
@@ -2146,7 +2143,7 @@ fhandler_cygdrive::fstat (struct __stat64 *buf)
   for (const char *p = pdrive; p && *p; p = strchr (p, '\0') + 1)
     if (is_floppy ((flptst[0] = *p, flptst))
        || GetFileAttributes (p) == INVALID_FILE_ATTRIBUTES)
-      --n;
+      n--;
   buf->st_nlink = n + 2;
   return 0;
 }
@@ -2198,13 +2195,13 @@ fhandler_cygdrive::readdir (DIR *dir, dirent *de)
 void
 fhandler_cygdrive::rewinddir (DIR *dir)
 {
-  pdrive = get_win32_name ();
+  pdrive = pdrive_buf;
   dir->__d_position = 0;
 }
 
 int
 fhandler_cygdrive::closedir (DIR *dir)
 {
-  pdrive = get_win32_name ();
+  pdrive = pdrive_buf;
   return 0;
 }
index 42d4c5bca71b29b1ce595cc7d38bbbac0d80a82e..a6492f24394ddc614f10d4fd279ee8ea1dbeb801 100755 (executable)
@@ -76,13 +76,13 @@ operator new[](std::size_t sz, const std::nothrow_t &nt) throw()
   return (*user_data->cxx_malloc->oper_new___nt) (sz, nt);
 }
 
-extern void 
+extern void
 operator delete(void *p, const std::nothrow_t &nt) throw()
 {
   (*user_data->cxx_malloc->oper_delete_nt) (p, nt);
 }
 
-extern void 
+extern void
 operator delete[](void *p, const std::nothrow_t &nt) throw()
 {
   (*user_data->cxx_malloc->oper_delete___nt) (p, nt);
index d499b153a741480d9d416efa2a18d105fe18134e..3e66c19c78a96e26831d481b00103d31422e215b 100644 (file)
@@ -211,7 +211,7 @@ class path_conv
   PWCHAR get_wide_win32_path (PWCHAR wc);
   operator DWORD &() {return fileattr;}
   operator int () {return fileattr; }
-  path_conv &operator =(path_conv &pc)
+  path_conv &operator =(path_convpc)
   {
     memcpy (this, &pc, sizeof pc);
     path = cstrdup (pc.path);
index e8c7070b1264fd05ce2c47bcdb31ecef8c12ce0a..a694bceefa2d912e71d5e5da69e8d42ac2fac3a2 100644 (file)
@@ -32,13 +32,15 @@ fhandler_pipe::fhandler_pipe ()
 int
 fhandler_pipe::init (HANDLE f, DWORD a, mode_t mode)
 {
-  // FIXME: Have to clean this up someday
-  if (!*get_win32_name () && get_name ())
+  /* FIXME: Have to clean this up someday
+     FIXME: Do we have to check for both !get_win32_name() and
+     !*get_win32_name()? */
+  if ((!get_win32_name () || !*get_win32_name ()) && get_name ())
     {
+      char *d;
+      const char *s;
       char *hold_normalized_name = (char *) alloca (strlen (get_name ()) + 1);
-      strcpy (hold_normalized_name, get_name ());
-      char *s, *d;
-      for (s = hold_normalized_name, d = (char *) get_win32_name (); *s; s++, d++)
+      for (s = get_name (), d = hold_normalized_name; *s; s++, d++)
        if (*s == '/')
          *d = '\\';
        else
This page took 0.04739 seconds and 5 git commands to generate.