Mercurial > libpst
annotate src/vbuf.h @ 129:fc11b1d1ad34
fix initial from header in mbox format.
start moving to PST_LE_GET* rather than LE*_CPU macros so we can eventually remove the pragma packing.
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Thu, 05 Feb 2009 12:09:04 -0800 |
parents | 6395ced2b8b2 |
children | e35fd42bac05 |
rev | line source |
---|---|
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
1 /* vbuf.h - variable length buffer functions |
43 | 2 * |
3 * Functions that try to make dealing with buffers easier. | |
4 * | |
5 * vbuf | |
6 * | |
7 * vstr | |
8 * - should always contain a valid string | |
9 * | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
10 */ |
43 | 11 |
12 #ifndef VBUF_H | |
13 #define VBUF_H | |
14 #define SZ_MAX 4096 | |
15 /***************************************************/ | |
16 | |
17 | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
18 // Variable-length buffers |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
19 struct varbuf { |
43 | 20 size_t dlen; //length of data stored in buffer |
21 size_t blen; //length of buffer | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
22 char *buf; //buffer |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
23 char *b; //start of stored data |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
24 }; |
43 | 25 |
26 | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
27 // The exact same thing as a varbuf but should always contain at least '\0' |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
28 struct varstr { |
43 | 29 size_t dlen; //length of data stored in buffer |
30 size_t blen; //length of buffer | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
31 char *buf; //buffer |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
32 char *b; //start of stored data |
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
33 }; |
43 | 34 |
35 | |
36 typedef struct varbuf vbuf; | |
37 typedef struct varstr vstr; | |
38 | |
39 #define VBUF_STATIC(x,y) static vbuf *x = NULL; if(!x) x = vballoc(y); | |
40 #define VSTR_STATIC(x,y) static vstr *x = NULL; if(!x) x = vsalloc(y); | |
41 | |
116
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
42 int skip_nl( char *s ); // returns the width of the newline at s[0] |
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
43 int find_nl( vstr *vs ); // find newline of type type in b |
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
44 |
43 | 45 // vbuf functions |
46 struct varbuf *vballoc( size_t len ); | |
47 void vbfree( vbuf *vb ); | |
48 void vbclear( vbuf *vb ); //ditch the data, keep the buffer | |
49 void vbresize( vbuf *vb, size_t len ); | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
50 size_t vbavail( vbuf *vb ); |
43 | 51 void vbdump( vbuf *vb ); |
52 void vbgrow( vbuf *vb, size_t len ); // grow buffer by len bytes, data are preserved | |
53 void vbset( vbuf *vb, void *data, size_t len ); | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
54 void vbskipws( vbuf *vb ); |
43 | 55 void vbappend( vbuf *vb, void *data, size_t length ); |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
56 void vbskip( vbuf *vb, size_t skip ); |
43 | 57 void vboverwrite( vbuf *vbdest, vbuf *vbsrc ); |
58 | |
59 // vstr functions | |
60 vstr *vsalloc( size_t len ); | |
61 char *vsb( vstr *vs ); | |
62 size_t vslen( vstr *vs ); //strlen | |
63 void vsfree( vstr *vs ); | |
64 void vsset( vstr *vs, char *s ); // Store string s in vb | |
65 void vsnset( vstr *vs, char *s, size_t n ); // Store string s in vb | |
66 void vsgrow( vstr *vs, size_t len ); // grow buffer by len bytes, data are preserved | |
67 size_t vsavail( vstr *vs ); | |
68 void vscat( vstr *vs, char *str ); | |
69 void vsncat( vstr *vs, char *str, size_t len ); | |
70 void vsnprepend( vstr *vs, char *str, size_t len ) ; | |
71 void vsskip( vstr *vs, size_t len ); | |
72 int vscmp( vstr *vs, char *str ); | |
73 void vsskipws( vstr *vs ); | |
74 void vs_printf( vstr *vs, char *fmt, ... ); | |
75 void vs_printfa( vstr *vs, char *fmt, ... ); | |
116
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
76 void vshexdump( vstr *vs, const char *b, size_t start, size_t stop, int ascii ); |
43 | 77 int vscatprintf( vstr *vs, char *fmt, ... ); |
78 void vsvprintf( vstr *vs, char *fmt, va_list ap ); | |
70
b12f4e50e2e8
Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents:
43
diff
changeset
|
79 void vstrunc( vstr *vs, size_t off ); // Drop chars [off..dlen] |
43 | 80 int vslast( vstr *vs ); // returns the last character stored in a vstr string |
81 void vscharcat( vstr *vs, int ch ); | |
82 | |
83 | |
84 void unicode_init(); | |
85 void unicode_close(); | |
116
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
86 size_t vb_utf16to8(vbuf *dest, const char *inbuf, int iblen); |
ed2a260bbb98
improve handling of content-type charset values in mime parts
Carl Byington <carl@five-ten-sg.com>
parents:
70
diff
changeset
|
87 size_t vb_utf8to8bit(vbuf *dest, const char *inbuf, int iblen, const char* charset); |
43 | 88 |
89 int vb_skipline( struct varbuf *vb ); // in: vb->b == "stuff\nmore_stuff"; out: vb->b == "more_stuff" | |
129
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
90 |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
91 |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
92 // switch from maximal packing back to default packing |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
93 // undo the packing from common.h |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
94 #ifdef _MSC_VER |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
95 #pragma pack(pop) |
43 | 96 #endif |
129
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
97 #if defined(__GNUC__) || defined (__SUNPRO_C) || defined(__SUNPRO_CC) |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
98 #pragma pack() |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
99 #endif |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
100 |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
101 |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
102 |
fc11b1d1ad34
fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents:
120
diff
changeset
|
103 #endif // VBUF_H |