]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/newvol.c
Apply Preben 'Peppe' Guldberg <peppe@wielders.org>
[bacula/bacula] / bacula / src / dird / newvol.c
index 40c21127d7e42a78aaf4f959bb591f453e106b0b..2475f00502ec75c4463d98dd68002be9e1f3420b 100644 (file)
@@ -13,7 +13,7 @@
  *   Version $Id$
  */
 /*
-   Copyright (C) 2000-2003 Kern Sibbald and John Walker
+   Copyright (C) 2001-2004 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -43,7 +43,7 @@ static int perform_full_name_substitution(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
 /*
  * Automatic Volume name creation using the LabelFormat
  */
-int newVolume(JCR *jcr, MEDIA_DBR *mr)
+bool newVolume(JCR *jcr, MEDIA_DBR *mr)
 {
    POOL_DBR pr;
 
@@ -57,20 +57,23 @@ int newVolume(JCR *jcr, MEDIA_DBR *mr)
       if (pr.MaxVols == 0 || pr.NumVols < pr.MaxVols) {
         memset(mr, 0, sizeof(MEDIA_DBR));
         set_pool_dbr_defaults_in_media_dbr(mr, &pr);
+        jcr->VolumeName[0] = 0;
         bstrncpy(mr->MediaType, jcr->store->media_type, sizeof(mr->MediaType));
+        if (generate_event(jcr, "NewVolume") == 1 && jcr->VolumeName[0]) {
+           bstrncpy(mr->VolumeName, jcr->VolumeName, sizeof(mr->VolumeName));
         /* Check for special characters */
-        if (is_volume_name_legal(NULL, pr.LabelFormat)) {
+        } else if (is_volume_name_legal(NULL, pr.LabelFormat)) {
            /* No special characters, so apply simple algorithm */
            if (!create_simple_name(jcr, mr, &pr)) {
               goto bail_out;
            }
         } else {  /* try full substitution */
            /* Found special characters, so try substitution */
-           if (!perform_full_name_substitution(jcr, mr, &pr)) { 
+           if (!perform_full_name_substitution(jcr, mr, &pr)) {
               goto bail_out;
            }
            if (!is_volume_name_legal(NULL, mr->VolumeName)) {
-               Jmsg(jcr, M_ERROR, 0, _("Illegal character in Volume name \"%s\"\n"),
+              Jmsg(jcr, M_ERROR, 0, _("Illegal character in Volume name \"%s\"\n"),
                  mr->VolumeName);
               goto bail_out;
            }
@@ -79,17 +82,17 @@ int newVolume(JCR *jcr, MEDIA_DBR *mr)
         if (db_create_media_record(jcr, jcr->db, mr) &&
            db_update_pool_record(jcr, jcr->db, &pr)) {
            db_unlock(jcr->db);
-            Jmsg(jcr, M_INFO, 0, _("Created new Volume \"%s\" in catalog.\n"), mr->VolumeName);
-            Dmsg1(90, "Created new Volume=%s\n", mr->VolumeName);
-           return 1;
+           Jmsg(jcr, M_INFO, 0, _("Created new Volume \"%s\" in catalog.\n"), mr->VolumeName);
+           Dmsg1(90, "Created new Volume=%s\n", mr->VolumeName);
+           return true;
         } else {
-            Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db));
+           Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db));
         }
       }
    }
 bail_out:
    db_unlock(jcr->db);
-   return 0;   
+   return false;
 }
 
 static int create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
@@ -107,8 +110,8 @@ static int create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
       bstrncpy(tmr.VolumeName, name, sizeof(tmr.VolumeName));
       bstrncat(tmr.VolumeName, num, sizeof(tmr.VolumeName));
       if (db_get_media_record(jcr, jcr->db, &tmr)) {
-        Jmsg(jcr, M_WARNING, 0, 
-             _("Wanted to create Volume \"%s\", but it already exists. Trying again.\n"), 
+        Jmsg(jcr, M_WARNING, 0,
+            _("Wanted to create Volume \"%s\", but it already exists. Trying again.\n"),
             tmr.VolumeName);
         continue;
       }