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>2008-05-20 14:18:12 +0400
committerCorinna Vinschen <corinna@vinschen.de>2008-05-20 14:18:12 +0400
commitc211f8eb243cf08ec269a7ec23bf43f37967341b (patch)
tree2b32669222e6c492a9e6013796dbbc004bf42afe
parent78ee2ae11faa2e63ee909541bdc0d9ddb3a09429 (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/path.cc4
-rw-r--r--winsup/cygwin/path.h27
3 files changed, 28 insertions, 10 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 90c031fcc..ed681b59e 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 1c1217d9d..bdaead55d 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -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
diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h
index ab6dda79a..e09507c80 100644
--- a/winsup/cygwin/path.h
+++ b/winsup/cygwin/path.h
@@ -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; }