-/*
- * Write a Volume Label
- * !!! Note, this is ONLY used for writing
- * a fresh volume label. Any data
- * after the label will be destroyed,
- * in fact, we write the label 5 times !!!!
- *
- * This routine expects that open_device() was previously called.
- *
- * This routine should be used only when labeling a blank tape.
- */
-int write_volume_label_to_dev(JCR *jcr, DEVRES *device, char *VolName, char *PoolName)
-{
- DEVICE *dev = device->dev;
- DEV_RECORD rec;
- DEV_BLOCK *block;
- int stat = 1;
-
-
- Dmsg0(99, "write_volume_label()\n");
- create_volume_label(dev, VolName, PoolName);
-
- if (!rewind_dev(dev)) {
- memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
- Dmsg2(30, "Bad status on %s from rewind. ERR=%s\n", dev_name(dev), strerror_dev(dev));
- if (!forge_on) {
- return 0;
- }
- }
-
- block = new_block(dev);
- memset(&rec, 0, sizeof(rec));
- rec.data = get_memory(SER_LENGTH_Volume_Label);
- create_volume_label_record(jcr, dev, &rec);
- rec.Stream = 0;
-
- if (!write_record_to_block(block, &rec)) {
- Dmsg2(30, "Bad Label write on %s. ERR=%s\n", dev_name(dev), strerror_dev(dev));
- memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
- free_block(block);
- free_pool_memory(rec.data);
- return 0;
- } else {
- Dmsg2(30, "Wrote label of %d bytes to %s\n", rec.data_len, dev_name(dev));
- }
- free_pool_memory(rec.data);
-
- Dmsg0(99, "Call write_block_to_dev()\n");
- if (!write_block_to_dev(jcr->dcr, block)) {
- memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
- Dmsg2(30, "Bad Label write on %s. ERR=%s\n", dev_name(dev), strerror_dev(dev));
- stat = 9;
- }
- Dmsg0(99, " Wrote block to device\n");
-
- flush_dev(dev);
- weof_dev(dev, 1);
- dev->state |= ST_LABEL;
-
- if (debug_level >= 20) {
- dump_volume_label(dev);
- }
- free_block(block);
- return stat;
-}
-
-