source: vendor/current/source3/registry/reg_parse.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: 5.0 KB
Line 
1/*
2 * Samba Unix/Linux SMB client library
3 *
4 * Copyright (C) Gregor Beck 2010
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20/**
21 * @brief Parser for registration entries (.reg) files.
22 * A parser is a talloced incarnation of an opaque struct reg_parse.
23 * It is fed with the (.reg) file line by line calling @ref reg_parse_line
24 * and emits output by calling functions from its reg_parse_callback.
25 * @file reg_parse.h
26 * @author Gregor Beck <gb@sernet.de>
27 * @date Jun 2010
28 */
29
30#ifndef REG_PARSE_H
31#define REG_PARSE_H
32
33#include <stdint.h>
34#include <stdbool.h>
35
36/**
37 * Protoype for function called on key found.
38 * The usual action to take is delete the key if del==true, open it if
39 * already existing or create a new one.
40 *
41 * @param private_data
42 * @param key
43 * @param klen number of elements in key
44 * @param del whether to delete the key
45 *
46 * @retval >=0 on success
47 *
48 * @see reg_format_key
49 */
50typedef int (*reg_parse_callback_key_t) (void* private_data,
51 const char* key[],
52 size_t klen,
53 bool del);
54
55/**
56 * Protoype for function called on value found.
57 * The usual action to take is set the value of the last opened key.
58 *
59 * @param private_data
60 * @param name the values name
61 * @param type the values type
62 * @param data the values value
63 * @param len the number of bytes of data
64 *
65 * @retval >=0 on success
66 *
67 * @see reg_format_value
68 */
69typedef int (*reg_parse_callback_val_t) (void* private_data,
70 const char* name,
71 uint32_t type,
72 const uint8_t* data,
73 uint32_t len);
74
75/**
76 * Protoype for function called on value delete found.
77 * Delete value from the last opened key. It is usually no error if
78 * no such value exist.
79 *
80 * @param private_data
81 * @param name
82 *
83 * @retval >=0 on success
84 *
85 * @see reg_format_value_delete
86 */
87typedef int (*reg_parse_callback_val_del_t) (void* private_data,
88 const char* name);
89
90
91/**
92 * Protoype for function called on comment found.
93 *
94 * @param private_data
95 * @param line comment with marker removed.
96 *
97 * @retval >=0 on success
98 *
99 * @see reg_format_comment
100 */
101typedef int (*reg_parse_callback_comment_t) (void* private_data,
102 const char* line);
103
104/**
105 * Type handling the output of a reg_parse object.
106 * It containes the functions to call and an opaque data pointer.
107 */
108typedef struct reg_parse_callback {
109 reg_parse_callback_key_t key; /**< Function called on key found */
110 reg_parse_callback_val_t val; /**< Function called on value found */
111 /** Function called on value delete found */
112 reg_parse_callback_val_del_t val_del;
113 /** Function called on comment found */
114 reg_parse_callback_comment_t comment;
115 void* data; /**< Private data passed to callback function */
116} reg_parse_callback;
117
118/**
119 * A Parser for a registration entries (.reg) file.
120 *
121 * It may be used as a reg_format_callback, so the following is valid:
122 * @code
123 * reg_format* f = reg_format_new(mem_ctx,
124 * (reg_format_callback)reg_parse_new(mem_ctx, cb, NULL, 0),
125 * NULL, 0, "\\");
126 * @endcode
127 * @see reg_format
128 */
129typedef struct reg_parse reg_parse;
130
131/**
132 * Create a new reg_parse object.
133 *
134 * @param talloc_ctx the talloc parent
135 * @param cb the output handler
136 * @param str_enc the charset of hex encoded strings (REG_MULTI_SZ, REG_EXAND_SZ) if not UTF-16
137 * @param flags
138 *
139 * @return a talloc'ed reg_parse object, NULL on error
140 */
141reg_parse* reg_parse_new(const void* talloc_ctx,
142 reg_parse_callback cb,
143 const char* str_enc,
144 unsigned flags);
145
146/**
147 * Feed one line to the parser.
148 *
149 * @param parser
150 * @param line one line from a (.reg) file, in UNIX charset
151 *
152 * @return 0 on success
153 *
154 * @see reg_format_callback_writeline_t
155 */
156int reg_parse_line(struct reg_parse* parser, const char* line);
157
158
159/**
160 * Parse a (.reg) file, read from a file descriptor.
161 *
162 * @param fd the file descriptor
163 * @param cb the output handler
164 * @param opts
165 *
166 * @return 0 on success
167 */
168int reg_parse_fd(int fd,
169 const reg_parse_callback* cb,
170 const char* opts);
171
172/**
173 * Parse a (.reg) file
174 *
175 * @param filename the file to open
176 * @param cb the output handler
177 * @param opts
178 *
179 * @return 0 on success
180 */
181int reg_parse_file(const char* filename,
182 const reg_parse_callback* cb,
183 const char* opts);
184
185int reg_parse_set_options(reg_parse* parser, const char* opt);
186
187/******************************************************************************/
188
189
190#endif /* REG_PARSE_H */
Note: See TracBrowser for help on using the repository browser.