static void display_vol_info(UAContext *ua, RESTORE_CTX &rx, JobId_t JobId) { int i; RBSR *bsr; char online; POOL_MEM volmsg(PM_MESSAGE); char Device[MAX_NAME_LENGTH]; for (bsr = rx.bsr; bsr; bsr = bsr->next) { if (JobId && JobId != bsr->JobId) { continue; } for (i = 0; i < bsr->VolCount; i++) { if (bsr->VolParams[i].VolumeName[0]) { if (!get_storage_device(Device, bsr->VolParams[i].Storage)) { Device[0] = 0; } if (bsr->VolParams[i].InChanger && bsr->VolParams[i].Slot) { online = '*'; } else { online = ' '; } Mmsg(volmsg, "%c%-25s %-25s %-25s", online, bsr->VolParams[i].VolumeName, bsr->VolParams[i].Storage, Device); add_prompt(ua, volmsg.c_str()); } } } }
/* * Write bsr data for a single bsr record */ static uint32_t write_bsr_item(RBSR *bsr, UAContext *ua, RESTORE_CTX &rx, FILE *fd, bool &first, uint32_t &LastIndex) { char ed1[50], ed2[50]; uint32_t count = 0; uint32_t total_count = 0; char device[MAX_NAME_LENGTH]; /* * For a given volume, loop over all the JobMedia records. * VolCount is the number of JobMedia records. */ for (int i=0; i < bsr->VolCount; i++) { if (!is_volume_selected(bsr->fi, bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex)) { bsr->VolParams[i].VolumeName[0] = 0; /* zap VolumeName */ continue; } if (!rx.store) { find_storage_resource(ua, rx, bsr->VolParams[i].Storage, bsr->VolParams[i].MediaType); } fprintf(fd, "Storage=\"%s\"\n", bsr->VolParams[i].Storage); fprintf(fd, "Volume=\"%s\"\n", bsr->VolParams[i].VolumeName); fprintf(fd, "MediaType=\"%s\"\n", bsr->VolParams[i].MediaType); if (bsr->fileregex) { fprintf(fd, "FileRegex=%s\n", bsr->fileregex); } if (get_storage_device(device, bsr->VolParams[i].Storage)) { fprintf(fd, "Device=\"%s\"\n", device); } if (bsr->VolParams[i].Slot > 0) { fprintf(fd, "Slot=%d\n", bsr->VolParams[i].Slot); } fprintf(fd, "VolSessionId=%u\n", bsr->VolSessionId); fprintf(fd, "VolSessionTime=%u\n", bsr->VolSessionTime); fprintf(fd, "VolAddr=%s-%s\n", edit_uint64(bsr->VolParams[i].StartAddr, ed1), edit_uint64(bsr->VolParams[i].EndAddr, ed2)); // Dmsg2(100, "bsr VolParam FI=%u LI=%u\n", // bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex); count = write_findex(bsr->fi, bsr->VolParams[i].FirstIndex, bsr->VolParams[i].LastIndex, fd); if (count) { fprintf(fd, "Count=%u\n", count); } total_count += count; /* If the same file is present on two tapes or in two files * on a tape, it is a continuation, and should not be treated * twice in the totals. */ if (!first && LastIndex == bsr->VolParams[i].FirstIndex) { total_count--; } first = false; LastIndex = bsr->VolParams[i].LastIndex; } return total_count; }