On Mon, Jan 02, 2012 at 05:56:26AM -0700, Eric Blake wrote: >On 01/01/2012 12:13 AM, Yaakov (Cygwin/X) wrote: >>> > You have to check st_dev here too don't you? >> Of course. Revised patch for winsup/cygwin attached. >> > >> +extern "C" char * >> +get_current_dir_name (void) >> +{ >> + char *pwd = getenv ("PWD"); >> + char *cwd = getcwd (NULL, 0); >> + >> + if (pwd) >> + { >> + 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); > >Memory leak. You need to free(cwd) before reassigning it. And why are >you using malloc(strlen())/strcpy(), when you could just use strdup()?
Oops. Eric is right. Also, there should have been some error checking for the stat calls since PWD is user-settable and could be bogus. I'll make those changes. cgf