source: trunk/include/sh_string.h@ 225

Last change on this file since 225 was 215, checked in by katerina, 16 years ago

Consolidate filtering code (ticket #142) and match on regular expressions (ticket #143).

File size: 3.4 KB
Line 
1#ifndef SH_STRING_H
2#define SH_STRING_H
3
4
5/* String definition and utility functions.
6 */
7typedef struct sh_str_struct
8{
9 char * str; /* always NULL terminated */
10 size_t len; /* without terminating \0 */
11 size_t siz; /* size of allocated buffer */
12} sh_string;
13
14sh_string * sh_string_new(size_t size);
15void sh_string_destroy(sh_string ** s);
16#define sh_string_str(a) ((a)->str)
17#define sh_string_len(a) ((a)->len)
18
19/* concat string to sh_string
20 */
21sh_string * sh_string_cat_lchar(sh_string * s, const char * str, size_t len);
22
23/* add char array to end of string */
24sh_string * sh_string_add_from_char(sh_string * s, const char * str);
25
26/* set sh_string from string
27 */
28sh_string * sh_string_set_from_char(sh_string * s, const char * str);
29
30/* create new sh_string from array of given length
31 */
32sh_string * sh_string_new_from_lchar(const char * str, size_t len);
33
34#define sh_string_copy(a) ((a) ? sh_string_new_from_lchar(((a)->str), ((a)->len)) : NULL)
35#define sh_string_add(a,b) ((a && b) ? sh_string_cat_lchar((a), ((b)->str), ((b)->len)) : NULL)
36
37/* create new sh_string from three arrays of given length
38 */
39sh_string * sh_string_new_from_lchar3(const char * str1, size_t len1,
40 const char * str2, size_t len2,
41 const char * str3, size_t len3);
42
43/* Truncate to desired length.
44 */
45sh_string * sh_string_truncate(sh_string * s, size_t len);
46
47/* If requested increase is zero, increase by default amount.
48 */
49sh_string * sh_string_grow(sh_string * s, size_t increase);
50
51/* Read a string from a file, with maxlen. Return 0 on EOF,
52 * -1 on error, and -2 if a line exceeds maxlen.
53 */
54size_t sh_string_read(sh_string * s, FILE * fp, size_t maxlen);
55
56/* Read a string from a file, with maxlen. Return 0 on EOF,
57 * -1 on error, and -2 if a line exceeds maxlen.
58 * If 'cont' != NULL, continuation lines starting with a char
59 * in 'cont' are concatenated.
60 */
61size_t sh_string_read_cont(sh_string * s, FILE * fp, size_t maxlen, char *cont);
62
63/* Split array at delim in at most nfields fields.
64 * Empty fields are returned as empty (zero-length) strings.
65 * Leading and trailing WS are removed from token.
66 * The number of fields is returned in 'nfields', their
67 * lengths in 'lengths'.
68 * A single delimiter will return two empty fields.
69 */
70char ** split_array(char *line, unsigned int * nfields,
71 char delim, size_t * lengths);
72
73/* Split array at whitespace in at most nfields fields.
74 * Multiple whitespaces are collapsed.
75 * Empty fields are returned as empty (zero-length) strings.
76 * The number of fields is returned in nfields.
77 * An empty string will return zero fields.
78 * If nfields < actual fields, last string will be remainder.
79 */
80char ** split_array_ws(char *line, unsigned int * nfields, size_t * lengths);
81
82/* Same as above, but split on [space, tab, comma]
83 */
84char ** split_array_list(char *line, unsigned int * nfields, size_t * lengths);
85
86/* Replaces fields in s with 'replacement'. Fields are given
87 * in the ordered array ovector, comprising ovecnum pairs
88 * ovector[i], ovector[i+1] which list offset of first char
89 * of field, offset of first char after field (this is how
90 * the pcre library does it).
91 */
92sh_string * sh_string_replace(const sh_string * s,
93 const int * ovector, int ovecnum,
94 const char * replacement, size_t rlen);
95
96#endif
Note: See TracBrowser for help on using the repository browser.