+ return false;
+}
+
+static bool create_simple_name(JCR *jcr, MEDIA_DBR *mr, POOL_DBR *pr)
+{
+ char name[MAXSTRING];
+ char num[20];
+ db_int64_ctx ctx;
+ POOL_MEM query(PM_MESSAGE);
+ char ed1[50];
+
+ /* See if volume already exists */
+ mr->VolumeName[0] = 0;
+ bstrncpy(name, pr->LabelFormat, sizeof(name));
+ ctx.value = 0;
+ Mmsg(query, "SELECT MAX(MediaId) FROM Media,Pool WHERE Pool.PoolId=%s",
+ edit_int64(pr->PoolId, ed1));
+ if (!db_sql_query(jcr->db, query.c_str(), db_int64_handler, (void *)&ctx)) {
+ Jmsg(jcr, M_WARNING, 0, _("SQL failed, but ignored. ERR=%s\n"), db_strerror(jcr->db));
+ ctx.value = pr->NumVols+1;
+ }
+ for (int i=(int)ctx.value+1; i<(int)ctx.value+100; 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;
+ }
+ free_pool_memory(label);
+ return ok;