X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device-src%2Fxfer-source-recovery.c;h=4f736a21a61e4684477be2c8bb215a30c759f7d9;hb=b221e8dc16f345f8c8d7df8df71f4d36daaabb4c;hp=da2813473ebbdc9f3bb3efeae70c3b141f71b8ac;hpb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;p=debian%2Famanda diff --git a/device-src/xfer-source-recovery.c b/device-src/xfer-source-recovery.c index da28134..4f736a2 100644 --- a/device-src/xfer-source-recovery.c +++ b/device-src/xfer-source-recovery.c @@ -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);