HTP  0.5
bstr.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (c) 2009-2010 Open Information Security Foundation
3  * Copyright (c) 2010-2013 Qualys, Inc.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * - Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12 
13  * - Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in the
15  * documentation and/or other materials provided with the distribution.
16 
17  * - Neither the name of the Qualys, Inc. nor the names of its
18  * contributors may be used to endorse or promote products derived from
19  * this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  ***************************************************************************/
33 
39 #ifndef _BSTR_H
40 #define _BSTR_H
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 typedef struct bstr_t bstr;
47 
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <stdint.h>
51 #include <string.h>
52 
53 #include "bstr_builder.h"
54 
55 // Data structures
56 
57 struct bstr_t {
59  size_t len;
60 
64  size_t size;
65 
71  unsigned char *realptr;
72 };
73 
74 
75 // Defines
76 
77 #define bstr_len(X) ((*(X)).len)
78 #define bstr_size(X) ((*(X)).size)
79 #define bstr_ptr(X) ( ((*(X)).realptr == NULL) ? ((unsigned char *)(X) + sizeof(bstr)) : (unsigned char *)(*(X)).realptr )
80 #define bstr_realptr(X) ((*(X)).realptr)
81 
82 
83 // Functions
84 
95 bstr *bstr_add(bstr *bdestination, const bstr *bsource);
96 
107 bstr *bstr_add_c(bstr *b, const char *cstr);
108 
118 bstr *bstr_add_c_noex(bstr *b, const char *cstr);
119 
131 bstr *bstr_add_mem(bstr *b, const void *data, size_t len);
132 
143 bstr *bstr_add_mem_noex(bstr *b, const void *data, size_t len);
144 
154 bstr *bstr_add_noex(bstr *bdestination, const bstr *bsource);
155 
164 void bstr_adjust_len(bstr *b, size_t newlen);
165 
173 void bstr_adjust_realptr(bstr *b, void *newrealptr);
174 
184 void bstr_adjust_size(bstr *b, size_t newsize);
185 
192 bstr *bstr_alloc(size_t size);
193 
201 int bstr_begins_with(const bstr *bhaystack, const bstr *bneedle);
202 
210 int bstr_begins_with_c(const bstr *bhaystack, const char *cneedle);
211 
219 int bstr_begins_with_c_nocase(const bstr *bhaystack, const char *cneedle);
220 
229 int bstr_begins_with_mem(const bstr *bhaystack, const void *data, size_t len);
230 
239 int bstr_begins_with_mem_nocase(const bstr *bhaystack, const void *data, size_t len);
240 
248 int bstr_begins_with_nocase(const bstr *bhaystack, const bstr *cneedle);
249 
257 int bstr_char_at(const bstr *b, size_t pos);
258 
267 int bstr_char_at_end(const bstr *b, size_t pos);
268 
276 void bstr_chop(bstr *b);
277 
285 int bstr_chr(const bstr *b, int c);
286 
295 int bstr_cmp(const bstr *b1, const bstr *b2);
296 
305 int bstr_cmp_c(const bstr *b, const char *cstr);
306 
314 int bstr_cmp_c_nocase(const bstr *b, const char *cstr);
315 
323 int bstr_cmp_c_nocasenorzero(const bstr *b, const char *cstr);
324 
333 int bstr_cmp_mem(const bstr *b, const void *data, size_t len);
334 
343 int bstr_cmp_mem_nocase(const bstr *b, const void *data, size_t len);
344 
353 int bstr_cmp_nocase(const bstr *b1, const bstr *b2);
354 
363 int bstr_cmp_nocasenorzero(const bstr *b1, const bstr *b2);
364 
371 bstr *bstr_dup(const bstr *b);
372 
379 bstr *bstr_dup_c(const char *cstr);
380 
389 bstr *bstr_dup_ex(const bstr *b, size_t offset, size_t len);
390 
397 bstr *bstr_dup_lower(const bstr *b);
398 
406 bstr *bstr_dup_mem(const void *data, size_t len);
407 
419 bstr *bstr_expand(bstr *b, size_t newsize);
420 
427 void bstr_free(bstr *b);
428 
436 int bstr_index_of(const bstr *bhaystack, const bstr *bneedle);
437 
445 int bstr_index_of_nocase(const bstr *bhaystack, const bstr *bneedle);
446 
455 int bstr_index_of_c(const bstr *bhaystack, const char *cneedle);
456 
465 int bstr_index_of_c_nocase(const bstr *bhaystack, const char *cneedle);
466 
475 int bstr_index_of_c_nocasenorzero(const bstr *bhaystack, const char *cneedle);
476 
485 int bstr_index_of_mem(const bstr *bhaystack, const void *data, size_t len);
486 
496 int bstr_index_of_mem_nocase(const bstr *bhaystack, const void *data, size_t len);
497 
505 int bstr_rchr(const bstr *b, int c);
506 
515 
526 int bstr_util_cmp_mem(const void *data1, size_t len1, const void *data2, size_t len2);
527 
538  int bstr_util_cmp_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2);
539 
550  int bstr_util_cmp_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2);
551 
564 int64_t bstr_util_mem_to_pint(const void *data, size_t len, int base, size_t *lastlen);
565 
574 int bstr_util_mem_index_of_c(const void *data, size_t len, const char *cstr);
575 
584 int bstr_util_mem_index_of_c_nocase(const void *data, size_t len, const char *cstr);
585 
595 int bstr_util_mem_index_of_mem(const void *data1, size_t len1, const void *data2, size_t len2);
596 
606 int bstr_util_mem_index_of_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2);
607 
617 int bstr_util_mem_index_of_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2);
618 
626 void bstr_util_mem_trim(unsigned char **data, size_t *len);
627 
639 char *bstr_util_memdup_to_c(const void *data, size_t len);
640 
651 char *bstr_util_strdup_to_c(const bstr *b);
652 
661 bstr *bstr_wrap_c(const char *cstr);
662 
672 bstr *bstr_wrap_mem(const void *data, size_t len);
673 
674 #ifdef __cplusplus
675 }
676 #endif
677 
678 #endif /* _BSTR_H */
int bstr_char_at(const bstr *b, size_t pos)
Definition: bstr.c:172
int bstr_index_of_c(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:294
bstr * bstr_alloc(size_t size)
Definition: bstr.c:43
int bstr_begins_with_nocase(const bstr *bhaystack, const bstr *cneedle)
Definition: bstr.c:126
int bstr_index_of_mem_nocase(const bstr *bhaystack, const void *data, size_t len)
Definition: bstr.c:310
int bstr_cmp_c_nocase(const bstr *b, const char *cstr)
Definition: bstr.c:218
void bstr_free(bstr *b)
Definition: bstr.c:285
bstr * bstr_add_mem(bstr *b, const void *data, size_t len)
Definition: bstr.c:66
int bstr_begins_with_c(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:118
int bstr_util_mem_index_of_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:516
int bstr_util_mem_index_of_mem(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:493
int bstr_cmp_mem(const bstr *b, const void *data, size_t len)
Definition: bstr.c:226
int bstr_begins_with_mem_nocase(const bstr *bhaystack, const void *data, size_t len)
Definition: bstr.c:151
int bstr_begins_with(const bstr *bhaystack, const bstr *bneedle)
Definition: bstr.c:114
int bstr_rchr(const bstr *b, int c)
Definition: bstr.c:318
int bstr_begins_with_c_nocase(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:122
bstr * bstr_add_noex(bstr *bdestination, const bstr *bsource)
Definition: bstr.c:98
int bstr_cmp_nocase(const bstr *b1, const bstr *b2)
Definition: bstr.c:234
bstr * bstr_expand(bstr *b, size_t newsize)
Definition: bstr.c:266
int bstr_util_mem_index_of_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:539
int bstr_begins_with_mem(const bstr *bhaystack, const void *data, size_t len)
Definition: bstr.c:130
int bstr_index_of_nocase(const bstr *bhaystack, const bstr *bneedle)
Definition: bstr.c:314
int bstr_util_mem_index_of_c(const void *data, size_t len, const char *cstr)
Definition: bstr.c:485
int bstr_chr(const bstr *b, int c)
Definition: bstr.c:194
bstr * bstr_add_mem_noex(bstr *b, const void *data, size_t len)
Definition: bstr.c:81
char * bstr_util_strdup_to_c(const bstr *b)
Definition: bstr.c:621
int bstr_cmp(const bstr *b1, const bstr *b2)
Definition: bstr.c:210
int bstr_index_of(const bstr *bhaystack, const bstr *bneedle)
Definition: bstr.c:290
int bstr_char_at_end(const bstr *b, size_t pos)
Definition: bstr.c:180
bstr * bstr_to_lowercase(bstr *b)
Definition: bstr.c:334
int bstr_cmp_mem_nocase(const bstr *b, const void *data, size_t len)
Definition: bstr.c:230
void bstr_util_mem_trim(unsigned char **data, size_t *len)
Definition: bstr.c:570
int bstr_util_mem_index_of_c_nocase(const void *data, size_t len, const char *cstr)
Definition: bstr.c:489
bstr * bstr_dup_c(const char *cstr)
Definition: bstr.c:242
bstr * bstr_add_c(bstr *b, const char *cstr)
Definition: bstr.c:58
int64_t bstr_util_mem_to_pint(const void *data, size_t len, int base, size_t *lastlen)
Definition: bstr.c:431
int bstr_util_cmp_mem(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:349
int bstr_util_cmp_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:399
int bstr_index_of_mem(const bstr *bhaystack, const void *data, size_t len)
Definition: bstr.c:306
int bstr_util_cmp_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:374
bstr * bstr_add(bstr *bdestination, const bstr *bsource)
Definition: bstr.c:54
int bstr_cmp_nocasenorzero(const bstr *b1, const bstr *b2)
bstr * bstr_dup(const bstr *b)
Definition: bstr.c:238
bstr * bstr_dup_ex(const bstr *b, size_t offset, size_t len)
Definition: bstr.c:246
int bstr_cmp_c(const bstr *b, const char *cstr)
Definition: bstr.c:214
void bstr_adjust_size(bstr *b, size_t newsize)
Definition: bstr.c:110
int bstr_index_of_c_nocasenorzero(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:302
int bstr_index_of_c_nocase(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:298
void bstr_adjust_len(bstr *b, size_t newlen)
Definition: bstr.c:102
bstr * bstr_dup_lower(const bstr *b)
Definition: bstr.c:254
bstr * bstr_add_c_noex(bstr *b, const char *cstr)
Definition: bstr.c:62
bstr * bstr_dup_mem(const void *data, size_t len)
Definition: bstr.c:258
void bstr_chop(bstr *b)
Definition: bstr.c:188
bstr * bstr_wrap_c(const char *cstr)
Definition: bstr.c:626
int bstr_cmp_c_nocasenorzero(const bstr *b, const char *cstr)
Definition: bstr.c:222
bstr * bstr_wrap_mem(const void *data, size_t len)
Definition: bstr.c:630
char * bstr_util_memdup_to_c(const void *data, size_t len)
Definition: bstr.c:589
void bstr_adjust_realptr(bstr *b, void *newrealptr)
Definition: bstr.c:106
Definition: bstr.h:57
unsigned char * realptr
Definition: bstr.h:71
size_t size
Definition: bstr.h:64
size_t len
Definition: bstr.h:59