/* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 2009-2012 Zmanda, Inc. All Rights Reserved. * Copyright (c) 2013-2016 Carbonite, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * 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 General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Contact information: Carbonite Inc., 756 N Pastoria Ave * Sunnyvale, CA 94085, or: http://www.zmanda.com */ #include "amanda.h" #include "xfer-device.h" static GObjectClass *parent_class = NULL; /* * Method implementation */ static void cache_inform_impl( XferDestTaper *self G_GNUC_UNUSED, const char *filename G_GNUC_UNUSED, off_t offset G_GNUC_UNUSED, off_t length G_GNUC_UNUSED) { /* do nothing */ } static void instance_init( XferElement *elt) { elt->can_generate_eof = FALSE; } static void class_init( XferDestTaperClass * selfc) { XferElementClass *klass = XFER_ELEMENT_CLASS(selfc); selfc->cache_inform = cache_inform_impl; klass->perl_class = "Amanda::Xfer::Dest::Taper"; parent_class = g_type_class_peek_parent(selfc); } GType xfer_dest_taper_get_type (void) { static GType type = 0; if (G_UNLIKELY(type == 0)) { static const GTypeInfo info = { sizeof (XferDestTaperClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) class_init, (GClassFinalizeFunc) NULL, NULL /* class_data */, sizeof (XferDestTaper), 0 /* n_preallocs */, (GInstanceInitFunc) instance_init, NULL }; type = g_type_register_static (XFER_ELEMENT_TYPE, "XferDestTaper", &info, 0); } return type; } /* * Method stubs */ void xfer_dest_taper_start_part( XferElement *elt, gboolean retry_part, dumpfile_t *header) { XferDestTaperClass *klass; g_assert(IS_XFER_DEST_TAPER(elt)); klass = XFER_DEST_TAPER_GET_CLASS(elt); klass->start_part(XFER_DEST_TAPER(elt), retry_part, header); } void xfer_dest_taper_use_device( XferElement *elt, Device *device) { XferDestTaperClass *klass; g_assert(IS_XFER_DEST_TAPER(elt)); klass = XFER_DEST_TAPER_GET_CLASS(elt); klass->use_device(XFER_DEST_TAPER(elt), device); } void xfer_dest_taper_cache_inform( XferElement *elt, const char *filename, off_t offset, off_t length) { XferDestTaperClass *klass; g_assert(IS_XFER_DEST_TAPER(elt)); klass = XFER_DEST_TAPER_GET_CLASS(elt); klass->cache_inform(XFER_DEST_TAPER(elt), filename, offset, length); } guint64 xfer_dest_taper_get_part_bytes_written( XferElement *elt G_GNUC_UNUSED) { XferDestTaperClass *klass; g_assert(IS_XFER_DEST_TAPER(elt)); klass = XFER_DEST_TAPER_GET_CLASS(elt); if (klass->get_part_bytes_written) return klass->get_part_bytes_written(XFER_DEST_TAPER(elt)); else return 0; } void xfer_dest_taper_new_space_available( XferElement *elt, int made_space) { XferDestTaperClass *klass; g_assert(IS_XFER_DEST_TAPER(elt)); klass = XFER_DEST_TAPER_GET_CLASS(elt); if (klass->new_space_available) klass->new_space_available(XFER_DEST_TAPER(elt), made_space); }