On Thu, Jun 08, 2006 at 11:23:45PM +0300, Alexander Gattin wrote:
> Hey, I don't see the "char *resolved_path" pointer
> being freed anywhere afterwards...

Right, sorry.  Here is a better version.


Michael

-- 
Michael Banck
Debian Developer
[EMAIL PROTECTED]
http://www.advogato.org/person/mbanck/diary.html
--- lib/commonio.c.orig 2006-06-08 15:12:21.000000000 +0200
+++ lib/commonio.c      2006-06-09 16:14:10.000000000 +0200
@@ -47,20 +47,34 @@
 int lrename (const char *old, const char *new)
 {
 
+#ifdef PATH_MAX
        char resolved_path[PATH_MAX];
+#endif
+       char *r;
        int res;
 
 #if defined(S_ISLNK)
        struct stat sb = { 0 };
        if (lstat (new, &sb) == 0 && S_ISLNK (sb.st_mode)) {
-               if (realpath (new, resolved_path) == NULL) {
+#ifndef PATH_MAX
+               r = realpath (new, NULL);
+#else
+               r = realpath (new, resolved_path);
+#endif
+               if (r == NULL) {
+#ifndef PATH_MAX
+                       free (r);
+#endif
                        perror ("realpath in lrename()");
                } else {
-                       new = resolved_path;
+                       new = r;
                }
        }
 #endif
        res = rename (old, new);
+#ifndef PATH_MAX
+       free (r);
+#endif
        return res;
 }
 

Reply via email to