1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/***************************************************************************
* Copyright (c) 2009-2010 Open Information Security Foundation
* Copyright (c) 2010-2013 Qualys, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of the Qualys, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
***************************************************************************/
/**
* @file
* @author Ivan Ristic <ivanr@webkreator.com>
*/
#ifndef _BSTR_BUILDER_H
#define _BSTR_BUILDER_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct bstr_builder_t bstr_builder_t;
#include "htp_list.h"
struct bstr_builder_t {
htp_list_t *pieces;
};
#define BSTR_BUILDER_DEFAULT_SIZE 16
/**
* Adds one new string to the builder. This function will adopt the
* string and destroy it when the builder itself is destroyed.
*
* @param[in] bb
* @param[in] b
* @return HTP_OK on success, HTP_ERROR on failure.
*/
htp_status_t bstr_builder_appendn(bstr_builder_t *bb, bstr *b);
/**
* Adds one new piece, in the form of a NUL-terminated string, to
* the builder. This function will make a copy of the provided string.
*
* @param[in] bb
* @param[in] cstr
* @return HTP_OK on success, HTP_ERROR on failure.
*/
htp_status_t bstr_builder_append_c(bstr_builder_t *bb, const char *cstr);
/**
* Adds one new piece, defined with the supplied pointer and
* length, to the builder. This function will make a copy of the
* provided data region.
*
* @param[in] bb
* @param[in] data
* @param[in] len
* @return @return HTP_OK on success, HTP_ERROR on failure.
*/
htp_status_t bstr_builder_append_mem(bstr_builder_t *bb, const void *data, size_t len);
/**
* Clears this string builder, destroying all existing pieces. You may
* want to clear a builder once you've either read all the pieces and
* done something with them, or after you've converted the builder into
* a single string.
*
* @param[in] bb
*/
void bstr_builder_clear(bstr_builder_t *bb);
/**
* Creates a new string builder.
*
* @return New string builder, or NULL on error.
*/
bstr_builder_t *bstr_builder_create(void);
/**
* Destroys an existing string builder, also destroying all
* the pieces stored within.
*
* @param[in] bb
*/
void bstr_builder_destroy(bstr_builder_t *bb);
/**
* Returns the size (the number of pieces) currently in a string builder.
*
* @param[in] bb
* @return size
*/
size_t bstr_builder_size(const bstr_builder_t *bb);
/**
* Creates a single string out of all the pieces held in a
* string builder. This method will not destroy any of the pieces.
*
* @param[in] bb
* @return New string, or NULL on error.
*/
bstr *bstr_builder_to_str(const bstr_builder_t *bb);
#ifdef __cplusplus
}
#endif
#endif /* _BSTR_BUILDER_H */
|