summaryrefslogtreecommitdiffstats
path: root/tarWrite.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tarWrite.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/tarWrite.c b/tarWrite.c
index 98fa14cad..98461452a 100644
--- a/tarWrite.c
+++ b/tarWrite.c
@@ -28,6 +28,8 @@ unsigned char *write_buffer;
unsigned buffer_size = 4096;
unsigned buffer_loc = 0;
int buffer_status = 0;
+int prog_pipe = -1;
+const unsigned long long progress_size = (unsigned long long)(T_BLOCKSIZE);
void reinit_libtar_buffer(void) {
flush = 0;
@@ -36,18 +38,20 @@ void reinit_libtar_buffer(void) {
buffer_status = 1;
}
-void init_libtar_buffer(unsigned new_buff_size) {
+void init_libtar_buffer(unsigned new_buff_size, int pipe_fd) {
if (new_buff_size != 0)
buffer_size = new_buff_size;
reinit_libtar_buffer();
write_buffer = (unsigned char*) malloc(sizeof(char *) * buffer_size);
+ prog_pipe = pipe_fd;
}
void free_libtar_buffer(void) {
if (buffer_status > 0)
free(write_buffer);
buffer_status = 0;
+ prog_pipe = -1;
}
ssize_t write_libtar_buffer(int fd, const void *buffer, size_t size) {
@@ -79,6 +83,8 @@ ssize_t write_libtar_buffer(int fd, const void *buffer, size_t size) {
buffer_loc = 0;
return -1;
} else {
+ unsigned long long fs = (unsigned long long)(buffer_loc);
+ write(prog_pipe, &fs, sizeof(fs));
buffer_loc = 0;
return size;
}
@@ -94,3 +100,14 @@ void flush_libtar_buffer(int fd) {
if (buffer_status)
buffer_status = 2;
}
+
+void init_libtar_no_buffer(int pipe_fd) {
+ buffer_size = T_BLOCKSIZE;
+ prog_pipe = pipe_fd;
+ buffer_status = 0;
+}
+
+ssize_t write_libtar_no_buffer(int fd, const void *buffer, size_t size) {
+ write(prog_pipe, &progress_size, sizeof(progress_size));
+ return write(fd, buffer, size);
+}