X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_output.c;h=e6d77d67eb3384075e026380d6dd80278df27085;hb=b8224aab234012c2d127b84eceb160e99dd4a14d;hp=3d03199f12437164706f76732cf634acb14cef33;hpb=556161f68a5ac813546c6b273269df96e4cf36bc;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index 3d03199f12..e6d77d67eb 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -447,7 +447,6 @@ static bool list_nextvol(UAContext *ua, int ndays) { JOB *job; JCR *jcr = ua->jcr; - POOL *pool; USTORE store; RUN *run; time_t runtime; @@ -471,19 +470,18 @@ static bool list_nextvol(UAContext *ua, int ndays) } } for (run=NULL; (run = find_next_run(run, job, runtime, ndays)); ) { - pool = run->pool ? run->pool : NULL; - if (!complete_jcr_for_job(jcr, job, pool)) { + if (!complete_jcr_for_job(jcr, job, run->pool)) { return false; } memset(&pr, 0, sizeof(pr)); pr.PoolId = jcr->jr.PoolId; - if (! db_get_pool_record(ua->jcr, ua->db, &pr)) { + if (!db_get_pool_record(ua->jcr, ua->db, &pr)) { bstrncpy(pr.Name, "*UnknownPool*", sizeof(pr.Name)); } mr.PoolId = jcr->jr.PoolId; get_job_storage(&store, job, run); mr.StorageId = store.store->StorageId; - if (!find_next_volume_for_append(jcr, &mr, 1, false/*no create*/)) { + if (!find_next_volume_for_append(jcr, &mr, 1, fnv_no_create_vol, fnv_prune)) { bsendmsg(ua, _("Could not find next Volume for Job %s (%s, %s).\n"), job->hdr.name, pr.Name, level_to_str(run->level)); } else { @@ -629,7 +627,7 @@ bool complete_jcr_for_job(JCR *jcr, JOB *job, POOL *pool) } return false; } - bstrncpy(pr.Name, jcr->pool->hdr.name, sizeof(pr.Name)); + bstrncpy(pr.Name, jcr->pool->name(), sizeof(pr.Name)); while (!db_get_pool_record(jcr, jcr->db, &pr)) { /* get by Name */ /* Try to create the pool */ if (create_pool(jcr, jcr->db, jcr->pool, POOL_OP_CREATE) < 0) { @@ -716,10 +714,8 @@ void prtit(void *ctx, const char *msg) * agent, so we are being called from Bacula core. In * that case direct the messages to the Job. */ -void bsendmsg(void *ctx, const char *fmt, ...) +void bmsg(UAContext *ua, const char *fmt, va_list arg_ptr) { - va_list arg_ptr; - UAContext *ua = (UAContext *)ctx; BSOCK *bs = ua->UA_sock; int maxlen, len; POOLMEM *msg; @@ -732,9 +728,7 @@ void bsendmsg(void *ctx, const char *fmt, ...) again: maxlen = sizeof_pool_memory(msg) - 1; - va_start(arg_ptr, fmt); len = bvsnprintf(msg, maxlen, fmt, arg_ptr); - va_end(arg_ptr); if (len < 0 || len >= maxlen) { msg = realloc_pool_memory(msg, maxlen + maxlen/2); goto again; @@ -750,3 +744,71 @@ again: } } + +void bsendmsg(void *ctx, const char *fmt, ...) +{ + va_list arg_ptr; + va_start(arg_ptr, fmt); + bmsg((UAContext *)ctx, fmt, arg_ptr); + va_end(arg_ptr); +} + +/* + * The following UA methods are mainly intended for GUI + * programs + */ +/* + * This is a message that should be displayed on the user's + * console. + */ +void UAContext::send_msg(const char *fmt, ...) +{ + va_list arg_ptr; + va_start(arg_ptr, fmt); + bmsg(this, fmt, arg_ptr); + va_end(arg_ptr); +} + + +/* + * This is an error condition with a command. The gui should put + * up an error or critical dialog box. The command is aborted. + */ +void UAContext::error_msg(const char *fmt, ...) +{ + BSOCK *bs = UA_sock; + va_list arg_ptr; + va_start(arg_ptr, fmt); + if (bs && api) bs->signal(BNET_ERROR_MSG); + bmsg(this, fmt, arg_ptr); + va_end(arg_ptr); +} + +/* + * This is a warning message, that should bring up a warning + * dialog box on the GUI. The command is not aborted, but something + * went wrong. + */ +void UAContext::warning_msg(const char *fmt, ...) +{ + BSOCK *bs = UA_sock; + va_list arg_ptr; + va_start(arg_ptr, fmt); + if (bs && api) bs->signal(BNET_WARNING_MSG); + bmsg(this, fmt, arg_ptr); + va_end(arg_ptr); +} + +/* + * This is an information message that should probably be put + * into the status line of a GUI program. + */ +void UAContext::info_msg(const char *fmt, ...) +{ + BSOCK *bs = UA_sock; + va_list arg_ptr; + va_start(arg_ptr, fmt); + if (bs && api) bs->signal(BNET_INFO_MSG); + bmsg(this, fmt, arg_ptr); + va_end(arg_ptr); +}