Skip to content

Commit 8ea6035

Browse files
committed
Implement recv_file_buffer
1 parent c37d3b0 commit 8ea6035

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

src/buffer.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,7 @@ int buffer_read(buffer_t *buffer, char *data, int len)
4949

5050
last = block -> last;
5151
if (pos >= len) {
52-
free(block -> data);
53-
free(block);
54-
continue;
52+
break;
5553
}
5654

5755
int n = ((len - pos) < block -> len) ? len - pos : block -> len;

src/recv_buffer.c

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
#include <pthread.h>
1+
#include <unistd.h>
2+
3+
#include "packet.h"
24
#include "buffer.h"
35

46
static buffer_t buffer;
@@ -20,6 +22,20 @@ int recv_buffer_read(char *data, int len)
2022

2123
int64_t recv_file_buffer_read(int fd, int64_t *offset, int64_t size, int64_t blocksize)
2224
{
23-
/* TODO: implement this */
24-
return 0;
25+
char data[PACKET_DATA_SIZE];
26+
int retval = 0;
27+
int len = 0;
28+
29+
if (fd < 0) return -1;
30+
31+
while (size > 0) {
32+
buffer_read(&buffer, data, PACKET_DATA_SIZE);
33+
len = pwrite(fd, &data, PACKET_DATA_SIZE, *offset);
34+
if (len < 0) return -1;
35+
36+
retval += len;
37+
size -= len;
38+
}
39+
40+
return retval;
2541
}

0 commit comments

Comments
 (0)