]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_tree.c
Add full lenght time modifiers + require resource names to be unique
[bacula/bacula] / bacula / src / dird / ua_tree.c
index 6331200e1ae49b6762c3d1c7aad9608dbfa6538e..29db4a832dd91ebddf45b2ea66909b2f23dbd3d5 100644 (file)
@@ -75,7 +75,7 @@ void user_select_files_from_tree(TREE_CTX *tree)
 {
    char cwd[2000];
    /* Get a new context so we don't destroy restore command args */
-   UAContext *ua = new_ua_context(ua->jcr);
+   UAContext *ua = new_ua_context(tree->ua->jcr);
    ua->UA_sock = tree->ua->UA_sock;   /* patch in UA socket */
 
    bsendmsg(tree->ua, _( 
@@ -96,7 +96,7 @@ void user_select_files_from_tree(TREE_CTX *tree)
       }
       parse_ua_args(ua);
       if (ua->argc == 0) {
-        return;
+        break;
       }
 
       len = strlen(ua->argk[0]);
@@ -136,7 +136,7 @@ int insert_tree_handler(void *ctx, int num_fields, char **row)
    int type;
 
    strip_trailing_junk(row[1]);
-   if (*row[1] == 0) {
+   if (*row[1] == 0) {               /* no filename => directory */
       if (*row[0] != '/') {           /* Must be Win32 directory */
         type = TN_DIR_NLS;
       } else {
@@ -145,7 +145,7 @@ int insert_tree_handler(void *ctx, int num_fields, char **row)
    } else {
       type = TN_FILE;
    }
-   bsnprintf(fname, sizeof(fname), "%s%s", row[0]?row[0]:"", row[1]?row[1]:"");
+   bsnprintf(fname, sizeof(fname), "%s%s", row[0], row[1]);
    if (tree->avail_node) {
       node = tree->avail_node;
    } else {
@@ -384,8 +384,8 @@ static int cdcmd(UAContext *ua, TREE_CTX *tree)
    if (!node) {
       /* Try once more if Win32 drive -- make absolute */
       if (ua->argk[1][1] == ':') {  /* win32 drive */
-         strcpy(cwd, "/");
-        strcat(cwd, ua->argk[1]);
+         bstrncpy(cwd, "/", sizeof(cwd));
+        bstrncat(cwd, ua->argk[1], sizeof(cwd));
         node = tree_cwd(cwd, tree->root, tree->node);
       }
       if (!node) {