]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/lib/var.h
19July06
[bacula/bacula] / bacula / src / lib / var.h
1 /*
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/)
6 **
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/.
9 **
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
13 **  copies.
14 **
15 **  For disclaimer see below.
16 */
17 /*
18  * Modified for use with Bacula by Kern Sibbald, June 2003
19  */
20 /*
21    Copyright (C) 2003-2006 Kern Sibbald
22
23    This program is free software; you can redistribute it and/or
24    modify it under the terms of the GNU General Public License
25    version 2 as amended with additional clauses defined in the
26    file LICENSE in the main source directory.
27
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 
31    the file LICENSE for additional details.
32
33  */
34
35
36
37 #ifndef __VAR_H__
38 #define __VAR_H__
39
40 /* Error codes */
41 typedef enum {
42     VAR_ERR_CALLBACK                        = -64,
43     VAR_ERR_FORMATTING_FAILURE              = -45,
44     VAR_ERR_UNDEFINED_OPERATION             = -44,
45     VAR_ERR_MALFORMED_OPERATION_ARGUMENTS   = -43,
46     VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS     = -42,
47     VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT     = -41,
48     VAR_ERR_DIVISION_BY_ZERO_IN_INDEX       = -40,
49     VAR_ERR_UNCLOSED_BRACKET_IN_INDEX       = -39,
50     VAR_ERR_INCOMPLETE_INDEX_SPEC           = -37,
51     VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC      = -36,
52     VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED   = -35,
53     VAR_ERR_INCOMPLETE_QUOTED_PAIR          = -34,
54     VAR_ERR_INVALID_ARGUMENT                = -34,
55     VAR_ERR_SUBMATCH_OUT_OF_RANGE           = -33,
56     VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE  = -32,
57     VAR_ERR_EMPTY_PADDING_FILL_STRING       = -31,
58     VAR_ERR_MISSING_PADDING_WIDTH           = -30,
59     VAR_ERR_MALFORMATTED_PADDING            = -29,
60     VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC  = -28,
61     VAR_ERR_EMPTY_TRANSPOSE_CLASS           = -27,
62     VAR_ERR_TRANSPOSE_CLASSES_MISMATCH      = -26,
63     VAR_ERR_MALFORMATTED_TRANSPOSE          = -25,
64     VAR_ERR_OFFSET_LOGIC                    = -24,
65     VAR_ERR_OFFSET_OUT_OF_BOUNDS            = -23,
66     VAR_ERR_RANGE_OUT_OF_BOUNDS             = -22,
67     VAR_ERR_INVALID_OFFSET_DELIMITER        = -21,
68     VAR_ERR_MISSING_START_OFFSET            = -20,
69     VAR_ERR_EMPTY_SEARCH_STRING             = -19,
70     VAR_ERR_MISSING_PARAMETER_IN_COMMAND    = -18,
71     VAR_ERR_INVALID_REGEX_IN_REPLACE        = -17,
72     VAR_ERR_UNKNOWN_REPLACE_FLAG            = -16,
73     VAR_ERR_MALFORMATTED_REPLACE            = -15,
74     VAR_ERR_UNKNOWN_COMMAND_CHAR            = -14,
75     VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE    = -13,
76     VAR_ERR_UNDEFINED_VARIABLE              = -12,
77     VAR_ERR_INCOMPLETE_VARIABLE_SPEC        = -11,
78     VAR_ERR_OUT_OF_MEMORY                   = -10,
79     VAR_ERR_INVALID_CONFIGURATION           =  -9,
80     VAR_ERR_INCORRECT_CLASS_SPEC            =  -8,
81     VAR_ERR_INCOMPLETE_GROUPED_HEX          =  -7,
82     VAR_ERR_INCOMPLETE_OCTAL                =  -6,
83     VAR_ERR_INVALID_OCTAL                   =  -5,
84     VAR_ERR_OCTAL_TOO_LARGE                 =  -4,
85     VAR_ERR_INVALID_HEX                     =  -3,
86     VAR_ERR_INCOMPLETE_HEX                  =  -2,
87     VAR_ERR_INCOMPLETE_NAMED_CHARACTER      =  -1,
88     VAR_OK                                  =   0
89 } var_rc_t;
90
91 struct var_st;
92 typedef struct var_st var_t;
93
94 typedef enum {
95     VAR_CONFIG_SYNTAX,
96     VAR_CONFIG_CB_VALUE,
97     VAR_CONFIG_CB_OPERATION
98 } var_config_t;
99
100 typedef struct {
101     char  escape;       /* default: '\' */
102     char  delim_init;   /* default: '$' */
103     char  delim_open;   /* default: '{' */
104     char  delim_close;  /* default: '}' */
105     char  index_open;   /* default: '[' */
106     char  index_close;  /* default: ']' */
107     char  index_mark;   /* default: '#' */
108     const char *name_chars;   /* default: "a-zA-Z0-9_" */
109 } var_syntax_t;
110
111 typedef var_rc_t (*var_cb_value_t)(
112     var_t *var, void *ctx,
113     const char  *var_ptr, int     var_len, int var_inc, int var_idx,
114     const char **val_ptr, int    *val_len, int    *val_size
115 );
116
117 typedef var_rc_t (*var_cb_operation_t)(
118     var_t *var, void *ctx,
119     const char  *op_ptr,  int    op_len,
120     const char  *arg_ptr, int    arg_len,
121     const char  *val_ptr, int    val_len,
122     const char **out_ptr, int    *out_len, int *out_size
123 );
124
125
126 var_rc_t  var_create    (var_t **var);
127 var_rc_t  var_destroy   (var_t  *var);
128 var_rc_t  var_config    (var_t  *var, var_config_t mode, ...);
129 var_rc_t  var_unescape  (var_t  *var, const char *src_ptr, int src_len, char  *dst_ptr, int dst_len, int all);
130 var_rc_t  var_expand    (var_t  *var, const char *src_ptr, int src_len, char **dst_ptr, int *dst_len, int force_expand);
131 var_rc_t  var_formatv   (var_t  *var, char **dst_ptr, int force_expand, const char *fmt, va_list ap);
132 var_rc_t  var_format    (var_t  *var, char **dst_ptr, int force_expand, const char *fmt, ...);
133 const char *var_strerror  (var_t  *var, var_rc_t rc);
134
135 #endif /* __VAR_H__ */