2 ** OSSP var - Variable Expansion
3 ** Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com>
4 ** Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/)
5 ** Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
7 ** This file is part of OSSP var, a variable expansion
8 ** library which can be found at http://www.ossp.org/pkg/lib/var/.
10 ** Permission to use, copy, modify, and distribute this software for
11 ** any purpose with or without fee is hereby granted, provided that
12 ** the above copyright notice and this permission notice appear in all
15 ** For disclaimer see below.
18 * Modified for use with Bacula by Kern Sibbald, June 2003
21 Copyright (C) 2000-2003 Kern Sibbald and John Walker
23 This program is free software; you can redistribute it and/or
24 modify it under the terms of the GNU General Public License as
25 published by the Free Software Foundation; either version 2 of
26 the License, or (at your option) any later version.
28 This program is distributed in the hope that it will be useful,
29 but WITHOUT ANY WARRANTY; without even the implied warranty of
30 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31 General Public License for more details.
33 You should have received a copy of the GNU General Public
34 License along with this program; if not, write to the Free
35 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
47 VAR_ERR_CALLBACK = -64,
48 VAR_ERR_FORMATTING_FAILURE = -45,
49 VAR_ERR_UNDEFINED_OPERATION = -44,
50 VAR_ERR_MALFORMED_OPERATION_ARGUMENTS = -43,
51 VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -42,
52 VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -41,
53 VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -40,
54 VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -39,
55 VAR_ERR_INCOMPLETE_INDEX_SPEC = -37,
56 VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -36,
57 VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -35,
58 VAR_ERR_INCOMPLETE_QUOTED_PAIR = -34,
59 VAR_ERR_INVALID_ARGUMENT = -34,
60 VAR_ERR_SUBMATCH_OUT_OF_RANGE = -33,
61 VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -32,
62 VAR_ERR_EMPTY_PADDING_FILL_STRING = -31,
63 VAR_ERR_MISSING_PADDING_WIDTH = -30,
64 VAR_ERR_MALFORMATTED_PADDING = -29,
65 VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -28,
66 VAR_ERR_EMPTY_TRANSPOSE_CLASS = -27,
67 VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -26,
68 VAR_ERR_MALFORMATTED_TRANSPOSE = -25,
69 VAR_ERR_OFFSET_LOGIC = -24,
70 VAR_ERR_OFFSET_OUT_OF_BOUNDS = -23,
71 VAR_ERR_RANGE_OUT_OF_BOUNDS = -22,
72 VAR_ERR_INVALID_OFFSET_DELIMITER = -21,
73 VAR_ERR_MISSING_START_OFFSET = -20,
74 VAR_ERR_EMPTY_SEARCH_STRING = -19,
75 VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -18,
76 VAR_ERR_INVALID_REGEX_IN_REPLACE = -17,
77 VAR_ERR_UNKNOWN_REPLACE_FLAG = -16,
78 VAR_ERR_MALFORMATTED_REPLACE = -15,
79 VAR_ERR_UNKNOWN_COMMAND_CHAR = -14,
80 VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13,
81 VAR_ERR_UNDEFINED_VARIABLE = -12,
82 VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11,
83 VAR_ERR_OUT_OF_MEMORY = -10,
84 VAR_ERR_INVALID_CONFIGURATION = -9,
85 VAR_ERR_INCORRECT_CLASS_SPEC = -8,
86 VAR_ERR_INCOMPLETE_GROUPED_HEX = -7,
87 VAR_ERR_INCOMPLETE_OCTAL = -6,
88 VAR_ERR_INVALID_OCTAL = -5,
89 VAR_ERR_OCTAL_TOO_LARGE = -4,
90 VAR_ERR_INVALID_HEX = -3,
91 VAR_ERR_INCOMPLETE_HEX = -2,
92 VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1,
97 typedef struct var_st var_t;
102 VAR_CONFIG_CB_OPERATION
106 char escape; /* default: '\' */
107 char delim_init; /* default: '$' */
108 char delim_open; /* default: '{' */
109 char delim_close; /* default: '}' */
110 char index_open; /* default: '[' */
111 char index_close; /* default: ']' */
112 char index_mark; /* default: '#' */
113 const char *name_chars; /* default: "a-zA-Z0-9_" */
116 typedef var_rc_t (*var_cb_value_t)(
117 var_t *var, void *ctx,
118 const char *var_ptr, int var_len, int var_inc, int var_idx,
119 const char **val_ptr, int *val_len, int *val_size
122 typedef var_rc_t (*var_cb_operation_t)(
123 var_t *var, void *ctx,
124 const char *op_ptr, int op_len,
125 const char *arg_ptr, int arg_len,
126 const char *val_ptr, int val_len,
127 const char **out_ptr, int *out_len, int *out_size
131 var_rc_t var_create (var_t **var);
132 var_rc_t var_destroy (var_t *var);
133 var_rc_t var_config (var_t *var, var_config_t mode, ...);
134 var_rc_t var_unescape (var_t *var, const char *src_ptr, int src_len, char *dst_ptr, int dst_len, int all);
135 var_rc_t var_expand (var_t *var, const char *src_ptr, int src_len, char **dst_ptr, int *dst_len, int force_expand);
136 var_rc_t var_formatv (var_t *var, char **dst_ptr, int force_expand, const char *fmt, va_list ap);
137 var_rc_t var_format (var_t *var, char **dst_ptr, int force_expand, const char *fmt, ...);
138 const char *var_strerror (var_t *var, var_rc_t rc);
140 #endif /* __VAR_H__ */