X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fbutil.c;h=8d1f9c33a88c4b51e8c62909097582bdeb54026f;hb=454922b66d136e5df091174637488a714567e541;hp=92923e03e647be89fc41b00e5ed90f8767928265;hpb=4403125c14580e21632c9d917b2e7f47d6a79627;p=bacula%2Fbacula diff --git a/bacula/src/stored/butil.c b/bacula/src/stored/butil.c index 92923e03e6..8d1f9c33a8 100644 --- a/bacula/src/stored/butil.c +++ b/bacula/src/stored/butil.c @@ -1,3 +1,30 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2010 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ /* * * Utility routines for "tool" programs such as bscan, bls, @@ -11,20 +38,6 @@ * * Version $Id$ */ -/* - Copyright (C) 2000-2005 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ #include "bacula.h" #include "stored.h" @@ -76,10 +89,11 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, jcr->bsr = bsr; jcr->VolSessionId = 1; jcr->VolSessionTime = (uint32_t)time(NULL); - jcr->NumVolumes = 0; + jcr->NumReadVolumes = 0; + jcr->NumWriteVolumes = 0; jcr->JobId = 0; - jcr->JobType = JT_CONSOLE; - jcr->JobLevel = L_FULL; + jcr->setJobType(JT_CONSOLE); + jcr->setJobLevel(L_FULL); jcr->JobStatus = JS_Terminated; jcr->where = bstrdup(""); jcr->job_name = get_pool_memory(PM_FNAME); @@ -91,8 +105,10 @@ JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr, pm_strcpy(jcr->fileset_name, "Dummy.fileset.name"); jcr->fileset_md5 = get_pool_memory(PM_FNAME); pm_strcpy(jcr->fileset_md5, "Dummy.fileset.md5"); - + jcr->comment = get_pool_memory(PM_MESSAGE); + *jcr->comment = '\0'; init_autochangers(); + create_volume_lists(); dcr = setup_to_access_device(jcr, dev_name, VolumeName, mode); if (!dcr) { @@ -120,6 +136,8 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, DCR *dcr; char VolName[MAX_NAME_LENGTH]; + init_reservations_lock(); + /* * If no volume name already given and no bsr, and it is a file, * try getting name from Filename @@ -137,9 +155,9 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, /* Try stripping file part */ p = dev_name + strlen(dev_name); - while (p >= dev_name && *p != '/') + while (p >= dev_name && !IsPathSeparator(*p)) p--; - if (*p == '/') { + if (IsPathSeparator(*p)) { bstrncpy(VolName, p+1, sizeof(VolName)); *p = 0; } @@ -158,7 +176,7 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, return NULL; } device->dev = dev; - dcr = new_dcr(jcr, dev); + jcr->dcr = dcr = new_dcr(jcr, NULL, dev); if (VolName[0]) { bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName)); } @@ -171,11 +189,13 @@ static DCR *setup_to_access_device(JCR *jcr, char *dev_name, if (!acquire_device_for_read(dcr)) { return NULL; } + jcr->read_dcr = dcr; } else { if (!first_open_device(dcr)) { Jmsg1(jcr, M_FATAL, 0, _("Cannot open %s\n"), dev->print_name()); return NULL; } + jcr->dcr = dcr; /* write dcr */ } return dcr; } @@ -203,6 +223,10 @@ static void my_free_jcr(JCR *jcr) free_pool_memory(jcr->fileset_md5); jcr->fileset_md5 = NULL; } + if (jcr->comment) { + free_pool_memory(jcr->comment); + jcr->comment = NULL; + } if (jcr->VolList) { free_restore_volume_list(jcr); }