source: vendor/current/lib/util/data_blob.h

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 3.8 KB
Line 
1/*
2 Unix SMB/CIFS implementation.
3 DATA BLOB
4
5 Copyright (C) Andrew Tridgell 2001
6 Copyright (C) Andrew Bartlett 2001
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22/* This is a public header file that is installed as part of Samba.
23 * If you remove any functions or change their signature, update
24 * the so version number. */
25
26#ifndef _SAMBA_DATABLOB_H_
27#define _SAMBA_DATABLOB_H_
28
29#ifndef _PUBLIC_
30#define _PUBLIC_
31#endif
32
33#include <talloc.h>
34#include <stdbool.h>
35#include <stdint.h>
36
37/* used to hold an arbitrary blob of data */
38typedef struct datablob {
39 uint8_t *data;
40 size_t length;
41} DATA_BLOB;
42
43struct data_blob_list_item {
44 struct data_blob_list_item *prev,*next;
45 DATA_BLOB blob;
46};
47
48/* by making struct ldb_val and DATA_BLOB the same, we can simplify
49 a fair bit of code */
50#define ldb_val datablob
51
52#define data_blob(ptr, size) data_blob_named(ptr, size, "DATA_BLOB: " __location__)
53#define data_blob_talloc(ctx, ptr, size) data_blob_talloc_named(ctx, ptr, size, "DATA_BLOB: " __location__)
54#define data_blob_dup_talloc(ctx, blob) data_blob_talloc_named(ctx, (blob).data, (blob).length, "DATA_BLOB: " __location__)
55
56/**
57 construct a data blob, must be freed with data_blob_free()
58 you can pass NULL for p and get a blank data blob
59**/
60_PUBLIC_ DATA_BLOB data_blob_named(const void *p, size_t length, const char *name);
61
62/**
63 construct a data blob, using supplied TALLOC_CTX
64**/
65_PUBLIC_ DATA_BLOB data_blob_talloc_named(TALLOC_CTX *mem_ctx, const void *p, size_t length, const char *name);
66
67/**
68 construct a zero data blob, using supplied TALLOC_CTX.
69 use this sparingly as it initialises data - better to initialise
70 yourself if you want specific data in the blob
71**/
72_PUBLIC_ DATA_BLOB data_blob_talloc_zero(TALLOC_CTX *mem_ctx, size_t length);
73
74/**
75free a data blob
76**/
77_PUBLIC_ void data_blob_free(DATA_BLOB *d);
78
79/**
80clear a DATA_BLOB's contents
81**/
82_PUBLIC_ void data_blob_clear(DATA_BLOB *d);
83
84/**
85free a data blob and clear its contents
86**/
87_PUBLIC_ void data_blob_clear_free(DATA_BLOB *d);
88
89/**
90check if two data blobs are equal
91**/
92_PUBLIC_ int data_blob_cmp(const DATA_BLOB *d1, const DATA_BLOB *d2);
93
94/**
95print the data_blob as hex string
96**/
97_PUBLIC_ char *data_blob_hex_string_upper(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob);
98
99/**
100print the data_blob as hex string
101**/
102_PUBLIC_ char *data_blob_hex_string_lower(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob);
103
104/**
105 useful for constructing data blobs in test suites, while
106 avoiding const warnings
107**/
108_PUBLIC_ DATA_BLOB data_blob_string_const(const char *str);
109
110/**
111 useful for constructing data blobs in test suites, while
112 avoiding const warnings
113
114 includes the terminating null character (as opposed to data_blo_string_const)
115**/
116_PUBLIC_ DATA_BLOB data_blob_string_const_null(const char *str);
117
118/**
119 * Create a new data blob from const data
120 */
121_PUBLIC_ DATA_BLOB data_blob_const(const void *p, size_t length);
122
123/**
124 realloc a data_blob
125**/
126_PUBLIC_ bool data_blob_realloc(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, size_t length);
127
128/**
129 append some data to a data blob
130**/
131_PUBLIC_ bool data_blob_append(TALLOC_CTX *mem_ctx, DATA_BLOB *blob,
132 const void *p, size_t length);
133
134extern const DATA_BLOB data_blob_null;
135
136#endif /* _SAMBA_DATABLOB_H_ */
Note: See TracBrowser for help on using the repository browser.