added buffer_new_buf() which makes it possible to back a Buffer with an existing pointer without copying

This commit is contained in:
git@daemon.de
2014-02-20 15:36:12 +01:00
parent 51e3cec60d
commit f13f60bfc2
3 changed files with 129 additions and 10 deletions

View File

@@ -1,6 +1,8 @@
#include "buffertest.h"
#include <sys/mman.h>
int main() {
/* testing basic Buffer api */
Buffer *test = buffer_new(16, "test");
byte *a = ucmalloc(32);
@@ -52,6 +54,44 @@ int main() {
buffer_free(test);
/* testing pointer backed buffer */
FILE *RFD;
size_t rs;
if((RFD = fopen("README", "rb")) == NULL) {
fprintf(stderr, "oops, could not open README!\n");
return 1;
}
fseek(RFD, 0, SEEK_END);
rs = ftell(RFD);
fseek(RFD, 0, SEEK_SET);
void *r = mmap(NULL, rs, PROT_READ, 0, fileno(RFD), 0);
//unsigned char *r = urmalloc(256);
Buffer *rb = buffer_new_buf("r", r, rs);
fprintf(stderr, "r: %p rb->buf: %p\n", r, rb->buf);
buffer_info(rb);
size_t blocksize = 36;
void *chunk = malloc(blocksize);
while(buffer_done(rb) != 1) {
if(buffer_left(rb) < blocksize)
blocksize = buffer_left(rb);
buffer_get_chunk(rb, chunk, blocksize);
_dump("chunk", chunk, blocksize);
}
buffer_free(rb);
_dump("r", r, rs); /* should work! */
munmap(r, rs);
fclose(RFD);
fatals_ifany();
return 0;