From: Kern S. <ke...@us...> - 2006-04-11 16:23:40
|
Update of /cvsroot/bacula/bacula/src/dird In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13461/src/dird Modified Files: expand.c migrate.c next_vol.c run_conf.c ua_cmds.c ua_dotcmds.c ua_label.c ua_output.c ua_prune.c ua_purge.c ua_restore.c ua_run.c ua_select.c ua_status.c ua_tree.c ua_update.c verify.c Log Message: 11Apr06 - More work on migration. - Implement wild program in tools directory for testing wild-cards. Almost identical to the regex program. - Up port VSS single thread locking code. - Replace N_(..) by NT_(...) to inhibit translation of commands. - Modify Makefile to change the permissions on Working Directory to 770 if the directory is created. - Do not fail the Makefile if changing the permissions or owner/group on WorkingDir fails. - Remove early selection of Scratch Volumes in the recycling algorithm. - Correct the old recycling algorithm so that Scratch Volumes are selected when looking for a Volume in the changer. - Correct a typo in the Verify SQL reported by Joe Park. 10Apr06 - Remove automatic case folding on Windows FDs. You must explictly use the 'Ignore Case = yes' option. - Remove the code added to 1.38.6 and 1.38.7 that pulls a scratch volume in an Autochanger early in the 'recycling' algorithm. Index: verify.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/verify.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -d -r1.75 -r1.76 --- verify.c 8 Mar 2006 21:17:09 -0000 1.75 +++ verify.c 11 Apr 2006 16:23:36 -0000 1.76 @@ -708,13 +708,13 @@ } /* Now find all the files that are missing -- i.e. all files in - * the database where the MarkedId != current JobId + * the database where the MarkId != current JobId */ jcr->fn_printed = false; bsnprintf(buf, sizeof(buf), "SELECT Path.Path,Filename.Name FROM File,Path,Filename " "WHERE File.JobId=%d " -"AND File.MarkedId!=%d AND File.PathId=Path.PathId " +"AND File.MarkId!=%d AND File.PathId=Path.PathId " "AND File.FilenameId=Filename.FilenameId", JobId, jcr->JobId); /* missing_handler is called for each file found */ Index: migrate.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/migrate.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- migrate.c 7 Apr 2006 08:22:16 -0000 1.4 +++ migrate.c 11 Apr 2006 16:23:36 -0000 1.5 @@ -126,11 +126,11 @@ migration_cleanup(jcr, jcr->JobStatus); return true; /* no work */ } - Dmsg4(100, "Target: Name=%s JobId=%d Type=%c Level=%c\n", + Dmsg4(000, "Target: Name=%s JobId=%d Type=%c Level=%c\n", jcr->previous_jr.Name, jcr->previous_jr.JobId, jcr->previous_jr.JobType, jcr->previous_jr.JobLevel); - Dmsg4(100, "Current: Name=%s JobId=%d Type=%c Level=%c\n", + Dmsg4(000, "Current: Name=%s JobId=%d Type=%c Level=%c\n", jcr->jr.Name, jcr->jr.JobId, jcr->jr.JobType, jcr->jr.JobLevel); @@ -219,7 +219,7 @@ set_jcr_job_status(jcr, JS_Running); set_jcr_job_status(tjcr, JS_Running); - Dmsg2(100, "JobId=%d JobLevel=%c\n", jcr->jr.JobId, jcr->jr.JobLevel); + Dmsg2(000, "JobId=%d JobLevel=%c\n", jcr->jr.JobId, jcr->jr.JobLevel); if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); return false; @@ -325,7 +325,7 @@ memset(new_item, 0, sizeof(uitem)); new_item->item = bstrdup(row[0]); - + Dmsg1(000, "Item=%s\n", row[0]); item = (uitem *)list->binary_insert((void *)new_item, item_compare); if (item != new_item) { /* already in list */ free(new_item->item); @@ -370,9 +370,14 @@ " Job.PoolId=Media.PoolId"; const char *sql_job = - "SELECT DISTINCT Job.Name from Pool,Media,Job,JobMedia " - " WHERE Media.PoolId=Pool.PoolId AND Pool.Name='%s' AND" - " JobMedia.JobId=Job.JobId AND Job.PoolId=Media.PoolId"; + "SELECT DISTINCT Job.Name from Job,Pool" + " WHERE Pool.Name='%s' AND Job.PoolId=Pool.PoolId"; + +const char *sql_jobids_from_job = + "SELECT DISTINCT Job.JobId FROM Job,Pool" + " WHERE Job.Name=%s AND Pool.Name='%s' AND Job.PoolId=Pool.PoolId" + " ORDER by Job.StartTime"; + const char *sql_ujobid = "SELECT DISTINCT Job.Job from Client,Pool,Media,Job,JobMedia " @@ -399,11 +404,14 @@ char *p; dlist *item_chain; uitem *item = NULL; + uitem *last_item = NULL; char prbuf[500]; regex_t preg; + JobIds[0] = 0; if (jcr->MigrateJobId != 0) { jcr->previous_jr.JobId = jcr->MigrateJobId; + Dmsg1(000, "previous jobid=%u\n", jcr->MigrateJobId); } else { switch (jcr->job->selection_type) { case MT_SMALLEST_VOL: @@ -427,7 +435,7 @@ _("SQL to get Volume failed. ERR=%s\n"), db_strerror(jcr->db)); goto bail_out; } - Dmsg1(000, "Jobids=%s\n", JobIds); + Dmsg1(000, "Smallest Vol Jobids=%s\n", JobIds); break; case MT_OLDEST_VOL: Mmsg(query, sql_oldest_vol, jcr->pool->hdr.name); @@ -449,7 +457,7 @@ _("SQL to get Volume failed. ERR=%s\n"), db_strerror(jcr->db)); goto bail_out; } - Dmsg1(000, "Jobids=%s\n", JobIds); + Dmsg1(000, "Oldest Vol Jobids=%s\n", JobIds); break; case MT_POOL_OCCUPANCY: Mmsg(query, sql_pool_bytes, jcr->pool->hdr.name); @@ -464,14 +472,17 @@ Jmsg(jcr, M_INFO, 0, _("No jobs found to migrate.\n")); goto ok_out; } + Dmsg1(000, "Pool Occupancy Jobids=%s\n", JobIds); break; case MT_POOL_TIME: + Dmsg0(000, "Pool time not implemented\n"); break; case MT_CLIENT: if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No selection pattern specified.\n")); + Jmsg(jcr, M_FATAL, 0, _("No Migration Client selection pattern specified.\n")); goto bail_out; } + Dmsg1(000, "Client regex=%s\n", jcr->job->selection_pattern); rc = regcomp(&preg, jcr->job->selection_pattern, REG_EXTENDED); if (rc != 0) { regerror(rc, &preg, prbuf, sizeof(prbuf)); @@ -502,9 +513,10 @@ break; case MT_VOLUME: if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No selection pattern specified.\n")); + Jmsg(jcr, M_FATAL, 0, _("No Migration Volume selection pattern specified.\n")); goto bail_out; } + Dmsg1(000, "Volume regex=%s\n", jcr->job->selection_pattern); rc = regcomp(&preg, jcr->job->selection_pattern, REG_EXTENDED); if (rc != 0) { regerror(rc, &preg, prbuf, sizeof(prbuf)); @@ -535,43 +547,78 @@ break; case MT_JOB: if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No selection pattern specified.\n")); + Jmsg(jcr, M_FATAL, 0, _("No Migration Job selection pattern specified.\n")); goto bail_out; } + Dmsg1(000, "Job regex=%s\n", jcr->job->selection_pattern); rc = regcomp(&preg, jcr->job->selection_pattern, REG_EXTENDED); if (rc != 0) { regerror(rc, &preg, prbuf, sizeof(prbuf)); Jmsg(jcr, M_FATAL, 0, _("Could not compile regex pattern \"%s\" ERR=%s\n"), jcr->job->selection_pattern, prbuf); + goto bail_out; } item_chain = New(dlist(item, &item->link)); Mmsg(query, sql_job, jcr->pool->hdr.name); - Dmsg1(100, "query=%s\n", query.c_str()); + Dmsg1(000, "query=%s\n", query.c_str()); if (!db_sql_query(jcr->db, query.c_str(), unique_name_handler, (void *)item_chain)) { Jmsg(jcr, M_FATAL, 0, _("SQL to get Job failed. ERR=%s\n"), db_strerror(jcr->db)); goto bail_out; } - /* Now apply the regex and create the jobs */ + /* Now apply the regex and remove any item not matched */ foreach_dlist(item, item_chain) { const int nmatch = 30; regmatch_t pmatch[nmatch]; + if (last_item) { + free(last_item->item); + item_chain->remove(last_item); + } + Dmsg1(000, "Jobitem=%s\n", item->item); rc = regexec(&preg, item->item, nmatch, pmatch, 0); if (rc == 0) { - Dmsg1(000, "Do Job=%s\n", item->item); + last_item = NULL; /* keep this one */ + } else { + last_item = item; } - free(item->item); + } + if (last_item) { + free(last_item->item); + item_chain->remove(last_item); } regfree(&preg); + /* + * At this point, we have a list of items in item_chain + * that have been matched by the regex, so now we need + * to look up their jobids. + */ + JobIds = get_pool_memory(PM_MESSAGE); + JobIds[0] = 0; + foreach_dlist(item, item_chain) { + Dmsg1(000, "Got Job: %s\n", item->item); + Mmsg(query, sql_jobids_from_job, item->item, jcr->pool->hdr.name); + if (!db_sql_query(jcr->db, query.c_str(), jobid_handler, (void *)JobIds)) { + Jmsg(jcr, M_FATAL, 0, + _("SQL failed. ERR=%s\n"), db_strerror(jcr->db)); + goto bail_out; + } + } + if (JobIds[0] == 0) { + Jmsg(jcr, M_INFO, 0, _("No jobs found to migrate.\n")); + goto ok_out; + } + Dmsg1(000, "Job Jobids=%s\n", JobIds); + free_pool_memory(JobIds); delete item_chain; break; case MT_SQLQUERY: JobIds[0] = 0; if (!jcr->job->selection_pattern) { - Jmsg(jcr, M_FATAL, 0, _("No selection pattern specified.\n")); + Jmsg(jcr, M_FATAL, 0, _("No Migration SQL selection pattern specified.\n")); goto bail_out; } + Dmsg1(000, "SQL=%s\n", jcr->job->selection_pattern); if (!db_sql_query(jcr->db, query.c_str(), jobid_handler, (void *)JobIds)) { Jmsg(jcr, M_FATAL, 0, _("SQL to get Volume failed. ERR=%s\n"), db_strerror(jcr->db)); @@ -591,6 +638,7 @@ } p = JobIds; + JobId = 0; stat = get_next_jobid_from_list(&p, &JobId); Dmsg2(000, "get_next_jobid stat=%d JobId=%u\n", stat, JobId); if (stat < 0) { Index: ua_restore.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -d -r1.108 -r1.109 --- ua_restore.c 14 Mar 2006 19:37:20 -0000 1.108 +++ ua_restore.c 11 Apr 2006 16:23:36 -0000 1.109 @@ -190,7 +190,7 @@ job->hdr.name, rx.ClientName, rx.store?rx.store->hdr.name:"", jcr->RestoreBootstrap, rx.selected_files, ua->catalog->hdr.name); } - if (find_arg(ua, N_("yes")) > 0) { + if (find_arg(ua, NT_("yes")) > 0) { pm_strcat(ua->cmd, " yes"); /* pass it on to the run command */ } Dmsg1(100, "Submitting: %s\n", ua->cmd); @@ -243,7 +243,7 @@ if (!rx->ClientName[0]) { CLIENT_DBR cr; /* try command line argument */ - int i = find_arg_with_value(ua, N_("client")); + int i = find_arg_with_value(ua, NT_("client")); if (i >= 0) { if (!has_value(ua, i)) { return 0; @@ -971,7 +971,7 @@ /* Check MediaType and select storage that corresponds */ get_storage_from_mediatype(ua, &rx->name_list, rx); - if (find_arg(ua, N_("done")) < 0) { + if (find_arg(ua, NT_("done")) < 0) { /* Let the user interact in selecting which files to restore */ OK = user_select_files_from_tree(&tree); } Index: ua_purge.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_purge.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- ua_purge.c 20 Feb 2006 20:04:02 -0000 1.31 +++ ua_purge.c 11 Apr 2006 16:23:36 -0000 1.32 @@ -156,21 +156,21 @@ MEDIA_DBR mr; JOB_DBR jr; static const char *keywords[] = { - N_("files"), - N_("jobs"), - N_("volume"), + NT_("files"), + NT_("jobs"), + NT_("volume"), NULL}; static const char *files_keywords[] = { - N_("Job"), - N_("JobId"), - N_("Client"), - N_("Volume"), + NT_("Job"), + NT_("JobId"), + NT_("Client"), + NT_("Volume"), NULL}; static const char *jobs_keywords[] = { - N_("Client"), - N_("Volume"), + NT_("Client"), + NT_("Volume"), NULL}; bsendmsg(ua, _( @@ -223,7 +223,7 @@ } /* Volume */ case 2: - while ((i=find_arg(ua, N_("volume"))) >= 0) { + while ((i=find_arg(ua, NT_("volume"))) >= 0) { if (select_media_dbr(ua, &mr)) { purge_jobs_from_volume(ua, &mr); } Index: ua_cmds.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_cmds.c,v retrieving revision 1.163 retrieving revision 1.164 diff -u -d -r1.163 -r1.164 --- ua_cmds.c 8 Mar 2006 21:17:09 -0000 1.163 +++ ua_cmds.c 11 Apr 2006 16:23:36 -0000 1.164 @@ -87,47 +87,47 @@ struct cmdstruct { const char *key; int (*func)(UAContext *ua, const char *cmd); const char *help; }; static struct cmdstruct commands[] = { - { N_("add"), add_cmd, _("add media to a pool")}, - { N_("autodisplay"), autodisplay_cmd, _("autodisplay [on|off] -- console messages")}, - { N_("automount"), automount_cmd, _("automount [on|off] -- after label")}, - { N_("cancel"), cancel_cmd, _("cancel [<jobid=nnn> | <job=name>] -- cancel a job")}, - { N_("create"), create_cmd, _("create DB Pool from resource")}, - { N_("delete"), delete_cmd, _("delete [pool=<pool-name> | media volume=<volume-name>]")}, - { N_("disable"), disable_cmd, _("disable <job=name> -- disable a job")}, - { N_("enable"), enable_cmd, _("enable <job=name> -- enable a job")}, - { N_("estimate"), estimate_cmd, _("performs FileSet estimate, listing gives full listing")}, - { N_("exit"), quit_cmd, _("exit = quit")}, - { N_("gui"), gui_cmd, _("gui [on|off] -- non-interactive gui mode")}, - { N_("help"), help_cmd, _("print this command")}, - { N_("list"), list_cmd, _("list [pools | jobs | jobtotals | media <pool=pool-name> | files <jobid=nn>]; from catalog")}, - { N_("label"), label_cmd, _("label a tape")}, - { N_("llist"), llist_cmd, _("full or long list like list command")}, - { N_("messages"), messagescmd, _("messages")}, - { N_("mount"), mount_cmd, _("mount <storage-name>")}, - { N_("prune"), prunecmd, _("prune expired records from catalog")}, - { N_("purge"), purgecmd, _("purge records from catalog")}, - { N_("python"), python_cmd, _("python control commands")}, - { N_("quit"), quit_cmd, _("quit")}, - { N_("query"), querycmd, _("query catalog")}, - { N_("restore"), restore_cmd, _("restore files")}, - { N_("relabel"), relabel_cmd, _("relabel a tape")}, - { N_("release"), release_cmd, _("release <storage-name>")}, - { N_("reload"), reload_cmd, _("reload conf file")}, - { N_("run"), run_cmd, _("run <job-name>")}, - { N_("status"), status_cmd, _("status [storage | client]=<name>")}, - { N_("setdebug"), setdebug_cmd, _("sets debug level")}, - { N_("setip"), setip_cmd, _("sets new client address -- if authorized")}, - { N_("show"), show_cmd, _("show (resource records) [jobs | pools | ... | all]")}, - { N_("sqlquery"), sqlquerycmd, _("use SQL to query catalog")}, - { N_("time"), time_cmd, _("print current time")}, - { N_("trace"), trace_cmd, _("turn on/off trace to file")}, - { N_("unmount"), unmount_cmd, _("unmount <storage-name>")}, - { N_("umount"), unmount_cmd, _("umount <storage-name> for old-time Unix guys")}, - { N_("update"), update_cmd, _("update Volume, Pool or slots")}, - { N_("use"), use_cmd, _("use catalog xxx")}, - { N_("var"), var_cmd, _("does variable expansion")}, - { N_("version"), version_cmd, _("print Director version")}, - { N_("wait"), wait_cmd, _("wait until no jobs are running [<jobname=name> | <jobid=nnn> | <ujobid=complete_name>]")}, + { NT_("add"), add_cmd, _("add media to a pool")}, + { NT_("autodisplay"), autodisplay_cmd, _("autodisplay [on|off] -- console messages")}, + { NT_("automount"), automount_cmd, _("automount [on|off] -- after label")}, + { NT_("cancel"), cancel_cmd, _("cancel [<jobid=nnn> | <job=name>] -- cancel a job")}, + { NT_("create"), create_cmd, _("create DB Pool from resource")}, + { NT_("delete"), delete_cmd, _("delete [pool=<pool-name> | media volume=<volume-name>]")}, + { NT_("disable"), disable_cmd, _("disable <job=name> -- disable a job")}, + { NT_("enable"), enable_cmd, _("enable <job=name> -- enable a job")}, + { NT_("estimate"), estimate_cmd, _("performs FileSet estimate, listing gives full listing")}, + { NT_("exit"), quit_cmd, _("exit = quit")}, + { NT_("gui"), gui_cmd, _("gui [on|off] -- non-interactive gui mode")}, + { NT_("help"), help_cmd, _("print this command")}, + { NT_("list"), list_cmd, _("list [pools | jobs | jobtotals | media <pool=pool-name> | files <jobid=nn>]; from catalog")}, + { NT_("label"), label_cmd, _("label a tape")}, + { NT_("llist"), llist_cmd, _("full or long list like list command")}, + { NT_("messages"), messagescmd, _("messages")}, + { NT_("mount"), mount_cmd, _("mount <storage-name>")}, + { NT_("prune"), prunecmd, _("prune expired records from catalog")}, + { NT_("purge"), purgecmd, _("purge records from catalog")}, + { NT_("python"), python_cmd, _("python control commands")}, + { NT_("quit"), quit_cmd, _("quit")}, + { NT_("query"), querycmd, _("query catalog")}, + { NT_("restore"), restore_cmd, _("restore files")}, + { NT_("relabel"), relabel_cmd, _("relabel a tape")}, + { NT_("release"), release_cmd, _("release <storage-name>")}, + { NT_("reload"), reload_cmd, _("reload conf file")}, + { NT_("run"), run_cmd, _("run <job-name>")}, + { NT_("status"), status_cmd, _("status [storage | client]=<name>")}, + { NT_("setdebug"), setdebug_cmd, _("sets debug level")}, + { NT_("setip"), setip_cmd, _("sets new client address -- if authorized")}, + { NT_("show"), show_cmd, _("show (resource records) [jobs | pools | ... | all]")}, + { NT_("sqlquery"), sqlquerycmd, _("use SQL to query catalog")}, + { NT_("time"), time_cmd, _("print current time")}, + { NT_("trace"), trace_cmd, _("turn on/off trace to file")}, + { NT_("unmount"), unmount_cmd, _("unmount <storage-name>")}, + { NT_("umount"), unmount_cmd, _("umount <storage-name> for old-time Unix guys")}, + { NT_("update"), update_cmd, _("update Volume, Pool or slots")}, + { NT_("use"), use_cmd, _("use catalog xxx")}, + { NT_("var"), var_cmd, _("does variable expansion")}, + { NT_("version"), version_cmd, _("print Director version")}, + { NT_("wait"), wait_cmd, _("wait until no jobs are running [<jobname=name> | <jobid=nnn> | <ujobid=complete_name>]")}, }; #define comsize (sizeof(commands)/sizeof(struct cmdstruct)) @@ -629,7 +629,7 @@ JOB *job; int i; - i = find_arg_with_value(ua, N_("job")); + i = find_arg_with_value(ua, NT_("job")); if (i < 0) { job = select_job_resource(ua); if (!job) { @@ -1110,9 +1110,9 @@ static int delete_cmd(UAContext *ua, const char *cmd) { static const char *keywords[] = { - N_("volume"), - N_("pool"), - N_("jobid"), + NT_("volume"), + NT_("pool"), + NT_("jobid"), NULL}; if (!open_db(ua)) { @@ -1172,7 +1172,7 @@ JobId_t JobId; char *s,*sep,*tok; - int i = find_arg_with_value(ua, N_("jobid")); + int i = find_arg_with_value(ua, NT_("jobid")); if (i >= 0) { if (strchr(ua->argv[i], ',') != NULL || strchr(ua->argv[i], '-') != NULL) { s = bstrdup(ua->argv[i]); Index: ua_prune.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_prune.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- ua_prune.c 17 Mar 2006 17:42:43 -0000 1.50 +++ ua_prune.c 11 Apr 2006 16:23:36 -0000 1.51 @@ -158,9 +158,9 @@ int kw; static const char *keywords[] = { - N_("Files"), - N_("Jobs"), - N_("Volume"), + NT_("Files"), + NT_("Jobs"), + NT_("Volume"), NULL}; if (!open_db(ua)) { Index: ua_run.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -d -r1.75 -r1.76 --- ua_run.c 8 Mar 2006 21:17:09 -0000 1.75 +++ ua_run.c 11 Apr 2006 16:23:36 -0000 1.76 @@ -494,7 +494,7 @@ jcr->cloned = cloned; - if (find_arg(ua, N_("fdcalled")) > 0) { + if (find_arg(ua, NT_("fdcalled")) > 0) { jcr->file_bsock = dup_bsock(ua->UA_sock); ua->quit = true; } @@ -518,7 +518,7 @@ } /* Run without prompting? */ - if (ua->batch || find_arg(ua, N_("yes")) > 0) { + if (ua->batch || find_arg(ua, NT_("yes")) > 0) { goto start_job; } Index: next_vol.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/next_vol.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- next_vol.c 14 Mar 2006 19:37:20 -0000 1.26 +++ next_vol.c 11 Apr 2006 16:23:36 -0000 1.27 @@ -63,30 +63,34 @@ */ ok = db_find_next_volume(jcr, jcr->db, index, InChanger, mr); Dmsg2(100, "catreq after find_next_vol ok=%d FW=%d\n", ok, mr->FirstWritten); - /* - * 2. Try pulling a Scratch volume if one exists in the autochanger - */ - if (!ok && InChanger) { - ok = get_scratch_volume(jcr, mr, InChanger); - } if (!ok) { /* - * 3. Try finding a recycled volume + * 2. Try finding a recycled volume */ ok = find_recycled_volume(jcr, InChanger, mr); Dmsg2(100, "find_recycled_volume %d FW=%d\n", ok, mr->FirstWritten); if (!ok) { /* - * 4. Try recycling any purged volume + * 3. Try recycling any purged volume */ ok = recycle_oldest_purged_volume(jcr, InChanger, mr); if (!ok) { /* - * 5. Try pruning Volumes + * 4. Try pruning Volumes */ prune_volumes(jcr); ok = recycle_oldest_purged_volume(jcr, InChanger, mr); + if (!ok) { + /* + * 5. Try pulling a volume from the Scratch pool + */ + ok = get_scratch_volume(jcr, mr, InChanger); + } + /* + * If we are using an Autochanger and have not found + * a volume, retry looking for any volume. + */ if (InChanger) { InChanger = false; if (!ok) { @@ -96,16 +100,10 @@ } } - if (!ok) { - /* - * 6. Try pulling a volume from the Scratch pool - */ - ok = get_scratch_volume(jcr, mr, InChanger); - } if (!ok && create) { /* - * 7. Try "creating" a new Volume + * 6. Try "creating" a new Volume */ ok = newVolume(jcr, mr); } @@ -123,14 +121,14 @@ UAContext *ua; Dmsg0(400, "Try purge.\n"); /* - * 8. Try to purging oldest volume only if not UA calling us. + * 7. Try to purging oldest volume only if not UA calling us. */ ua = new_ua_context(jcr); if (jcr->pool->purge_oldest_volume && create) { Jmsg(jcr, M_INFO, 0, _("Purging oldest volume \"%s\"\n"), mr->VolumeName); ok = purge_jobs_from_volume(ua, mr); /* - * 9. or try recycling the oldest volume + * 8. or try recycling the oldest volume */ } else if (jcr->pool->recycle_oldest_volume) { Jmsg(jcr, M_INFO, 0, _("Pruning oldest volume \"%s\"\n"), mr->VolumeName); Index: ua_tree.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_tree.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- ua_tree.c 12 Oct 2005 15:36:56 -0000 1.40 +++ ua_tree.c 11 Apr 2006 16:23:36 -0000 1.41 @@ -55,24 +55,24 @@ struct cmdstruct { const char *key; int (*func)(UAContext *ua, TREE_CTX *tree); const char *help; }; static struct cmdstruct commands[] = { - { N_("cd"), cdcmd, _("change current directory")}, - { N_("count"), countcmd, _("count marked files in and below the cd")}, - { N_("dir"), dircmd, _("long list current directory, wildcards allowed")}, - { N_(".dir"), dot_dircmd, _("long list current directory, wildcards allowed")}, - { N_("done"), donecmd, _("leave file selection mode")}, - { N_("estimate"), estimatecmd, _("estimate restore size")}, - { N_("exit"), donecmd, _("same as done command")}, - { N_("find"), findcmd, _("find files, wildcards allowed")}, - { N_("help"), helpcmd, _("print help")}, - { N_("ls"), lscmd, _("list current directory, wildcards allowed")}, - { N_("lsmark"), lsmarkcmd, _("list the marked files in and below the cd")}, - { N_("mark"), markcmd, _("mark dir/file to be restored recursively, wildcards allowed")}, - { N_("markdir"), markdircmd, _("mark directory name to be restored (no files)")}, - { N_("pwd"), pwdcmd, _("print current working directory")}, - { N_("unmark"), unmarkcmd, _("unmark dir/file to be restored recursively in dir")}, - { N_("unmarkdir"), unmarkdircmd, _("unmark directory name only no recursion")}, - { N_("quit"), quitcmd, _("quit and do not do restore")}, - { N_("?"), helpcmd, _("print help")}, + { NT_("cd"), cdcmd, _("change current directory")}, + { NT_("count"), countcmd, _("count marked files in and below the cd")}, + { NT_("dir"), dircmd, _("long list current directory, wildcards allowed")}, + { NT_(".dir"), dot_dircmd, _("long list current directory, wildcards allowed")}, + { NT_("done"), donecmd, _("leave file selection mode")}, + { NT_("estimate"), estimatecmd, _("estimate restore size")}, + { NT_("exit"), donecmd, _("same as done command")}, + { NT_("find"), findcmd, _("find files, wildcards allowed")}, + { NT_("help"), helpcmd, _("print help")}, + { NT_("ls"), lscmd, _("list current directory, wildcards allowed")}, + { NT_("lsmark"), lsmarkcmd, _("list the marked files in and below the cd")}, + { NT_("mark"), markcmd, _("mark dir/file to be restored recursively, wildcards allowed")}, + { NT_("markdir"), markdircmd, _("mark directory name to be restored (no files)")}, + { NT_("pwd"), pwdcmd, _("print current working directory")}, + { NT_("unmark"), unmarkcmd, _("unmark dir/file to be restored recursively in dir")}, + { NT_("unmarkdir"), unmarkdircmd, _("unmark directory name only no recursion")}, + { NT_("quit"), quitcmd, _("quit and do not do restore")}, + { NT_("?"), helpcmd, _("print help")}, }; #define comsize (sizeof(commands)/sizeof(struct cmdstruct)) Index: ua_dotcmds.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_dotcmds.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- ua_dotcmds.c 17 Mar 2006 17:42:43 -0000 1.32 +++ ua_dotcmds.c 11 Apr 2006 16:23:36 -0000 1.33 @@ -58,22 +58,22 @@ struct cmdstruct { const char *key; int (*func)(UAContext *ua, const char *cmd); const char *help; }; static struct cmdstruct commands[] = { - { N_(".die"), diecmd, NULL}, - { N_(".jobs"), jobscmd, NULL}, - { N_(".filesets"), filesetscmd, NULL}, - { N_(".clients"), clientscmd, NULL}, - { N_(".msgs"), msgscmd, NULL}, - { N_(".pools"), poolscmd, NULL}, - { N_(".types"), typescmd, NULL}, - { N_(".backups"), backupscmd, NULL}, - { N_(".levels"), levelscmd, NULL}, - { N_(".status"), qstatus_cmd, NULL}, - { N_(".storage"), storagecmd, NULL}, - { N_(".defaults"), defaultscmd, NULL}, - { N_(".messages"), getmsgscmd, NULL}, - { N_(".help"), qhelp_cmd, NULL}, - { N_(".quit"), quit_cmd, NULL}, - { N_(".exit"), quit_cmd, NULL} + { NT_(".die"), diecmd, NULL}, + { NT_(".jobs"), jobscmd, NULL}, + { NT_(".filesets"), filesetscmd, NULL}, + { NT_(".clients"), clientscmd, NULL}, + { NT_(".msgs"), msgscmd, NULL}, + { NT_(".pools"), poolscmd, NULL}, + { NT_(".types"), typescmd, NULL}, + { NT_(".backups"), backupscmd, NULL}, + { NT_(".levels"), levelscmd, NULL}, + { NT_(".status"), qstatus_cmd, NULL}, + { NT_(".storage"), storagecmd, NULL}, + { NT_(".defaults"), defaultscmd, NULL}, + { NT_(".messages"), getmsgscmd, NULL}, + { NT_(".help"), qhelp_cmd, NULL}, + { NT_(".quit"), quit_cmd, NULL}, + { NT_(".exit"), quit_cmd, NULL} }; #define comsize (sizeof(commands)/sizeof(struct cmdstruct)) Index: ua_label.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_label.c,v retrieving revision 1.66 retrieving revision 1.67 diff -u -d -r1.66 -r1.67 --- ua_label.c 8 Apr 2006 14:27:35 -0000 1.66 +++ ua_label.c 11 Apr 2006 16:23:36 -0000 1.67 @@ -168,7 +168,7 @@ set_storage(ua->jcr, store); drive = get_storage_drive(ua, store); - scan = find_arg(ua, N_("scan")) >= 0; + scan = find_arg(ua, NT_("scan")) >= 0; max_slots = get_num_slots_from_SD(ua); Dmsg1(100, "max_slots=%d\n", max_slots); Index: ua_update.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- ua_update.c 23 Feb 2006 20:04:22 -0000 1.12 +++ ua_update.c 11 Apr 2006 16:23:36 -0000 1.13 @@ -51,10 +51,10 @@ int update_cmd(UAContext *ua, const char *cmd) { static const char *kw[] = { - N_("media"), /* 0 */ - N_("volume"), /* 1 */ - N_("pool"), /* 2 */ - N_("slots"), /* 3 */ + NT_("media"), /* 0 */ + NT_("volume"), /* 1 */ + NT_("pool"), /* 2 */ + NT_("slots"), /* 3 */ NULL}; if (!open_db(ua)) { @@ -100,14 +100,14 @@ { POOL_MEM query(PM_MESSAGE); const char *kw[] = { - N_("Append"), - N_("Archive"), - N_("Disabled"), - N_("Full"), - N_("Used"), - N_("Cleaning"), - N_("Recycle"), - N_("Read-Only"), + NT_("Append"), + NT_("Archive"), + NT_("Disabled"), + NT_("Full"), + NT_("Used"), + NT_("Cleaning"), + NT_("Recycle"), + NT_("Read-Only"), NULL}; bool found = false; int i; @@ -488,16 +488,16 @@ /* Modify Volume Status */ bsendmsg(ua, _("Current Volume status is: %s\n"), mr.VolStatus); start_prompt(ua, _("Possible Values are:\n")); - add_prompt(ua, N_("Append")); - add_prompt(ua, N_("Archive")); - add_prompt(ua, N_("Disabled")); - add_prompt(ua, N_("Full")); - add_prompt(ua, N_("Used")); - add_prompt(ua, N_("Cleaning")); - if (strcmp(mr.VolStatus, N_("Purged")) == 0) { - add_prompt(ua, N_("Recycle")); + add_prompt(ua, NT_("Append")); + add_prompt(ua, NT_("Archive")); + add_prompt(ua, NT_("Disabled")); + add_prompt(ua, NT_("Full")); + add_prompt(ua, NT_("Used")); + add_prompt(ua, NT_("Cleaning")); + if (strcmp(mr.VolStatus, NT_("Purged")) == 0) { + add_prompt(ua, NT_("Recycle")); } - add_prompt(ua, N_("Read-Only")); + add_prompt(ua, NT_("Read-Only")); if (do_prompt(ua, "", _("Choose new Volume Status"), ua->cmd, sizeof(mr.VolStatus)) < 0) { return 1; } Index: expand.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/expand.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- expand.c 21 Dec 2004 16:18:32 -0000 1.9 +++ expand.c 11 Apr 2006 16:23:36 -0000 1.10 @@ -33,7 +33,7 @@ static int date_item(JCR *jcr, int code, - const char **val_ptr, int *val_len, int *val_size) + const char **val_ptr, int *val_len, int *val_size) { struct tm tm; time_t now = time(NULL); @@ -42,25 +42,25 @@ char buf[10]; switch (code) { - case 1: /* year */ + case 1: /* year */ val = tm.tm_year + 1900; break; - case 2: /* month */ + case 2: /* month */ val = tm.tm_mon + 1; break; - case 3: /* day */ + case 3: /* day */ val = tm.tm_mday; break; - case 4: /* hour */ + case 4: /* hour */ val = tm.tm_hour; break; - case 5: /* minute */ + case 5: /* minute */ val = tm.tm_min; break; - case 6: /* second */ + case 6: /* second */ val = tm.tm_sec; break; - case 7: /* Week day */ + case 7: /* Week day */ val = tm.tm_wday; break; } @@ -72,51 +72,51 @@ } static int job_item(JCR *jcr, int code, - const char **val_ptr, int *val_len, int *val_size) + const char **val_ptr, int *val_len, int *val_size) { const char *str = " "; char buf[20]; switch (code) { - case 1: /* Job */ + case 1: /* Job */ str = jcr->job->hdr.name; break; case 2: /* Director's name */ str = my_name; break; - case 3: /* level */ + case 3: /* level */ str = job_level_to_str(jcr->JobLevel); break; - case 4: /* type */ + case 4: /* type */ str = job_type_to_str(jcr->JobType); break; - case 5: /* JobId */ + case 5: /* JobId */ bsnprintf(buf, sizeof(buf), "%d", jcr->JobId); str = buf; break; - case 6: /* Client */ + case 6: /* Client */ str = jcr->client->hdr.name; if (!str) { - str = " "; + str = " "; } break; - case 7: /* NumVols */ + case 7: /* NumVols */ bsnprintf(buf, sizeof(buf), "%d", jcr->NumVols); str = buf; break; - case 8: /* Pool */ + case 8: /* Pool */ str = jcr->pool->hdr.name; break; - case 9: /* Storage */ + case 9: /* Storage */ str = jcr->store->hdr.name; break; - case 10: /* Catalog */ + case 10: /* Catalog */ str = jcr->catalog->hdr.name; break; - case 11: /* MediaType */ + case 11: /* MediaType */ str = jcr->store->media_type; break; - case 12: /* JobName */ + case 12: /* JobName */ str = jcr->Job; break; } @@ -128,32 +128,32 @@ struct s_built_in_vars {const char *var_name; int code; int (*func)(JCR *jcr, int code, - const char **val_ptr, int *val_len, int *val_size);}; + const char **val_ptr, int *val_len, int *val_size);}; /* * Table of build in variables */ static struct s_built_in_vars built_in_vars[] = { - { N_("Year"), 1, date_item}, - { N_("Month"), 2, date_item}, - { N_("Day"), 3, date_item}, - { N_("Hour"), 4, date_item}, - { N_("Minute"), 5, date_item}, - { N_("Second"), 6, date_item}, - { N_("WeekDay"), 7, date_item}, + { NT_("Year"), 1, date_item}, + { NT_("Month"), 2, date_item}, + { NT_("Day"), 3, date_item}, + { NT_("Hour"), 4, date_item}, + { NT_("Minute"), 5, date_item}, + { NT_("Second"), 6, date_item}, + { NT_("WeekDay"), 7, date_item}, - { N_("Job"), 1, job_item}, - { N_("Dir"), 2, job_item}, - { N_("Level"), 3, job_item}, - { N_("Type"), 4, job_item}, - { N_("JobId"), 5, job_item}, - { N_("Client"), 6, job_item}, - { N_("NumVols"), 7, job_item}, - { N_("Pool"), 8, job_item}, - { N_("Storage"), 9, job_item}, - { N_("Catalog"), 10, job_item}, - { N_("MediaType"), 11, job_item}, - { N_("JobName"), 12, job_item}, + { NT_("Job"), 1, job_item}, + { NT_("Dir"), 2, job_item}, + { NT_("Level"), 3, job_item}, + { NT_("Type"), 4, job_item}, + { NT_("JobId"), 5, job_item}, + { NT_("Client"), 6, job_item}, + { NT_("NumVols"), 7, job_item}, + { NT_("Pool"), 8, job_item}, + { NT_("Storage"), 9, job_item}, + { NT_("Catalog"), 10, job_item}, + { NT_("MediaType"), 11, job_item}, + { NT_("JobName"), 12, job_item}, { NULL, 0, NULL} }; @@ -164,20 +164,20 @@ * call the appropriate subroutine to do the work. */ static var_rc_t lookup_built_in_var(var_t *ctx, void *my_ctx, - const char *var_ptr, int var_len, int var_index, - const char **val_ptr, int *val_len, int *val_size) + const char *var_ptr, int var_len, int var_index, + const char **val_ptr, int *val_len, int *val_size) { JCR *jcr = (JCR *)my_ctx; int stat; for (int i=0; _(built_in_vars[i].var_name); i++) { if (strncmp(_(built_in_vars[i].var_name), var_ptr, var_len) == 0) { - stat = (*built_in_vars[i].func)(jcr, built_in_vars[i].code, - val_ptr, val_len, val_size); - if (stat) { - return VAR_OK; - } - break; + stat = (*built_in_vars[i].func)(jcr, built_in_vars[i].code, + val_ptr, val_len, val_size); + if (stat) { + return VAR_OK; + } + break; } } return VAR_ERR_UNDEFINED_VARIABLE; @@ -188,8 +188,8 @@ * Search counter variables */ static var_rc_t lookup_counter_var(var_t *ctx, void *my_ctx, - const char *var_ptr, int var_len, int var_inc, int var_index, - const char **val_ptr, int *val_len, int *val_size) + const char *var_ptr, int var_len, int var_inc, int var_index, + const char **val_ptr, int *val_len, int *val_size) { char buf[MAXSTRING]; var_rc_t stat = VAR_ERR_UNDEFINED_VARIABLE; @@ -202,48 +202,48 @@ LockRes(); for (COUNTER *counter=NULL; (counter = (COUNTER *)GetNextRes(R_COUNTER, (RES *)counter)); ) { if (strcmp(counter->hdr.name, buf) == 0) { - Dmsg2(100, "Counter=%s val=%d\n", buf, counter->CurrentValue); - /* -1 => return size of array */ - if (var_index == -1) { - bsnprintf(buf, sizeof(buf), "%d", counter->CurrentValue); - *val_len = bsnprintf(buf, sizeof(buf), "%d", strlen(buf)); - *val_ptr = buf; - *val_size = 0; /* don't try to free val_ptr */ - return VAR_OK; - } else { - bsnprintf(buf, sizeof(buf), "%d", counter->CurrentValue); - *val_ptr = bstrdup(buf); - *val_len = strlen(buf); - *val_size = *val_len + 1; - } - if (var_inc) { /* increment the variable? */ - if (counter->CurrentValue == counter->MaxValue) { - counter->CurrentValue = counter->MinValue; - } else { - counter->CurrentValue++; - } - if (counter->Catalog) { /* update catalog if need be */ - COUNTER_DBR cr; - JCR *jcr = (JCR *)my_ctx; - memset(&cr, 0, sizeof(cr)); - bstrncpy(cr.Counter, counter->hdr.name, sizeof(cr.Counter)); - cr.MinValue = counter->MinValue; - cr.MaxValue = counter->MaxValue; - cr.CurrentValue = counter->CurrentValue; - Dmsg1(100, "New value=%d\n", cr.CurrentValue); - if (counter->WrapCounter) { - bstrncpy(cr.WrapCounter, counter->WrapCounter->hdr.name, sizeof(cr.WrapCounter)); - } else { - cr.WrapCounter[0] = 0; - } - if (!db_update_counter_record(jcr, jcr->db, &cr)) { - Jmsg(jcr, M_ERROR, 0, _("Count not update counter %s: ERR=%s\n"), - counter->hdr.name, db_strerror(jcr->db)); - } - } - } - stat = VAR_OK; - break; + Dmsg2(100, "Counter=%s val=%d\n", buf, counter->CurrentValue); + /* -1 => return size of array */ + if (var_index == -1) { + bsnprintf(buf, sizeof(buf), "%d", counter->CurrentValue); + *val_len = bsnprintf(buf, sizeof(buf), "%d", strlen(buf)); + *val_ptr = buf; + *val_size = 0; /* don't try to free val_ptr */ + return VAR_OK; + } else { + bsnprintf(buf, sizeof(buf), "%d", counter->CurrentValue); + *val_ptr = bstrdup(buf); + *val_len = strlen(buf); + *val_size = *val_len + 1; + } + if (var_inc) { /* increment the variable? */ + if (counter->CurrentValue == counter->MaxValue) { + counter->CurrentValue = counter->MinValue; + } else { + counter->CurrentValue++; + } + if (counter->Catalog) { /* update catalog if need be */ + COUNTER_DBR cr; + JCR *jcr = (JCR *)my_ctx; + memset(&cr, 0, sizeof(cr)); + bstrncpy(cr.Counter, counter->hdr.name, sizeof(cr.Counter)); + cr.MinValue = counter->MinValue; + cr.MaxValue = counter->MaxValue; + cr.CurrentValue = counter->CurrentValue; + Dmsg1(100, "New value=%d\n", cr.CurrentValue); + if (counter->WrapCounter) { + bstrncpy(cr.WrapCounter, counter->WrapCounter->hdr.name, sizeof(cr.WrapCounter)); + } else { + cr.WrapCounter[0] = 0; + } + if (!db_update_counter_record(jcr, jcr->db, &cr)) { + Jmsg(jcr, M_ERROR, 0, _("Count not update counter %s: ERR=%s\n"), + counter->hdr.name, db_strerror(jcr->db)); + } + } + } + stat = VAR_OK; + break; } } UnlockRes(); @@ -255,8 +255,8 @@ * Called here from "core" expand code to look up a variable */ static var_rc_t lookup_var(var_t *ctx, void *my_ctx, - const char *var_ptr, int var_len, int var_inc, int var_index, - const char **val_ptr, int *val_len, int *val_size) + const char *var_ptr, int var_len, int var_inc, int var_index, + const char **val_ptr, int *val_len, int *val_size) { char buf[MAXSTRING], *val, *p, *v; var_rc_t stat; @@ -264,12 +264,12 @@ /* Note, if val_size > 0 and val_ptr!=NULL, the core code will free() it */ if ((stat = lookup_built_in_var(ctx, my_ctx, var_ptr, var_len, var_index, - val_ptr, val_len, val_size)) == VAR_OK) { + val_ptr, val_len, val_size)) == VAR_OK) { return VAR_OK; } if ((stat = lookup_counter_var(ctx, my_ctx, var_ptr, var_len, var_inc, var_index, - val_ptr, val_len, val_size)) == VAR_OK) { + val_ptr, val_len, val_size)) == VAR_OK) { return VAR_OK; } @@ -287,11 +287,11 @@ /* He wants to index the "array" */ count = 1; /* Find the size of the "array" - * each element is separated by a | + * each element is separated by a | */ for (p = val; *p; p++) { if (*p == '|') { - count++; + count++; } } Dmsg3(100, "For %s, reqest index=%d have=%d\n", @@ -300,10 +300,10 @@ /* -1 => return size of array */ if (var_index == -1) { int len; - if (count == 1) { /* if not array */ - len = strlen(val); /* return length of string */ + if (count == 1) { /* if not array */ + len = strlen(val); /* return length of string */ } else { - len = count; /* else return # array items */ + len = count; /* else return # array items */ } *val_len = bsnprintf(buf, sizeof(buf), "%d", len); *val_ptr = buf; @@ -320,12 +320,12 @@ count = 0; for (p=val; *p; ) { if (*p == '|') { - if (count < var_index) { - val = ++p; - count++; - continue; - } - break; + if (count < var_index) { + val = ++p; + count++; + continue; + } + break; } p++; } @@ -352,10 +352,10 @@ * out_ptr points to string to be returned */ static var_rc_t operate_var(var_t *var, void *my_ctx, - const char *op_ptr, int op_len, - const char *arg_ptr, int arg_len, - const char *val_ptr, int val_len, - char **out_ptr, int *out_len, int *out_size) + const char *op_ptr, int op_len, + const char *arg_ptr, int arg_len, + const char *val_ptr, int val_len, + char **out_ptr, int *out_len, int *out_size) { var_rc_t stat = VAR_ERR_UNDEFINED_OPERATION; Dmsg0(100, "Enter operate_var\n"); @@ -366,7 +366,7 @@ if (op_len == 3 && strncmp(op_ptr, "inc", 3) == 0) { char buf[MAXSTRING]; if (val_len > (int)sizeof(buf) - 1) { - return VAR_ERR_OUT_OF_MEMORY; + return VAR_ERR_OUT_OF_MEMORY; } memcpy(buf, arg_ptr, arg_len); buf[arg_len] = 0; @@ -376,10 +376,10 @@ Dmsg1(100, "Val=%s\n", buf); LockRes(); for (COUNTER *counter=NULL; (counter = (COUNTER *)GetNextRes(R_COUNTER, (RES *)counter)); ) { - if (strcmp(counter->hdr.name, buf) == 0) { - Dmsg2(100, "counter=%s val=%s\n", counter->hdr.name, buf); - break; - } + if (strcmp(counter->hdr.name, buf) == 0) { + Dmsg2(100, "counter=%s val=%s\n", counter->hdr.name, buf); + break; + } } UnlockRes(); return stat; @@ -393,7 +393,7 @@ * Expand an input line and return it. * * Returns: 0 on failure - * 1 on success and exp has expanded input + * 1 on success and exp has expanded input */ int variable_expansion(JCR *jcr, char *inp, POOLMEM **exp) { @@ -435,7 +435,7 @@ /* expand variables */ if ((stat = var_expand(var_ctx, inp, in_len, &outp, &out_len, 0)) != VAR_OK) { Jmsg(jcr, M_ERROR, 0, _("Cannot expand expression \"%s\": ERR=%s\n"), - inp, var_strerror(var_ctx, stat)); + inp, var_strerror(var_ctx, stat)); goto bail_out; } Index: ua_select.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -d -r1.72 -r1.73 --- ua_select.c 8 Mar 2006 21:17:09 -0000 1.72 +++ ua_select.c 11 Apr 2006 16:23:36 -0000 1.73 @@ -297,8 +297,8 @@ int i; for (i=1; i<ua->argc; i++) { - if ((strcasecmp(ua->argk[i], N_("client")) == 0 || - strcasecmp(ua->argk[i], N_("fd")) == 0) && ua->argv[i]) { + if ((strcasecmp(ua->argk[i], NT_("client")) == 0 || + strcasecmp(ua->argk[i], NT_("fd")) == 0) && ua->argv[i]) { if (!acl_access_ok(ua, Client_ACL, ua->argv[i])) { break; } @@ -440,7 +440,7 @@ uint32_t *ids; for (i=1; i<ua->argc; i++) { - if (strcasecmp(ua->argk[i], N_("pool")) == 0 && ua->argv[i] && + if (strcasecmp(ua->argk[i], NT_("pool")) == 0 && ua->argv[i] && acl_access_ok(ua, Pool_ACL, ua->argv[i])) { bstrncpy(pr->Name, ua->argv[i], sizeof(pr->Name)); if (!db_get_pool_record(ua->jcr, ua->db, pr)) { @@ -626,10 +626,10 @@ int i; for (i=1; i<ua->argc; i++) { - if (strcasecmp(ua->argk[i], N_("ujobid")) == 0 && ua->argv[i]) { + if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0 && ua->argv[i]) { jr->JobId = 0; bstrncpy(jr->Job, ua->argv[i], sizeof(jr->Job)); - } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0 && ua->argv[i]) { + } else if (strcasecmp(ua->argk[i], NT_("jobid")) == 0 && ua->argv[i]) { jr->JobId = str_to_int64(ua->argv[i]); jr->Job[0] = 0; } else { @@ -648,8 +648,8 @@ jr->Job[0] = 0; for (i=1; i<ua->argc; i++) { - if ((strcasecmp(ua->argk[i], N_("jobname")) == 0 || - strcasecmp(ua->argk[i], N_("job")) == 0) && ua->argv[i]) { + if ((strcasecmp(ua->argk[i], NT_("jobname")) == 0 || + strcasecmp(ua->argk[i], NT_("job")) == 0) && ua->argv[i]) { jr->JobId = 0; bstrncpy(jr->Name, ua->argv[i], sizeof(jr->Name)); break; @@ -813,12 +813,12 @@ break; } } else { - if (strcasecmp(ua->argk[i], N_("storage")) == 0 || - strcasecmp(ua->argk[i], N_("sd")) == 0) { + if (strcasecmp(ua->argk[i], NT_("storage")) == 0 || + strcasecmp(ua->argk[i], NT_("sd")) == 0) { store_name = ua->argv[i]; break; - } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) { jobid = str_to_int64(ua->argv[i]); if (jobid <= 0) { bsendmsg(ua, _("Expecting jobid=nn command, got: %s\n"), ua->argk[i]); @@ -832,8 +832,8 @@ free_jcr(jcr); break; - } else if (strcasecmp(ua->argk[i], N_("job")) == 0 || - strcasecmp(ua->argk[i], N_("jobname")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("job")) == 0 || + strcasecmp(ua->argk[i], NT_("jobname")) == 0) { if (!ua->argv[i]) { bsendmsg(ua, _("Expecting job=xxx, got: %s.\n"), ua->argk[i]); return NULL; @@ -845,7 +845,7 @@ store = jcr->store; free_jcr(jcr); break; - } else if (strcasecmp(ua->argk[i], N_("ujobid")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0) { if (!ua->argv[i]) { bsendmsg(ua, _("Expecting ujobid=xxx, got: %s.\n"), ua->argk[i]); return NULL; Index: ua_output.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_output.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -d -r1.69 -r1.70 --- ua_output.c 14 Mar 2006 19:37:20 -0000 1.69 +++ ua_output.c 11 Apr 2006 16:23:36 -0000 1.70 @@ -49,8 +49,8 @@ int autodisplay_cmd(UAContext *ua, const char *cmd) { static const char *kw[] = { - N_("on"), - N_("off"), + NT_("on"), + NT_("off"), NULL}; switch (find_arg_keyword(ua, kw)) { @@ -73,8 +73,8 @@ int gui_cmd(UAContext *ua, const char *cmd) { static const char *kw[] = { - N_("on"), - N_("off"), + NT_("on"), + NT_("off"), NULL}; switch (find_arg_keyword(ua, kw)) { @@ -95,19 +95,19 @@ struct showstruct {const char *res_name; int type;}; static struct showstruct reses[] = { - {N_("directors"), R_DIRECTOR}, - {N_("clients"), R_CLIENT}, - {N_("counters"), R_COUNTER}, - {N_("devices"), R_DEVICE}, - {N_("jobs"), R_JOB}, - {N_("storages"), R_STORAGE}, - {N_("catalogs"), R_CATALOG}, - {N_("schedules"), R_SCHEDULE}, - {N_("filesets"), R_FILESET}, - {N_("pools"), R_POOL}, - {N_("messages"), R_MSGS}, - {N_("all"), -1}, - {N_("help"), -2}, + {NT_("directors"), R_DIRECTOR}, + {NT_("clients"), R_CLIENT}, + {NT_("counters"), R_COUNTER}, + {NT_("devices"), R_DEVICE}, + {NT_("jobs"), R_JOB}, + {NT_("storages"), R_STORAGE}, + {NT_("catalogs"), R_CATALOG}, + {NT_("schedules"), R_SCHEDULE}, + {NT_("filesets"), R_FILESET}, + {NT_("pools"), R_POOL}, + {NT_("messages"), R_MSGS}, + {NT_("all"), -1}, + {NT_("help"), -2}, {NULL, 0} }; @@ -256,20 +256,20 @@ /* Scan arguments looking for things to do */ for (i=1; i<ua->argc; i++) { /* List JOBS */ - if (strcasecmp(ua->argk[i], N_("jobs")) == 0) { + if (strcasecmp(ua->argk[i], NT_("jobs")) == 0) { /* Apply any limit */ - j = find_arg_with_value(ua, N_("limit")); + j = find_arg_with_value(ua, NT_("limit")); if (j >= 0) { jr.limit = atoi(ua->argv[j]); } db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); /* List JOBTOTALS */ - } else if (strcasecmp(ua->argk[i], N_("jobtotals")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("jobtotals")) == 0) { db_list_job_totals(ua->jcr, ua->db, &jr, prtit, ua); /* List JOBID=nn */ - } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) { if (ua->argv[i]) { jobid = str_to_int64(ua->argv[i]); if (jobid > 0) { @@ -279,28 +279,28 @@ } /* List JOB=xxx */ - } else if ((strcasecmp(ua->argk[i], N_("job")) == 0 || - strcasecmp(ua->argk[i], N_("jobname")) == 0) && ua->argv[i]) { + } else if ((strcasecmp(ua->argk[i], NT_("job")) == 0 || + strcasecmp(ua->argk[i], NT_("jobname")) == 0) && ua->argv[i]) { bstrncpy(jr.Name, ua->argv[i], MAX_NAME_LENGTH); jr.JobId = 0; db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); /* List UJOBID=xxx */ - } else if (strcasecmp(ua->argk[i], N_("ujobid")) == 0 && ua->argv[i]) { + } else if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0 && ua->argv[i]) { bstrncpy(jr.Job, ua->argv[i], MAX_NAME_LENGTH); jr.JobId = 0; db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); /* List FILES */ - } else if (strcasecmp(ua->argk[i], N_("files")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("files")) == 0) { for (j=i+1; j<ua->argc; j++) { - if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], NT_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); jobid = jr.JobId; - } else if (strcasecmp(ua->argk[j], N_("jobid")) == 0 && ua->argv[j]) { + } else if (strcasecmp(ua->argk[j], NT_("jobid")) == 0 && ua->argv[j]) { jobid = str_to_int64(ua->argv[j]); } else { continue; @@ -311,15 +311,15 @@ } /* List JOBMEDIA */ - } else if (strcasecmp(ua->argk[i], N_("jobmedia")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("jobmedia")) == 0) { int done = FALSE; for (j=i+1; j<ua->argc; j++) { - if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], NT_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); jobid = jr.JobId; - } else if (strcasecmp(ua->argk[j], N_("jobid")) == 0 && ua->argv[j]) { + } else if (strcasecmp(ua->argk[j], NT_("jobid")) == 0 && ua->argv[j]) { jobid = str_to_int64(ua->argv[j]); } else { continue; @@ -333,8 +333,8 @@ } /* List POOLS */ - } else if (strcasecmp(ua->argk[i], N_("pool")) == 0 || - strcasecmp(ua->argk[i], N_("pools")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("pool")) == 0 || + strcasecmp(ua->argk[i], NT_("pools")) == 0) { POOL_DBR pr; memset(&pr, 0, sizeof(pr)); if (ua->argv[i]) { @@ -342,22 +342,22 @@ } db_list_pool_records(ua->jcr, ua->db, &pr, prtit, ua, llist); - } else if (strcasecmp(ua->argk[i], N_("clients")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("clients")) == 0) { db_list_client_records(ua->jcr, ua->db, prtit, ua, llist); /* List MEDIA or VOLUMES */ - } else if (strcasecmp(ua->argk[i], N_("media")) == 0 || - strcasecmp(ua->argk[i], N_("volume")) == 0 || - strcasecmp(ua->argk[i], N_("volumes")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("media")) == 0 || + strcasecmp(ua->argk[i], NT_("volume")) == 0 || + strcasecmp(ua->argk[i], NT_("volumes")) == 0) { bool done = false; for (j=i+1; j<ua->argc; j++) { - if (strcasecmp(ua->argk[j], N_("ujobid")) == 0 && ua->argv[j]) { + if (strcasecmp(ua->argk[j], NT_("ujobid")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); jr.JobId = 0; db_get_job_record(ua->jcr, ua->db, &jr); jobid = jr.JobId; - } else if (strcasecmp(ua->argk[j], N_("jobid")) == 0 && ua->argv[j]) { + } else if (strcasecmp(ua->argk[j], NT_("jobid")) == 0 && ua->argv[j]) { jobid = str_to_int64(ua->argv[j]); } else { continue; @@ -380,7 +380,7 @@ } /* Is a specific pool wanted? */ for (i=1; i<ua->argc; i++) { - if (strcasecmp(ua->argk[i], N_("pool")) == 0) { + if (strcasecmp(ua->argk[i], NT_("pool")) == 0) { if (!get_pool_dbr(ua, &pr)) { bsendmsg(ua, _("No Pool specified.\n")); return 1; @@ -412,10 +412,10 @@ return 1; } /* List next volume */ - } else if (strcasecmp(ua->argk[i], N_("nextvol")) == 0 || - strcasecmp(ua->argk[i], N_("nextvolume")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("nextvol")) == 0 || + strcasecmp(ua->argk[i], NT_("nextvolume")) == 0) { n = 1; - j = find_arg_with_value(ua, N_("days")); + j = find_arg_with_value(ua, NT_("days")); if (j >= 0) { n = atoi(ua->argv[j]); if ((n < 0) || (n > 50)) { @@ -424,8 +424,8 @@ } } list_nextvol(ua, n); - } else if (strcasecmp(ua->argk[i], N_("limit")) == 0 - || strcasecmp(ua->argk[i], N_("days")) == 0) { + } else if (strcasecmp(ua->argk[i], NT_("limit")) == 0 + || strcasecmp(ua->argk[i], NT_("days")) == 0) { /* Ignore it */ } else { bsendmsg(ua, _("Unknown list keyword: %s\n"), NPRT(ua->argk[i])); Index: ua_status.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_status.c,v retrieving revision 1.79 retrieving revision 1.80 diff -u -d -r1.79 -r1.80 --- ua_status.c 14 Mar 2006 19:37:20 -0000 1.79 +++ ua_status.c 11 Apr 2006 16:23:36 -0000 1.80 @@ -98,14 +98,14 @@ Dmsg1(20, "status:%s:\n", cmd); for (i=1; i<ua->arg... [truncated message content] |