]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_output.c
kes Simplify locking in the reservations system.
[bacula/bacula] / bacula / src / dird / ua_output.c
index 3d03199f12437164706f76732cf634acb14cef33..e6d77d67eb3384075e026380d6dd80278df27085 100644 (file)
@@ -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);
+}