Imported Upstream version 3.3.0
[debian/amanda] / device-src / xfer-source-recovery.c
index da2813473ebbdc9f3bb3efeae70c3b141f71b8ac..4f736a21a61e4684477be2c8bb215a30c759f7d9 100644 (file)
@@ -82,6 +82,8 @@ typedef struct XferSourceRecovery {
 
     /* timer for the duration; NULL while paused or cancelled */
     GTimer *part_timer;
+
+    gint64   size;
 } XferSourceRecovery;
 
 /*
@@ -438,6 +440,26 @@ pull_buffer_impl(
 
     g_mutex_unlock(self->start_part_mutex);
 
+    if (elt->size > 0) {
+       /* initialize on first pass */
+       if (self->size == 0)
+           self->size = elt->size;
+       
+       if (self->size == -1) {
+           *size = 0;
+           amfree(buf);
+           return NULL;
+       }
+
+       if (*size > (guint64)self->size) {
+           /* return only self->size bytes */
+           *size = self->size;
+           self->size = -1;
+       } else {
+           self->size -= *size;
+       }
+    }
+
     return buf;
 error:
     g_mutex_unlock(self->start_part_mutex);