]> sourceware.org Git - newlib-cygwin.git/commitdiff
* path.cc (get_current_dir_name): Avoid memory leak. Don't return PWD contents
authorChristopher Faylor <me@cgf.cx>
Mon, 2 Jan 2012 17:45:51 +0000 (17:45 +0000)
committerChristopher Faylor <me@cgf.cx>
Mon, 2 Jan 2012 17:45:51 +0000 (17:45 +0000)
if directory doesn't actually exist.

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

index 528e0efa28f9d45c0a897a819472582186d258a5..a696795bea6b0a2e9fe8811cebed18508d426e9c 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-02  Christopher Faylor  <me.cygwin2011@cgf.cx>
+
+       * path.cc (get_current_dir_name): Avoid memory leak.  Don't return PWD
+       contents if directory doesn't actually exist.
+
 2012-01-01  Yaakov Selkowitz  <yselkowitz@users.sourceforge.net>
 
        * cygwin.din (get_current_dir_name): Export.
index 7dc85442e0999f4c36bc2c0e863e37c42925aa11..bbc93afbcf381fcf749b123473fb4c97bad3cd8c 100644 (file)
@@ -2858,19 +2858,18 @@ getwd (char *buf)
 extern "C" char *
 get_current_dir_name (void)
 {
-  char *pwd = getenv ("PWD");
+  const char *pwd = getenv ("PWD");
   char *cwd = getcwd (NULL, 0);
+  struct __stat64 pwdbuf, cwdbuf;
 
-  if (pwd)
+  if (pwd && strcmp (pwd, cwd) != 0
+      && stat64 (pwd, &pwdbuf) == 0
+      && stat64 (cwd, &cwdbuf) == 0
+      && pwdbuf.st_dev == cwdbuf.st_dev
+      && pwdbuf.st_ino == cwdbuf.st_ino)
     {
-      struct __stat64 pwdbuf, cwdbuf;
-      stat64 (pwd, &pwdbuf);
-      stat64 (cwd, &cwdbuf);
-      if ((pwdbuf.st_dev == cwdbuf.st_dev) && (pwdbuf.st_ino == cwdbuf.st_ino))
-        {
-          cwd = (char *) malloc (strlen (pwd) + 1);
-          strcpy (cwd, pwd);
-        }
+      cwd = (char *) realloc (cwd, strlen (pwd) + 1);
+      strcpy (cwd, pwd);
     }
 
   return cwd;
This page took 0.047234 seconds and 5 git commands to generate.