Browse Source

add buffer_fromsa (make virtual buffer from stralloc)

master
Felix von Leitner 19 years ago
parent
commit
1e0728abd0
  1. 3
      CHANGES
  2. 4
      buffer.h
  3. 19
      buffer/buffer_fromsa.3
  4. 15
      buffer/buffer_fromsa.c
  5. 21
      test/buffer_fromsa.c

3
CHANGES

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

4
buffer.h

@ -102,6 +102,10 @@ typedef int (*sa_predicate)(stralloc* sa);
/* 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);
/* make a buffer from a stralloc.
* Do not change the stralloc after this! */
void buffer_fromsa(buffer* b,stralloc* sa);
#endif
#endif

19
buffer/buffer_fromsa.3

@ -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)

15
buffer/buffer_fromsa.c

@ -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;
}

21
test/buffer_fromsa.c

@ -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