mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-17 03:50:57 +01:00
added buffer_new_buf() which makes it possible to back a Buffer with an existing pointer without copying
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user