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
43extern "C" {
44#endif
45
46typedef 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
57struct 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
95bstr *bstr_add(bstr *bdestination, const bstr *bsource);
96
107bstr *bstr_add_c(bstr *b, const char *cstr);
108
118bstr *bstr_add_c_noex(bstr *b, const char *cstr);
119
131bstr *bstr_add_mem(bstr *b, const void *data, size_t len);
132
143bstr *bstr_add_mem_noex(bstr *b, const void *data, size_t len);
144
154bstr *bstr_add_noex(bstr *bdestination, const bstr *bsource);
155
164void bstr_adjust_len(bstr *b, size_t newlen);
165
173void bstr_adjust_realptr(bstr *b, void *newrealptr);
174
184void bstr_adjust_size(bstr *b, size_t newsize);
185
192bstr *bstr_alloc(size_t size);
193
201int bstr_begins_with(const bstr *bhaystack, const bstr *bneedle);
202
210int bstr_begins_with_c(const bstr *bhaystack, const char *cneedle);
211
219int bstr_begins_with_c_nocase(const bstr *bhaystack, const char *cneedle);
220
229int bstr_begins_with_mem(const bstr *bhaystack, const void *data, size_t len);
230
239int bstr_begins_with_mem_nocase(const bstr *bhaystack, const void *data, size_t len);
240
248int bstr_begins_with_nocase(const bstr *bhaystack, const bstr *cneedle);
249
257int bstr_char_at(const bstr *b, size_t pos);
258
267int bstr_char_at_end(const bstr *b, size_t pos);
268
276void bstr_chop(bstr *b);
277
285int bstr_chr(const bstr *b, int c);
286
295int bstr_cmp(const bstr *b1, const bstr *b2);
296
305int bstr_cmp_c(const bstr *b, const char *cstr);
306
314int bstr_cmp_c_nocase(const bstr *b, const char *cstr);
315
323int bstr_cmp_c_nocasenorzero(const bstr *b, const char *cstr);
324
333int bstr_cmp_mem(const bstr *b, const void *data, size_t len);
334
343int bstr_cmp_mem_nocase(const bstr *b, const void *data, size_t len);
344
353int bstr_cmp_nocase(const bstr *b1, const bstr *b2);
354
363int bstr_cmp_nocasenorzero(const bstr *b1, const bstr *b2);
364
371bstr *bstr_dup(const bstr *b);
372
379bstr *bstr_dup_c(const char *cstr);
380
389bstr *bstr_dup_ex(const bstr *b, size_t offset, size_t len);
390
397bstr *bstr_dup_lower(const bstr *b);
398
406bstr *bstr_dup_mem(const void *data, size_t len);
407
419bstr *bstr_expand(bstr *b, size_t newsize);
420
427void bstr_free(bstr *b);
428
436int bstr_index_of(const bstr *bhaystack, const bstr *bneedle);
437
445int bstr_index_of_nocase(const bstr *bhaystack, const bstr *bneedle);
446
455int bstr_index_of_c(const bstr *bhaystack, const char *cneedle);
456
465int bstr_index_of_c_nocase(const bstr *bhaystack, const char *cneedle);
466
475int bstr_index_of_c_nocasenorzero(const bstr *bhaystack, const char *cneedle);
476
485int bstr_index_of_mem(const bstr *bhaystack, const void *data, size_t len);
486
496int bstr_index_of_mem_nocase(const bstr *bhaystack, const void *data, size_t len);
497
505int bstr_rchr(const bstr *b, int c);
506
515
526int 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
564int64_t bstr_util_mem_to_pint(const void *data, size_t len, int base, size_t *lastlen);
565
574int bstr_util_mem_index_of_c(const void *data, size_t len, const char *cstr);
575
584int bstr_util_mem_index_of_c_nocase(const void *data, size_t len, const char *cstr);
585
595int bstr_util_mem_index_of_mem(const void *data1, size_t len1, const void *data2, size_t len2);
596
606int bstr_util_mem_index_of_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2);
607
617int bstr_util_mem_index_of_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2);
618
626void bstr_util_mem_trim(unsigned char **data, size_t *len);
627
639char *bstr_util_memdup_to_c(const void *data, size_t len);
640
651char *bstr_util_strdup_to_c(const bstr *b);
652
661bstr *bstr_wrap_c(const char *cstr);
662
672bstr *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_dup_ex(const bstr *b, size_t offset, size_t len)
Definition: bstr.c:246
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
int bstr_begins_with_c(const bstr *bhaystack, const char *cneedle)
Definition: bstr.c:118
bstr * bstr_add_c_noex(bstr *b, const char *cstr)
Definition: bstr.c:62
int bstr_util_mem_index_of_mem_nocase(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:516
bstr * bstr_dup_c(const char *cstr)
Definition: bstr.c:242
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
bstr * bstr_add_mem(bstr *b, const void *data, size_t len)
Definition: bstr.c:66
bstr * bstr_dup(const bstr *b)
Definition: bstr.c:238
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
int bstr_util_mem_index_of_mem_nocasenorzero(const void *data1, size_t len1, const void *data2, size_t len2)
Definition: bstr.c:539
bstr * bstr_dup_lower(const bstr *b)
Definition: bstr.c:254
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
bstr * bstr_add_c(bstr *b, const char *cstr)
Definition: bstr.c:58
bstr * bstr_to_lowercase(bstr *b)
Definition: bstr.c:334
char * bstr_util_strdup_to_c(const bstr *b)
Definition: bstr.c:621
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_wrap_c(const char *cstr)
Definition: bstr.c:626
bstr * bstr_dup_mem(const void *data, size_t len)
Definition: bstr.c:258
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
char * bstr_util_memdup_to_c(const void *data, size_t len)
Definition: bstr.c:589
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
int64_t bstr_util_mem_to_pint(const void *data, size_t len, int base, size_t *lastlen)
Definition: bstr.c:431
bstr * bstr_alloc(size_t size)
Definition: bstr.c:43
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
int bstr_cmp_nocasenorzero(const bstr *b1, const bstr *b2)
bstr * bstr_add_mem_noex(bstr *b, const void *data, size_t len)
Definition: bstr.c:81
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_wrap_mem(const void *data, size_t len)
Definition: bstr.c:630
void bstr_chop(bstr *b)
Definition: bstr.c:188
bstr * bstr_add(bstr *bdestination, const bstr *bsource)
Definition: bstr.c:54
int bstr_cmp_c_nocasenorzero(const bstr *b, const char *cstr)
Definition: bstr.c:222
void bstr_adjust_realptr(bstr *b, void *newrealptr)
Definition: bstr.c:106
bstr * bstr_expand(bstr *b, size_t newsize)
Definition: bstr.c:266
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