add buffer_fromsa (make virtual buffer from stralloc)

master
leitner 22 years ago
parent 558c6128fe
commit a327b75831

@ -1,3 +1,6 @@
0.16:
add buffer_fromsa (make buffer from stralloc)
0.15: 0.15:
man page update (document stralloc return values) man page update (document stralloc return values)
add stralloc_chop and stralloc_chomp add stralloc_chop and stralloc_chomp

@ -102,6 +102,10 @@ typedef int (*sa_predicate)(stralloc* sa);
/* like buffer_get_token_sa but the token ends when your predicate says so */ /* like buffer_get_token_sa but the token ends when your predicate says so */
extern int buffer_get_token_sa_pred(buffer* b,stralloc* sa,sa_predicate p); extern int buffer_get_token_sa_pred(buffer* b,stralloc* sa,sa_predicate p);
/* make a buffer from a stralloc.
* Do not change the stralloc after this! */
void buffer_fromsa(buffer* b,stralloc* sa);
#endif #endif
#endif #endif

@ -0,0 +1,19 @@
.TH buffer_fromsa 3
.SH NAME
buffer_fromsa \- initialize buffer structure from stralloc
.SH SYNTAX
.B #include <buffer.h>
int \fBbuffer_fromsa\fR(buffer* \fIb\fR,stralloc* \fIsa\fR);
.SH DESCRIPTION
buffer_fromsa makes a virtual read buffer from a stralloc. The buffer
reading functions will be able to read until the end of the data in the
stralloc, then signal EOF. The buffer does not have its own buffer
space, it reuses the one in the stralloc.
Do not touch the stralloc until your are done with the buffer! In
particular, do not call stralloc_free on it!
Reading data from the buffer will not change the stralloc.
.SH "SEE ALSO"
buffer_init(3), buffer(3)

@ -0,0 +1,15 @@
#include "stralloc.h"
#include "buffer.h"
static int dummyreadwrite(int fd,char* buf,unsigned long int len) {
return 0;
}
void buffer_fromsa(buffer* b,stralloc* sa) {
b->x=sa->s;
b->p=0;
b->n=sa->len;
b->a=sa->a;
b->fd=0;
b->op=dummyreadwrite;
}

@ -0,0 +1,21 @@
#include "stralloc.h"
#include "buffer.h"
int main() {
stralloc sa;
buffer b;
stralloc line;
stralloc_init(&sa);
stralloc_init(&line);
stralloc_copys(&sa,"this is a test\nline 2\n");
buffer_fromsa(&b,&sa);
while (buffer_getline_sa(&b,&line)==0) {
buffer_puts(buffer_1,"got line: \"");
if (stralloc_chop(&line)!='\n') break;
buffer_putsa(buffer_1,&line);
buffer_putsflush(buffer_1,"\"\n");
stralloc_copys(&line,"");
}
}
Loading…
Cancel
Save