add buffer_putsa, buffer_get_token_sa, buffer_getline_sa, stralloc_chomp
and stralloc_chop
This commit is contained in:
parent
2354c458a8
commit
053aadde58
3
CHANGES
3
CHANGES
@ -1,4 +1,7 @@
|
||||
0.15:
|
||||
man page update (document stralloc return values)
|
||||
add stralloc_chop and stralloc_chomp
|
||||
add buffer_putsa, buffer_get_token_sa and buffer_getline_sa
|
||||
|
||||
0.14:
|
||||
avoid bus errors in byte_copy
|
||||
|
9
buffer.h
9
buffer.h
@ -71,4 +71,13 @@ extern buffer *buffer_1;
|
||||
extern buffer *buffer_1small;
|
||||
extern buffer *buffer_2;
|
||||
|
||||
#ifdef STRALLOC_H
|
||||
/* write stralloc to buffer */
|
||||
extern int buffer_putsa(buffer* b,stralloc* sa);
|
||||
/* read token from buffer to stralloc */
|
||||
extern int buffer_get_token_sa(buffer* b,stralloc* sa,const char* charset,unsigned int setlen);
|
||||
/* read line from buffer to stralloc */
|
||||
extern int buffer_getline_sa(buffer* b,stralloc* sa);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
23
buffer/buffer_get_token_sa.3
Normal file
23
buffer/buffer_get_token_sa.3
Normal file
@ -0,0 +1,23 @@
|
||||
.TH buffer_get_token_sa 3
|
||||
.SH NAME
|
||||
buffer_get_token_sa \- read token from buffer
|
||||
.SH SYNTAX
|
||||
.nf
|
||||
.B #include <stralloc.h>
|
||||
.B #include <buffer.h>
|
||||
|
||||
int \fBbuffer_get_token_sa\fP(buffer* \fIb\fR,stralloc* \fIsa\fR,
|
||||
const char* \fIcharset\fR,unsigned int \fIsetlen\fR);
|
||||
.SH DESCRIPTION
|
||||
buffer_get_token_sa copies data from the \fIb\fR to \fIsa\fR until one
|
||||
of the delimiters in \fIcharset\fR is found, overwriting the previous
|
||||
content of \fIsa\fR. That delimiter is also appended to \fIsa\fR.
|
||||
|
||||
If reading from the buffer or allocating memory fails,
|
||||
buffer_get_token_sa returns -1 and sets \fIerrno\fR appropriately. At
|
||||
that point \fIsa\fR may be empty or it may already contain a partial
|
||||
token.
|
||||
|
||||
On success, buffer_get_token_sa returns 0.
|
||||
.SH "SEE ALSO"
|
||||
buffer_getline_sa(3), buffer_get_token(3), buffer(3)
|
22
buffer/buffer_get_token_sa.c
Normal file
22
buffer/buffer_get_token_sa.c
Normal file
@ -0,0 +1,22 @@
|
||||
#include "byte.h"
|
||||
#include "stralloc.h"
|
||||
#include "buffer.h"
|
||||
#include <errno.h>
|
||||
|
||||
int buffer_get_token_sa(buffer* b,stralloc* sa,const char* charset,unsigned int setlen) {
|
||||
sa->len=0;
|
||||
for (;;) {
|
||||
char x;
|
||||
if (!stralloc_readyplus(sa,1)) goto nomem;
|
||||
switch (buffer_getc(b,&x)) {
|
||||
case -1: return -1;
|
||||
case 0: return 0;
|
||||
}
|
||||
stralloc_append(sa,&x);
|
||||
if (byte_chr(charset,setlen,x)<setlen) break;
|
||||
}
|
||||
return 0;
|
||||
nomem:
|
||||
errno=ENOMEM;
|
||||
return -1;
|
||||
}
|
22
buffer/buffer_getline_sa.3
Normal file
22
buffer/buffer_getline_sa.3
Normal file
@ -0,0 +1,22 @@
|
||||
.TH buffer_getline_sa 3
|
||||
.SH NAME
|
||||
buffer_getline_sa \- read line from buffer
|
||||
.SH SYNTAX
|
||||
.nf
|
||||
.B #include <stralloc.h>
|
||||
.B #include <buffer.h>
|
||||
|
||||
int \fBbuffer_getline_sa\fP(buffer* \fIb\fR,stralloc* \fIsa\fR);
|
||||
.SH DESCRIPTION
|
||||
buffer_getline_sa copies data from the \fIb\fR to \fIsa\fR until a '\\n'
|
||||
is found, overwriting the previous content of \fIsa\fR. The new-line
|
||||
is also appended to \fIsa\fR.
|
||||
|
||||
If reading from the buffer or allocating memory fails,
|
||||
buffer_getline_sa returns -1 and sets \fIerrno\fR appropriately. At
|
||||
that point \fIsa\fR may be empty or it may already contain a partial
|
||||
token.
|
||||
|
||||
On success, buffer_getline_sa returns 0.
|
||||
.SH "SEE ALSO"
|
||||
buffer_get_token_sa(3), buffer(3)
|
6
buffer/buffer_getline_sa.c
Normal file
6
buffer/buffer_getline_sa.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include "stralloc.h"
|
||||
#include "buffer.h"
|
||||
|
||||
int buffer_getline_sa(buffer* b,stralloc* sa) {
|
||||
return buffer_get_token_sa(b,sa,"\n",1);
|
||||
}
|
14
buffer/buffer_putsa.3
Normal file
14
buffer/buffer_putsa.3
Normal file
@ -0,0 +1,14 @@
|
||||
.TH buffer_putsa 3
|
||||
.SH NAME
|
||||
buffer_putsa \- write stralloc to buffer
|
||||
.SH SYNTAX
|
||||
.nf
|
||||
.B #include <stralloc.h>
|
||||
.B #include <buffer.h>
|
||||
|
||||
int \fBbuffer_putsa\fP(buffer* \fIb\fR,const char* \fIx\fR);
|
||||
.SH DESCRIPTION
|
||||
buffer_putsa is equivalent to buffer_put(b,x.sa,x.len).
|
||||
|
||||
.SH "SEE ALSO"
|
||||
buffer_puts(3), buffer_flush(3), buffer(3)
|
6
buffer/buffer_putsa.c
Normal file
6
buffer/buffer_putsa.c
Normal file
@ -0,0 +1,6 @@
|
||||
#include "stralloc.h"
|
||||
#include "buffer.h"
|
||||
|
||||
int buffer_putsa(buffer* b,stralloc* sa) {
|
||||
return buffer_put(b,sa->s,sa->len);
|
||||
}
|
15
stralloc.h
15
stralloc.h
@ -80,4 +80,19 @@ extern void stralloc_free(stralloc* sa);
|
||||
#define stralloc_catint0(sa,i,n) (stralloc_catlong0((sa),(i),(n)))
|
||||
#define stralloc_catint(sa,i) (stralloc_catlong0((sa),(i),0))
|
||||
|
||||
/* remove last char. Return removed byte as unsigned char (or -1 if stralloc was empty). */
|
||||
extern int stralloc_chop(stralloc* sa);
|
||||
|
||||
/* remove trailing "\r\n", "\n" or "\r". Return number of removed chars (0,1 or 2) */
|
||||
extern int stralloc_chomp(stralloc* sa);
|
||||
|
||||
#ifdef BUFFER_H
|
||||
/* write stralloc to buffer */
|
||||
extern int buffer_putsa(buffer* b,stralloc* sa);
|
||||
/* read token from buffer to stralloc */
|
||||
extern int buffer_get_token_sa(buffer* b,stralloc* sa,const char* charset,unsigned int setlen);
|
||||
/* read line from buffer to stralloc */
|
||||
extern int buffer_getline_sa(buffer* b,stralloc* sa);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
12
stralloc/stralloc_chomp.3
Normal file
12
stralloc/stralloc_chomp.3
Normal file
@ -0,0 +1,12 @@
|
||||
.TH stralloc_chomp 3
|
||||
.SH NAME
|
||||
stralloc_chomp \- remove trailing CR, LF or CRLF
|
||||
.SH SYNTAX
|
||||
.B #include <stralloc.h>
|
||||
|
||||
extern int \fBstralloc_chomp\fP(stralloc* \fIsa\fR);
|
||||
.SH DESCRIPTION
|
||||
stralloc_chomp removes trailing CRLF, CR or LF from \fIsa\fR and returns
|
||||
the number of removed characters (i.e. 0, 1 or 2).
|
||||
.SH "SEE ALSO"
|
||||
stralloc_chop(3)
|
19
stralloc/stralloc_chomp.c
Normal file
19
stralloc/stralloc_chomp.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <stralloc.h>
|
||||
|
||||
int stralloc_chomp(stralloc* sa) {
|
||||
unsigned int max=sa->len;
|
||||
if (max>0) {
|
||||
register char x;
|
||||
--max;
|
||||
x=sa->s[max];
|
||||
if (x=='\n' || x=='\r') {
|
||||
if (x=='\n' && max>1 && sa->s[max-1]=='\r') {
|
||||
sa->len-=2;
|
||||
return 2;
|
||||
}
|
||||
--sa->len;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
13
stralloc/stralloc_chop.3
Normal file
13
stralloc/stralloc_chop.3
Normal file
@ -0,0 +1,13 @@
|
||||
.TH stralloc_chop 3
|
||||
.SH NAME
|
||||
stralloc_chop \- remove and return last char
|
||||
.SH SYNTAX
|
||||
.B #include <stralloc.h>
|
||||
|
||||
extern int \fBstralloc_chop\fP(stralloc* \fIsa\fR);
|
||||
.SH DESCRIPTION
|
||||
stralloc_chop removes the last char in the stralloc (if it is empty,
|
||||
stralloc_chop does nothing and returns -1). This character is cast to
|
||||
unsigned char and returned.
|
||||
.SH "SEE ALSO"
|
||||
stralloc_chomp(3)
|
7
stralloc/stralloc_chop.c
Normal file
7
stralloc/stralloc_chop.c
Normal file
@ -0,0 +1,7 @@
|
||||
#include <stralloc.h>
|
||||
|
||||
int stralloc_chop(stralloc* sa) {
|
||||
if (sa->len==0) return -1;
|
||||
--sa->len;
|
||||
return (unsigned char)(sa->s[sa->len]);
|
||||
}
|
@ -12,5 +12,8 @@ is the same as
|
||||
\fIsafrom\fR must already be allocated.
|
||||
|
||||
The data that \fIsa\fR previously contained is overwritten and truncated.
|
||||
|
||||
If stralloc_copy has trouble allocating memory, it returns 0. Otherwise
|
||||
it returns 1.
|
||||
.SH "SEE ALSO"
|
||||
stralloc_copyb(3)
|
||||
|
Loading…
x
Reference in New Issue
Block a user