From 1abffbd9a587151508478ad2b82d158e622876f5 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Sun, 28 Aug 2005 12:22:02 +0000 Subject: [PATCH] - Correct ssize_t problem in build of Win32 - Add code to llprint pools and volumes to debug next item. - From bug report, fix resetting Pool defaults in Volume. It was a typo Max was missing in several places. - Don't allow translation of database Volume Status values. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2362 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/ChangeLog | 2 +- bacula/kernstodo | 1 + bacula/src/cats/protos.h | 2 +- bacula/src/cats/sql_list.c | 30 ++- bacula/src/cats/sql_update.c | 4 +- bacula/src/dird/ua_output.c | 441 ++++++++++++++++--------------- bacula/src/dird/ua_update.c | 57 ++-- bacula/src/version.h | 4 +- bacula/src/win32/compat/compat.h | 4 +- 9 files changed, 279 insertions(+), 266 deletions(-) diff --git a/bacula/ChangeLog b/bacula/ChangeLog index c30719b235..4acf428a8d 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -989,7 +989,7 @@ Changes to 1.37.4: attempt to fix a bug report. 23Feb05 - Corrected SunOs to SunOS in btraceback (user submitted). -- Applied patch from Roger HÃ¥kansson +- Applied patch from Roger Haa¥kansson to warn the user of defective AWKs during ./configure. 20Feb05 - Add some changes submitted by a user for HP client build. diff --git a/bacula/kernstodo b/bacula/kernstodo index 987aad7a57..c6b8f41148 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -19,6 +19,7 @@ Final items for 1.37 before release: - Add recycle event. - Add scratch pool event. +- Implement NeedVolume event - Add Win32 FileSet definition somewhere Document: diff --git a/bacula/src/cats/protos.h b/bacula/src/cats/protos.h index ede3b2b711..24e5c2c8d5 100644 --- a/bacula/src/cats/protos.h +++ b/bacula/src/cats/protos.h @@ -92,7 +92,7 @@ enum e_list_type { HORZ_LIST, VERT_LIST }; -void db_list_pool_records(JCR *jcr, B_DB *db, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); +void db_list_pool_records(JCR *jcr, B_DB *db, POOL_DBR *pr, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); void db_list_job_records(JCR *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx, e_list_type type); void db_list_job_totals(JCR *jcr, B_DB *db, JOB_DBR *jr, DB_LIST_HANDLER sendit, void *ctx); void db_list_files_for_job(JCR *jcr, B_DB *db, uint32_t jobid, DB_LIST_HANDLER sendit, void *ctx); diff --git a/bacula/src/cats/sql_list.c b/bacula/src/cats/sql_list.c index d9952ac5f9..d7d17fb4b8 100644 --- a/bacula/src/cats/sql_list.c +++ b/bacula/src/cats/sql_list.c @@ -69,18 +69,32 @@ int db_list_sql_query(JCR *jcr, B_DB *mdb, char *query, DB_LIST_HANDLER *sendit, } void -db_list_pool_records(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type) +db_list_pool_records(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr, + DB_LIST_HANDLER *sendit, void *ctx, e_list_type type) { db_lock(mdb); if (type == VERT_LIST) { - Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog," - "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes," - "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId," - "RecyclePoolId,LabelType " - " FROM Pool ORDER BY PoolId"); + if (pdbr->Name[0] != 0) { + Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog," + "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes," + "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId," + "RecyclePoolId,LabelType " + " FROM Pool WHERE Name='%s'", pdbr->Name); + } else { + Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog," + "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes," + "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId," + "RecyclePoolId,LabelType " + " FROM Pool ORDER BY PoolId"); + } } else { - Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat " - "FROM Pool ORDER BY PoolId"); + if (pdbr->Name[0] != 0) { + Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat " + "FROM Pool WHERE Name='%s'", pdbr->Name); + } else { + Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat " + "FROM Pool ORDER BY PoolId"); + } } if (!QUERY_DB(jcr, mdb, mdb->cmd)) { diff --git a/bacula/src/cats/sql_update.c b/bacula/src/cats/sql_update.c index 8ff9cd4cfe..3e27669f77 100644 --- a/bacula/src/cats/sql_update.c +++ b/bacula/src/cats/sql_update.c @@ -379,7 +379,7 @@ db_update_media_defaults(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) mr->Recycle,edit_uint64(mr->VolRetention, ed1), edit_uint64(mr->VolUseDuration, ed2), mr->MaxVolJobs, mr->MaxVolFiles, - edit_uint64(mr->VolBytes, ed3), + edit_uint64(mr->MaxVolBytes, ed3), mr->VolumeName); } else { Mmsg(mdb->cmd, "UPDATE Media SET " @@ -389,7 +389,7 @@ db_update_media_defaults(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) mr->Recycle,edit_uint64(mr->VolRetention, ed1), edit_uint64(mr->VolUseDuration, ed2), mr->MaxVolJobs, mr->MaxVolFiles, - edit_uint64(mr->VolBytes, ed3), + edit_uint64(mr->MaxVolBytes, ed3), edit_int64(mr->PoolId, ed4)); } diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index e68100bcf4..7cbff318a8 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -110,7 +110,7 @@ static struct showstruct reses[] = { {N_("messages"), R_MSGS}, {N_("all"), -1}, {N_("help"), -2}, - {NULL, 0} + {NULL, 0} }; @@ -136,59 +136,59 @@ int show_cmd(UAContext *ua, const char *cmd) for (i=1; iargc; i++) { type = 0; res_name = ua->argk[i]; - if (!ua->argv[i]) { /* was a name given? */ - /* No name, dump all resources of specified type */ - recurse = 1; - len = strlen(res_name); - for (j=0; reses[j].res_name; j++) { - if (strncasecmp(res_name, _(reses[j].res_name), len) == 0) { - type = reses[j].type; - if (type > 0) { - res = res_head[type-r_first]; - } else { - res = NULL; - } - break; - } - } + if (!ua->argv[i]) { /* was a name given? */ + /* No name, dump all resources of specified type */ + recurse = 1; + len = strlen(res_name); + for (j=0; reses[j].res_name; j++) { + if (strncasecmp(res_name, _(reses[j].res_name), len) == 0) { + type = reses[j].type; + if (type > 0) { + res = res_head[type-r_first]; + } else { + res = NULL; + } + break; + } + } } else { - /* Dump a single resource with specified name */ - recurse = 0; - len = strlen(res_name); - for (j=0; reses[j].res_name; j++) { - if (strncasecmp(res_name, _(reses[j].res_name), len) == 0) { - type = reses[j].type; - res = (RES *)GetResWithName(type, ua->argv[i]); - if (!res) { - type = -3; - } - break; - } - } + /* Dump a single resource with specified name */ + recurse = 0; + len = strlen(res_name); + for (j=0; reses[j].res_name; j++) { + if (strncasecmp(res_name, _(reses[j].res_name), len) == 0) { + type = reses[j].type; + res = (RES *)GetResWithName(type, ua->argv[i]); + if (!res) { + type = -3; + } + break; + } + } } switch (type) { - case -1: /* all */ - for (j=r_first; j<=r_last; j++) { - dump_resource(j, res_head[j-r_first], bsendmsg, ua); - } - break; + case -1: /* all */ + for (j=r_first; j<=r_last; j++) { + dump_resource(j, res_head[j-r_first], bsendmsg, ua); + } + break; case -2: bsendmsg(ua, _("Keywords for the show command are:\n")); - for (j=0; reses[j].res_name; j++) { + for (j=0; reses[j].res_name; j++) { bsendmsg(ua, "%s\n", _(reses[j].res_name)); - } - goto bail_out; + } + goto bail_out; case -3: bsendmsg(ua, _("%s resource %s not found.\n"), res_name, ua->argv[i]); - goto bail_out; + goto bail_out; case 0: bsendmsg(ua, _("Resource %s not found\n"), res_name); - goto bail_out; + goto bail_out; default: - dump_resource(recurse?type:-type, res, bsendmsg, ua); - break; + dump_resource(recurse?type:-type, res, bsendmsg, ua); + break; } } bail_out: @@ -202,18 +202,18 @@ bail_out: /* * List contents of database * - * list jobs - lists all jobs run - * list jobid=nnn - list job data for jobid - * list job=name - list job data for job + * list jobs - lists all jobs run + * list jobid=nnn - list job data for jobid + * list job=name - list job data for job * list jobmedia jobid= * list jobmedia job=name * list files jobid= - list files saved for job nn * list files job=name - * list pools - list pool records - * list jobtotals - list totals for all jobs - * list media - list media for given pool (deprecated) - * list volumes - list Volumes - * list clients - list clients + * list pools - list pool records + * list jobtotals - list totals for all jobs + * list media - list media for given pool (deprecated) + * list volumes - list Volumes + * list clients - list clients * list nextvol job=xx - list the next vol to be used by job * list nextvolume job=xx - same as above. * @@ -257,154 +257,157 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) for (i=1; iargc; i++) { /* List JOBS */ if (strcasecmp(ua->argk[i], N_("jobs")) == 0) { - /* Apply any limit */ + /* Apply any limit */ j = find_arg_with_value(ua, N_("limit")); - if (j >= 0) { - jr.limit = atoi(ua->argv[j]); - } - db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); + if (j >= 0) { + jr.limit = atoi(ua->argv[j]); + } + db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); - /* List JOBTOTALS */ + /* List JOBTOTALS */ } else if (strcasecmp(ua->argk[i], N_("jobtotals")) == 0) { - db_list_job_totals(ua->jcr, ua->db, &jr, prtit, ua); + db_list_job_totals(ua->jcr, ua->db, &jr, prtit, ua); /* List JOBID */ } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0) { - if (ua->argv[i]) { - jobid = str_to_int64(ua->argv[i]); - if (jobid > 0) { - jr.JobId = jobid; - db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); - } - } + if (ua->argv[i]) { + jobid = str_to_int64(ua->argv[i]); + if (jobid > 0) { + jr.JobId = jobid; + db_list_job_records(ua->jcr, ua->db, &jr, prtit, ua, llist); + } + } /* List JOB */ } else if (strcasecmp(ua->argk[i], N_("job")) == 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); + 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) { - for (j=i+1; jargc; j++) { + for (j=i+1; jargc; j++) { if (strcasecmp(ua->argk[j], N_("job")) == 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; + 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]) { - jobid = str_to_int64(ua->argv[j]); - } else { - continue; - } - if (jobid > 0) { - db_list_files_for_job(ua->jcr, ua->db, jobid, prtit, ua); - } - } + jobid = str_to_int64(ua->argv[j]); + } else { + continue; + } + if (jobid > 0) { + db_list_files_for_job(ua->jcr, ua->db, jobid, prtit, ua); + } + } /* List JOBMEDIA */ } else if (strcasecmp(ua->argk[i], N_("jobmedia")) == 0) { - int done = FALSE; - for (j=i+1; jargc; j++) { + int done = FALSE; + for (j=i+1; jargc; j++) { if (strcasecmp(ua->argk[j], N_("job")) == 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; + 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]) { - jobid = str_to_int64(ua->argv[j]); - } else { - continue; - } - db_list_jobmedia_records(ua->jcr, ua->db, jobid, prtit, ua, llist); - done = TRUE; - } - if (!done) { - /* List for all jobs (jobid=0) */ - db_list_jobmedia_records(ua->jcr, ua->db, 0, prtit, ua, llist); - } + jobid = str_to_int64(ua->argv[j]); + } else { + continue; + } + db_list_jobmedia_records(ua->jcr, ua->db, jobid, prtit, ua, llist); + done = TRUE; + } + if (!done) { + /* List for all jobs (jobid=0) */ + db_list_jobmedia_records(ua->jcr, ua->db, 0, prtit, ua, llist); + } /* List POOLS */ - } else if (strcasecmp(ua->argk[i], N_("pools")) == 0) { - db_list_pool_records(ua->jcr, ua->db, prtit, ua, llist); + } else if (strcasecmp(ua->argk[i], N_("pool")) == 0) { + POOL_DBR pr; + memset(&pr, 0, sizeof(pr)); + if (ua->argv[i]) { + bstrncpy(pr.Name, ua->argv[i], sizeof(pr.Name)); + } + db_list_pool_records(ua->jcr, ua->db, &pr, prtit, ua, llist); } else if (strcasecmp(ua->argk[i], N_("clients")) == 0) { - db_list_client_records(ua->jcr, ua->db, prtit, ua, llist); + 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_("volumes")) == 0) { - bool done = false; - for (j=i+1; jargc; j++) { + strncasecmp(ua->argk[i], N_("volume"), 7) == 0) { + bool done = false; + for (j=i+1; jargc; j++) { if (strcasecmp(ua->argk[j], N_("job")) == 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; + 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]) { - jobid = str_to_int64(ua->argv[j]); - } else { - continue; - } - VolumeName = get_pool_memory(PM_FNAME); - n = db_get_job_volume_names(ua->jcr, ua->db, jobid, &VolumeName); + jobid = str_to_int64(ua->argv[j]); + } else { + continue; + } + VolumeName = get_pool_memory(PM_FNAME); + n = db_get_job_volume_names(ua->jcr, ua->db, jobid, &VolumeName); bsendmsg(ua, _("Jobid %d used %d Volume(s): %s\n"), jobid, n, VolumeName); - free_pool_memory(VolumeName); - done = true; - } - /* if no job or jobid keyword found, then we list all media */ - if (!done) { - int num_pools; - uint32_t *ids; - /* Is a specific pool wanted? */ - for (i=1; iargc; i++) { + free_pool_memory(VolumeName); + done = true; + } + /* if no job or jobid keyword found, then we list all media */ + if (!done) { + int num_pools; + uint32_t *ids; + /* List a specific volume? */ + if (ua->argv[i]) { + bstrncpy(mr.VolumeName, ua->argv[i], sizeof(mr.VolumeName)); + db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); + return 1; + } + /* Is a specific pool wanted? */ + for (i=1; iargc; i++) { if (strcasecmp(ua->argk[i], N_("pool")) == 0) { - if (!get_pool_dbr(ua, &pr)) { + if (!get_pool_dbr(ua, &pr)) { bsendmsg(ua, _("No Pool specified.\n")); - return 1; - } - mr.PoolId = pr.PoolId; - db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); - return 1; - } - } - /* List Volumes in all pools */ - if (!db_get_pool_ids(ua->jcr, ua->db, &num_pools, &ids)) { + return 1; + } + mr.PoolId = pr.PoolId; + db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); + return 1; + } + } + + /* List Volumes in all pools */ + if (!db_get_pool_ids(ua->jcr, ua->db, &num_pools, &ids)) { bsendmsg(ua, _("Error obtaining pool ids. ERR=%s\n"), - db_strerror(ua->db)); - return 1; - } - if (num_pools <= 0) { - return 1; - } - for (i=0; i < num_pools; i++) { - pr.PoolId = ids[i]; - if (db_get_pool_record(ua->jcr, ua->db, &pr)) { + db_strerror(ua->db)); + return 1; + } + if (num_pools <= 0) { + return 1; + } + for (i=0; i < num_pools; i++) { + pr.PoolId = ids[i]; + if (db_get_pool_record(ua->jcr, ua->db, &pr)) { bsendmsg(ua, _("Pool: %s\n"), pr.Name); - } - mr.PoolId = ids[i]; - db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); - } - free(ids); - return 1; - } - /* List a specific volume */ - } else if (strcasecmp(ua->argk[i], N_("volume")) == 0) { - if (!ua->argv[i]) { - bsendmsg(ua, _("No Volume Name specified.\n")); - return 1; - } - bstrncpy(mr.VolumeName, ua->argv[i], sizeof(mr.VolumeName)); - db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); - return 1; + } + mr.PoolId = ids[i]; + db_list_media_records(ua->jcr, ua->db, &mr, prtit, ua, llist); + } + free(ids); + return 1; + } /* List next volume */ } else if (strcasecmp(ua->argk[i], N_("nextvol")) == 0 || strcasecmp(ua->argk[i], N_("nextvolume")) == 0) { - list_nextvol(ua); + list_nextvol(ua); } else if (strcasecmp(ua->argk[i], N_("limit")) == 0) { - /* Ignore it */ + /* Ignore it */ } else { bsendmsg(ua, _("Unknown list keyword: %s\n"), NPRT(ua->argk[i])); } @@ -426,36 +429,36 @@ static bool list_nextvol(UAContext *ua) int i = find_arg_with_value(ua, "job"); if (i <= 0) { if ((job = select_job_resource(ua)) == NULL) { - return false; + return false; } } else { job = (JOB *)GetResWithName(R_JOB, ua->argv[i]); if (!job) { Jmsg(jcr, M_ERROR, 0, _("%s is not a job name.\n"), ua->argv[i]); - if ((job = select_job_resource(ua)) == NULL) { - return false; - } + if ((job = select_job_resource(ua)) == NULL) { + return false; + } } } for (run=NULL; (run = find_next_run(run, job, runtime)); ) { pool = run->pool ? run->pool : NULL; if (!complete_jcr_for_job(jcr, job, pool)) { - return false; + return false; } mr.PoolId = jcr->PoolId; if (run->storage) { - jcr->store = run->storage; + jcr->store = run->storage; } if (!find_next_volume_for_append(jcr, &mr, 0)) { bsendmsg(ua, _("Could not find next Volume.\n")); } else { bsendmsg(ua, _("The next Volume to be used by Job \"%s\" will be %s\n"), - job->hdr.name, mr.VolumeName); - found = true; + job->hdr.name, mr.VolumeName); + found = true; } if (jcr->db && jcr->db != ua->db) { - db_close_database(jcr, jcr->db); - jcr->db = NULL; + db_close_database(jcr, jcr->db); + jcr->db = NULL; } } if (!found) { @@ -480,8 +483,8 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) int tod, tom; sched = job->schedule; - if (sched == NULL) { /* scheduled? */ - return NULL; /* no nothing to report */ + if (sched == NULL) { /* scheduled? */ + return NULL; /* no nothing to report */ } /* Break down current time into components */ now = time(NULL); @@ -511,12 +514,12 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) * Find runs in next 24 hours */ tod = bit_is_set(mday, run->mday) && bit_is_set(wday, run->wday) && - bit_is_set(month, run->month) && bit_is_set(wom, run->wom) && - bit_is_set(woy, run->woy); + bit_is_set(month, run->month) && bit_is_set(wom, run->wom) && + bit_is_set(woy, run->woy); tom = bit_is_set(tmday, run->mday) && bit_is_set(twday, run->wday) && - bit_is_set(tmonth, run->month) && bit_is_set(twom, run->wom) && - bit_is_set(twoy, run->woy); + bit_is_set(tmonth, run->month) && bit_is_set(twom, run->wom) && + bit_is_set(twoy, run->woy); #ifdef xxx Dmsg2(000, "tod=%d tom=%d\n", tod, tom); @@ -526,52 +529,52 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) Dmsg1(000, "bit_set_wom=%d\n", bit_is_set(wom, run->wom)); Dmsg1(000, "bit_set_woy=%d\n", bit_is_set(woy, run->woy)); #endif - if (tod) { /* Jobs scheduled today (next 24 hours) */ + if (tod) { /* Jobs scheduled today (next 24 hours) */ #ifdef xxx - char buf[300], num[10]; + char buf[300], num[10]; bsnprintf(buf, sizeof(buf), "tm.hour=%d hour=", tm.tm_hour); - for (i=0; i<24; i++) { - if (bit_is_set(i, run->hour)) { + for (i=0; i<24; i++) { + if (bit_is_set(i, run->hour)) { bsnprintf(num, sizeof(num), "%d ", i); - bstrncat(buf, num, sizeof(buf)); - } - } + bstrncat(buf, num, sizeof(buf)); + } + } bstrncat(buf, "\n", sizeof(buf)); Dmsg1(000, "%s", buf); #endif - /* find time (time_t) job is to be run */ - localtime_r(&now, &tm); - for (i=tm.tm_hour; i < 24; i++) { - if (bit_is_set(i, run->hour)) { - tm.tm_hour = i; - tm.tm_min = run->minute; - tm.tm_sec = 0; - runtime = mktime(&tm); + /* find time (time_t) job is to be run */ + localtime_r(&now, &tm); + for (i=tm.tm_hour; i < 24; i++) { + if (bit_is_set(i, run->hour)) { + tm.tm_hour = i; + tm.tm_min = run->minute; + tm.tm_sec = 0; + runtime = mktime(&tm); Dmsg2(200, "now=%d runtime=%d\n", now, runtime); - if (runtime > now) { + if (runtime > now) { Dmsg2(200, "Found it level=%d %c\n", run->level, run->level); - return run; /* found it, return run resource */ - } - } - } + return run; /* found it, return run resource */ + } + } + } } // Dmsg2(200, "runtime=%d now=%d\n", runtime, now); - if (tom) { /* look at jobs scheduled tomorrow */ - localtime_r(&tomorrow, &tm); - for (i=0; i < 24; i++) { - if (bit_is_set(i, run->hour)) { - tm.tm_hour = i; - tm.tm_min = run->minute; - tm.tm_sec = 0; - runtime = mktime(&tm); + if (tom) { /* look at jobs scheduled tomorrow */ + localtime_r(&tomorrow, &tm); + for (i=0; i < 24; i++) { + if (bit_is_set(i, run->hour)) { + tm.tm_hour = i; + tm.tm_min = run->minute; + tm.tm_sec = 0; + runtime = mktime(&tm); Dmsg2(200, "now=%d runtime=%d\n", now, runtime); - if (runtime < tomorrow) { + if (runtime < tomorrow) { Dmsg2(200, "Found it level=%d %c\n", run->level, run->level); - return run; /* found it, return run resource */ - } - } - } + return run; /* found it, return run resource */ + } + } + } } } /* end for loop over runs */ /* Nothing found */ @@ -588,15 +591,15 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) memset(&pr, 0, sizeof(POOL_DBR)); set_jcr_defaults(jcr, job); if (pool) { - jcr->pool = pool; /* override */ + jcr->pool = pool; /* override */ } jcr->db = jcr->db=db_init_database(jcr, jcr->catalog->db_name, jcr->catalog->db_user, - jcr->catalog->db_password, jcr->catalog->db_address, - jcr->catalog->db_port, jcr->catalog->db_socket, - jcr->catalog->mult_db_connections); + jcr->catalog->db_password, jcr->catalog->db_address, + jcr->catalog->db_port, jcr->catalog->db_socket, + jcr->catalog->mult_db_connections); if (!jcr->db || !db_open_database(jcr, jcr->db)) { Jmsg(jcr, M_FATAL, 0, _("Could not open database \"%s\".\n"), - jcr->catalog->db_name); + jcr->catalog->db_name); if (jcr->db) { Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db)); } @@ -607,12 +610,12 @@ int complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) /* Try to create the pool */ if (create_pool(jcr, jcr->db, jcr->pool, POOL_OP_CREATE) < 0) { Jmsg(jcr, M_FATAL, 0, _("Pool %s not in database. %s"), pr.Name, - db_strerror(jcr->db)); - if (jcr->db) { - db_close_database(jcr, jcr->db); - jcr->db = NULL; - } - return 0; + db_strerror(jcr->db)); + if (jcr->db) { + db_close_database(jcr, jcr->db); + jcr->db = NULL; + } + return 0; } else { Jmsg(jcr, M_INFO, 0, _("Pool %s created in database.\n"), pr.Name); } @@ -718,7 +721,7 @@ again: bs->msg = msg; bs->msglen = len; bnet_send(bs); - } else { /* No UA, send to Job */ + } else { /* No UA, send to Job */ Jmsg(ua->jcr, M_INFO, 0, "%s", msg); free_pool_memory(msg); } diff --git a/bacula/src/dird/ua_update.c b/bacula/src/dird/ua_update.c index d8a4d5b161..1cd40e8e16 100644 --- a/bacula/src/dird/ua_update.c +++ b/bacula/src/dird/ua_update.c @@ -98,16 +98,16 @@ int update_cmd(UAContext *ua, const char *cmd) static void update_volstatus(UAContext *ua, const char *val, MEDIA_DBR *mr) { - POOLMEM *query = get_pool_memory(PM_MESSAGE); + POOL_MEM query(PM_MESSAGE); const char *kw[] = { - _("Append"), - _("Archive"), - _("Disabled"), - _("Full"), - _("Used"), - _("Cleaning"), - _("Recycle"), - _("Read-Only"), + N_("Append"), + N_("Archive"), + N_("Disabled"), + N_("Full"), + N_("Used"), + N_("Cleaning"), + N_("Recycle"), + N_("Read-Only"), NULL}; bool found = false; int i; @@ -125,54 +125,49 @@ static void update_volstatus(UAContext *ua, const char *val, MEDIA_DBR *mr) bstrncpy(mr->VolStatus, kw[i], sizeof(mr->VolStatus)); Mmsg(query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%s", mr->VolStatus, edit_int64(mr->MediaId,ed1)); - if (!db_sql_query(ua->db, query, NULL, NULL)) { + if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) { bsendmsg(ua, "%s", db_strerror(ua->db)); } else { bsendmsg(ua, _("New Volume status is: %s\n"), mr->VolStatus); } } - free_pool_memory(query); } static void update_volretention(UAContext *ua, char *val, MEDIA_DBR *mr) { char ed1[150], ed2[50]; - POOLMEM *query; + POOL_MEM query(PM_MESSAGE); if (!duration_to_utime(val, &mr->VolRetention)) { bsendmsg(ua, _("Invalid retention period specified: %s\n"), val); return; } - query = get_pool_memory(PM_MESSAGE); Mmsg(query, "UPDATE Media SET VolRetention=%s WHERE MediaId=%s", edit_uint64(mr->VolRetention, ed1), edit_int64(mr->MediaId,ed2)); - if (!db_sql_query(ua->db, query, NULL, NULL)) { + if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) { bsendmsg(ua, "%s", db_strerror(ua->db)); } else { bsendmsg(ua, _("New retention period is: %s\n"), edit_utime(mr->VolRetention, ed1, sizeof(ed1))); } - free_pool_memory(query); } static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr) { char ed1[150], ed2[50]; - POOLMEM *query; + POOL_MEM query(PM_MESSAGE); if (!duration_to_utime(val, &mr->VolUseDuration)) { bsendmsg(ua, _("Invalid use duration specified: %s\n"), val); return; } - query = get_pool_memory(PM_MESSAGE); Mmsg(query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%s", edit_uint64(mr->VolUseDuration, ed1), edit_int64(mr->MediaId,ed2)); - if (!db_sql_query(ua->db, query, NULL, NULL)) { + if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) { bsendmsg(ua, "%s", db_strerror(ua->db)); } else { bsendmsg(ua, _("New use duration is: %s\n"), edit_utime(mr->VolUseDuration, ed1, sizeof(ed1))); } - free_pool_memory(query); } static void update_volmaxjobs(UAContext *ua, char *val, MEDIA_DBR *mr) @@ -289,7 +284,7 @@ static void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *o /* * Refresh the Volume information from the Pool record */ -static void update_volfrompool(UAContext *ua, MEDIA_DBR *mr) +static void update_vol_from_pool(UAContext *ua, MEDIA_DBR *mr) { POOL_DBR pr; @@ -397,7 +392,7 @@ static int update_volume(UAContext *ua) update_vol_pool(ua, ua->argv[j], &mr, &pr); break; case 8: - update_volfrompool(ua, &mr); + update_vol_from_pool(ua, &mr); return 1; case 9: update_all_vols_from_pool(ua); @@ -432,16 +427,16 @@ static int update_volume(UAContext *ua) /* Modify Volume Status */ bsendmsg(ua, _("Current Volume status is: %s\n"), mr.VolStatus); start_prompt(ua, _("Possible Values are:\n")); - add_prompt(ua, _("Append")); - add_prompt(ua, _("Archive")); - add_prompt(ua, _("Disabled")); - add_prompt(ua, _("Full")); - add_prompt(ua, _("Used")); - add_prompt(ua, _("Cleaning")); - if (strcmp(mr.VolStatus, _("Purged")) == 0) { - add_prompt(ua, _("Recycle")); + 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, _("Read-Only")); + add_prompt(ua, N_("Read-Only")); if (do_prompt(ua, "", _("Choose new Volume Status"), ua->cmd, sizeof(mr.VolStatus)) < 0) { return 1; } @@ -589,7 +584,7 @@ static int update_volume(UAContext *ua) return 1; case 11: - update_volfrompool(ua, &mr); + update_vol_from_pool(ua, &mr); return 1; case 12: update_all_vols_from_pool(ua); diff --git a/bacula/src/version.h b/bacula/src/version.h index 28e2fb63b6..0401067b55 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -4,8 +4,8 @@ #undef VERSION #define VERSION "1.37.37" -#define BDATE "24 August 2005" -#define LSMDATE "24Aug05" +#define BDATE "28 August 2005" +#define LSMDATE "28Aug05" /* Debug flags */ #undef DEBUG diff --git a/bacula/src/win32/compat/compat.h b/bacula/src/win32/compat/compat.h index 492cb2b0e9..2fe7a41909 100644 --- a/bacula/src/win32/compat/compat.h +++ b/bacula/src/win32/compat/compat.h @@ -143,9 +143,9 @@ typedef UINT32 gid_t; typedef UINT32 uid_t; typedef UINT32 gid_t; typedef UINT32 mode_t; -#ifndef _WX_DEFS_H_ /* ssize_t is defined in wx/defs.h */ +/* #ifndef _WX_DEFS_H_ ssize_t is defined in wx/defs.h */ typedef INT64 ssize_t; -#endif +/* #endif */ #endif //HAVE_MINGW struct dirent { -- 2.39.5