Release still reachable memory if the smbclient context is freed.
[ira/wip.git] / source3 / client / clitar.c
index 135815c3cd7d11a848f13d1725ce0f5ae051483f..084f87e3996a86d0f1d55e35c633d9ec50764763 100644 (file)
@@ -100,7 +100,7 @@ char tar_type='\0';
 static char **cliplist=NULL;
 static int clipn=0;
 static bool must_free_cliplist = False;
-static const char *cmd_ptr = NULL;
+extern const char *cmd_ptr;
 
 extern bool lowercase;
 extern uint16 cnum;
@@ -513,6 +513,7 @@ static bool ensurepath(const char *fname)
        char *partpath, *ffname;
        const char *p=fname;
        char *basehack;
+       char *saveptr;
 
        DEBUG(5, ( "Ensurepath called with: %s\n", fname));
 
@@ -528,7 +529,7 @@ static bool ensurepath(const char *fname)
 
        *partpath = 0;
 
-       /* fname copied to ffname so can strtok */
+       /* fname copied to ffname so can strtok_r */
 
        safe_strcpy(ffname, fname, strlen(fname));
 
@@ -541,7 +542,7 @@ static bool ensurepath(const char *fname)
                *basehack='\0';
        }
 
-       p=strtok(ffname, "\\");
+       p=strtok_r(ffname, "\\", &saveptr);
 
        while (p) {
                safe_strcat(partpath, p, strlen(fname) + 1);
@@ -558,7 +559,7 @@ static bool ensurepath(const char *fname)
                }
 
                safe_strcat(partpath, "\\", strlen(fname) + 1);
-               p = strtok(NULL,"/\\");
+               p = strtok_r(NULL, "/\\", &saveptr);
        }
 
        SAFE_FREE(partpath);
@@ -667,16 +668,6 @@ static void do_atar(const char *rname_in,char *lname,file_info *finfo1)
        }
 
        safe_strcpy(finfo.name,rname, strlen(rname));
-       if (!finfo1) {
-               time_t atime, mtime;
-               if (!cli_getattrE(cli, fnum, &finfo.mode, &finfo.size, NULL, &atime, &mtime)) {
-                       DEBUG(0, ("getattrE: %s\n", cli_errstr(cli)));
-                       goto cleanup;
-               }
-               finfo.atime_ts = convert_time_t_to_timespec(atime);
-               finfo.mtime_ts = convert_time_t_to_timespec(mtime);
-               finfo.ctime_ts = finfo.mtime_ts;
-       }
 
        DEBUG(3,("file %s attrib 0x%X\n",finfo.name,finfo.mode));
 
@@ -1470,8 +1461,10 @@ int cmd_tar(void)
        }
 
        argl=toktocliplist(&argcl, NULL);
-       if (!tar_parseargs(argcl, argl, buf, 0))
+       if (!tar_parseargs(argcl, argl, buf, 0)) {
+               SAFE_FREE(argl);
                return 1;
+       }
 
        ret = process_tar();
        SAFE_FREE(argl);