OSDN Git Service

* path.cc (path_conv::check): Free wide_path and normalized_path if
authorcorinna <corinna>
Tue, 20 May 2008 10:18:12 +0000 (10:18 +0000)
committercorinna <corinna>
Tue, 20 May 2008 10:18:12 +0000 (10:18 +0000)
necessary.
* path.h (path_conv::path_conv): Set wide_path, normalized_path and
normalized_path_size to 0 in all constructors.

winsup/cygwin/ChangeLog
winsup/cygwin/path.cc
winsup/cygwin/path.h

index 90c031f..ed681b5 100644 (file)
@@ -1,3 +1,10 @@
+2008-05-20  Corinna Vinschen  <corinna@vinschen.de>
+
+       * path.cc (path_conv::check): Free wide_path and normalized_path if
+       necessary.
+       * path.h (path_conv::path_conv): Set wide_path, normalized_path and
+       normalized_path_size to 0 in all constructors.
+
 2008-05-19  Corinna Vinschen  <corinna@vinschen.de>
 
        * syscalls.cc (rename): Allocate temporary path buffers using
index 1c1217d..bdaead5 100644 (file)
@@ -812,10 +812,14 @@ path_conv::check (const char *src, unsigned opt,
   path_flags = 0;
   known_suffix = NULL;
   fileattr = INVALID_FILE_ATTRIBUTES;
+  if (wide_path)
+    cfree (wide_path);
   wide_path = NULL;
   case_clash = false;
   memset (&dev, 0, sizeof (dev));
   fs.clear ();
+  if (!normalized_path_size && normalized_path)
+    cfree (normalized_path);
   normalized_path = NULL;
   int component = 0;           // Number of translated components
 
index ab6dda7..e09507c 100644 (file)
@@ -206,35 +206,42 @@ class path_conv
   void check (const char *src, unsigned opt = PC_SYM_FOLLOW,
              const suffix_info *suffixes = NULL) __attribute__ ((regparm(3)));
 
-  path_conv (const device& in_dev): fileattr (INVALID_FILE_ATTRIBUTES),
-     wide_path (NULL), path_flags (0), known_suffix (NULL), error (0),
-     dev (in_dev)
-    {
-      strcpy (path, in_dev.native);
-    }
+  path_conv (const device& in_dev)
+  : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path_flags (0),
+    known_suffix (NULL), error (0), dev (in_dev), normalized_path (NULL),
+    normalized_path_size (0)
+  {
+    strcpy (path, in_dev.native);
+  }
 
   path_conv (int, const char *src, unsigned opt = PC_SYM_FOLLOW,
             const suffix_info *suffixes = NULL)
+  : wide_path (NULL), normalized_path (NULL), normalized_path_size (0)
   {
     check (src, opt, suffixes);
   }
 
   path_conv (const UNICODE_STRING *src, unsigned opt = PC_SYM_FOLLOW,
             const suffix_info *suffixes = NULL)
+  : wide_path (NULL), normalized_path (NULL), normalized_path_size (0)
   {
     check (src, opt | PC_NULLEMPTY, suffixes);
   }
 
   path_conv (const char *src, unsigned opt = PC_SYM_FOLLOW,
             const suffix_info *suffixes = NULL)
+  : wide_path (NULL), normalized_path (NULL), normalized_path_size (0)
   {
     check (src, opt | PC_NULLEMPTY, suffixes);
   }
 
-  path_conv (): fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL),
-               path_flags (0), known_suffix (NULL), error (0),
-               normalized_path (NULL)
-    {path[0] = '\0';}
+  path_conv ()
+  : fileattr (INVALID_FILE_ATTRIBUTES), wide_path (NULL), path_flags (0),
+    known_suffix (NULL), error (0), normalized_path (NULL),
+    normalized_path_size (0)
+  {
+    path[0] = '\0';
+  }
 
   ~path_conv ();
   inline char *get_win32 () { return path; }