]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_restore.c
03Dec05
[bacula/bacula] / bacula / src / dird / ua_restore.c
index a0fde9b6aaa643a0d0acd07a95499c50be0e34e2..e1578c1eba854d0425a419c2cadab9ca9a30cb50 100644 (file)
@@ -46,48 +46,10 @@ extern char *uar_count_files,     *uar_jobids_fileindex;
 extern char *uar_jobid_fileindex_from_dir;
 
 
-struct NAME_LIST {
-   char **name;                       /* list of names */
-   int num_ids;                       /* ids stored */
-   int max_ids;                       /* size of array */
-   int num_del;                       /* number deleted */
-   int tot_ids;                       /* total to process */
-};
-
-
-/* Main structure for obtaining JobIds or Files to be restored */
-struct RESTORE_CTX {
-   utime_t JobTDate;
-   uint32_t TotalFiles;
-   uint32_t JobId;
-   char ClientName[MAX_NAME_LENGTH];
-   char last_jobid[20];
-   POOLMEM *JobIds;                   /* User entered string of JobIds */
-   STORE  *store;
-   JOB *restore_job;
-   POOL *pool;
-   int restore_jobs;
-   uint32_t selected_files;
-   char *where;
-   RBSR *bsr;
-   POOLMEM *fname;                    /* filename only */
-   POOLMEM *path;                     /* path only */
-   POOLMEM *query;
-   int fnl;                           /* filename length */
-   int pnl;                           /* path length */
-   bool found;
-   bool all;                          /* mark all as default */
-   NAME_LIST name_list;
-};
-
-
-#define MAX_ID_LIST_LEN 1000000
-
 
 /* Forward referenced functions */
 static int last_full_handler(void *ctx, int num_fields, char **row);
 static int jobid_handler(void *ctx, int num_fields, char **row);
-static int get_next_jobid_from_list(char **p, uint32_t *JobId);
 static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx);
 static int fileset_handler(void *ctx, int num_fields, char **row);
 static void print_name_list(UAContext *ua, NAME_LIST *name_list);
@@ -178,7 +140,7 @@ int restore_cmd(UAContext *ua, const char *cmd)
          bsendmsg(ua, _("Unable to construct a valid BSR. Cannot continue.\n"));
          goto bail_out;
       }
-      if (!(selected_files = write_bsr_file(ua, rx.bsr))) {
+      if (!(selected_files = write_bsr_file(ua, rx))) {
          bsendmsg(ua, _("No files selected to be restored.\n"));
          goto bail_out;
       }
@@ -447,7 +409,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       }
       done = true;
       switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) {
-      case -1:                        /* error */
+      case -1:                        /* error or cancel */
          return 0;
       case 0:                         /* list last 20 Jobs run */
          gui_save = ua->jcr->gui;
@@ -627,7 +589,6 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds);
    }
 
-   memset(&jr, 0, sizeof(JOB_DBR));
 
    rx->TotalFiles = 0;
    for (p=rx->JobIds; ; ) {
@@ -642,6 +603,7 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx)
       if (jr.JobId == JobId) {
          continue;                    /* duplicate of last JobId */
       }
+      memset(&jr, 0, sizeof(JOB_DBR));
       jr.JobId = JobId;
       if (!db_get_job_record(ua->jcr, ua->db, &jr)) {
          char ed1[50];
@@ -1131,7 +1093,7 @@ bail_out:
 
 
 /* Return next JobId from comma separated list */
-static int get_next_jobid_from_list(char **p, uint32_t *JobId)
+int get_next_jobid_from_list(char **p, JobId_t *JobId)
 {
    char jobid[30];
    char *q = *p;