X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fread.c;h=b6f5525c07eea1215cb05fa3bea84c97aad21107;hb=7503a438c87931cf1748bd0fda3bb932e2af3346;hp=0e7dbeb8caf262036f85ffd107cade06d04a96f1;hpb=d8d6b1553da4e6e101e95112458c72da39b8381a;p=bacula%2Fbacula diff --git a/bacula/src/stored/read.c b/bacula/src/stored/read.c index 0e7dbeb8ca..b6f5525c07 100644 --- a/bacula/src/stored/read.c +++ b/bacula/src/stored/read.c @@ -6,7 +6,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2003 Kern Sibbald and John Walker + 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 as @@ -29,7 +29,7 @@ #include "stored.h" /* Forward referenced subroutines */ -static int record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec); +static bool record_cb(DCR *dcr, DEV_RECORD *rec); /* Responses sent to the File daemon */ @@ -37,82 +37,72 @@ static char OK_data[] = "3000 OK data\n"; static char FD_error[] = "3000 error\n"; static char rec_header[] = "rechdr %ld %ld %ld %ld %ld"; -/* +/* * Read Data and send to File Daemon - * Returns: 0 on failure - * 1 on success + * Returns: false on failure + * true on success */ -int do_read_data(JCR *jcr) +bool do_read_data(JCR *jcr) { BSOCK *fd = jcr->file_bsock; - int ok = TRUE; - DEVICE *dev; - DEV_BLOCK *block; - DCR *dcr; - - Dmsg0(20, "Start read data.\n"); - - dev = jcr->device->dev; + bool ok = true; + DCR *dcr = jcr->dcr; - Dmsg1(10, "bstored>filed: %s\n", fd->msg); + Dmsg0(20, "Start read data.\n"); - if (!bnet_set_buffer_size(fd, jcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { - return 0; + if (!bnet_set_buffer_size(fd, dcr->device->max_network_buffer_size, BNET_SETBUF_WRITE)) { + return false; } - Dmsg1(20, "Begin read device=%s\n", dev_name(dev)); - create_vol_list(jcr); if (jcr->NumVolumes == 0) { Jmsg(jcr, M_FATAL, 0, _("No Volume names found for restore.\n")); free_vol_list(jcr); bnet_fsend(fd, FD_error); - return 0; + return false; } - Dmsg2(200, "Found %d volumes names to restore. First=%s\n", jcr->NumVolumes, + Dmsg2(200, "Found %d volumes names to restore. First=%s\n", jcr->NumVolumes, jcr->VolList->VolumeName); - pm_strcpy(&jcr->VolumeName, jcr->VolList->VolumeName); - - /* - * Ready device for reading, and read records - */ - if (!acquire_device_for_read(jcr)) { + /* Ready device for reading */ + if (!acquire_device_for_read(jcr, dcr->dev)) { free_vol_list(jcr); - return 0; + bnet_fsend(fd, FD_error); + return false; } - block = dcr->block; - /* Tell File daemon we will send data */ bnet_fsend(fd, OK_data); - ok = read_records(jcr, dev, record_cb, mount_next_read_volume); + ok = read_records(dcr, record_cb, mount_next_read_volume); /* Send end of data to FD */ bnet_sig(fd, BNET_EOD); - if (!release_device(jcr)) { - ok = FALSE; + if (!release_device(dcr)) { + ok = false; } - + free_vol_list(jcr); Dmsg0(30, "Done reading.\n"); - return ok ? 1 : 0; + return ok; } /* * Called here for each record from read_records() + * Returns: true if OK + * false if error */ -static int record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) +static bool record_cb(DCR *dcr, DEV_RECORD *rec) { + JCR *jcr = dcr->jcr; BSOCK *fd = jcr->file_bsock; - int ok = TRUE; + bool ok = true; POOLMEM *save_msg; if (rec->FileIndex < 0) { - return 1; + return true; } Dmsg5(100, "Send to FD: SessId=%u SessTim=%u FI=%d Strm=%d, len=%d\n", rec->VolSessionId, rec->VolSessionTime, rec->FileIndex, rec->Stream, @@ -124,9 +114,9 @@ static int record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) Dmsg1(30, ">filed: Error Hdr=%s\n", fd->msg); Jmsg1(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), bnet_strerror(fd)); - return FALSE; + return false; } else { - Dmsg1(30, ">filed: Hdr=%s\n", fd->msg); + Dmsg1(31, ">filed: Hdr=%s\n", fd->msg); } @@ -134,13 +124,13 @@ static int record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec) save_msg = fd->msg; /* save fd message pointer */ fd->msg = rec->data; /* pass data directly to bnet_send */ fd->msglen = rec->data_len; - Dmsg1(30, ">filed: send %d bytes data.\n", fd->msglen); + Dmsg1(31, ">filed: send %d bytes data.\n", fd->msglen); if (!bnet_send(fd)) { Pmsg1(000, "Error sending to FD. ERR=%s\n", bnet_strerror(fd)); Jmsg1(jcr, M_FATAL, 0, _("Error sending to File daemon. ERR=%s\n"), bnet_strerror(fd)); - ok = FALSE; + ok = false; } fd->msg = save_msg; /* restore fd message pointer */ return ok;