+ pr.NumVols++;
+ mr->Enabled = 1;
+ 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 true;
+ } else {
+ Jmsg(jcr, M_ERROR, 0, "%s", db_strerror(jcr->db));
+ }
+ }
+bail_out:
+ db_unlock(jcr->db);
+ return false;
+}
+
+static bool create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
+{
+ char name[MAXSTRING];
+ char num[20];
+
+ /* See if volume already exists */
+ mr->VolumeName[0] = 0;
+ bstrncpy(name, pr->LabelFormat, sizeof(name));
+ for (int i=pr->NumVols+1; i<(int)pr->NumVols+11; i++) {
+ MEDIA_DBR tmr;
+ memset(&tmr, 0, sizeof(tmr));
+ sprintf(num, "%04d", i);
+ 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"),
+ tmr.VolumeName);
+ continue;
+ }
+ bstrncpy(mr->VolumeName, name, sizeof(mr->VolumeName));
+ bstrncat(mr->VolumeName, num, sizeof(mr->VolumeName));
+ break; /* Got good name */
+ }
+ if (mr->VolumeName[0] == 0) {
+ Jmsg(jcr, M_ERROR, 0, _("Too many failures. Giving up creating Volume name.\n"));
+ return false;
+ }
+ return true;
+}
+
+/*
+ * Perform full substitution on Label
+ */
+static bool perform_full_name_substitution(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
+{
+ bool ok = false;
+ POOLMEM *label = get_pool_memory(PM_FNAME);
+ jcr->NumVols = pr->NumVols;
+ if (variable_expansion(jcr, pr->LabelFormat, &label)) {
+ bstrncpy(mr->VolumeName, label, sizeof(mr->VolumeName));
+ ok = true;