1 /* 2 * Copyright (c) 2001-2002 Ralf S. Engelschall <rse@engelschall.com> 3 * Copyright (c) 2001-2002 The OSSP Project (http://www.ossp.org/) 4 * Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/) 5 * 6 * This file is part of OSSP var, a variable expansion 7 * library which can be found at http://www.ossp.org/pkg/lib/var/. 8 * 9 * Permission to use, copy, modify, and distribute this software for 10 * any purpose with or without fee is hereby granted, provided that 11 * the above copyright notice and this permission notice appear in all 12 * copies. 13 * 14 * For disclaimer see below. 15 */ 16 /* 17 * Modified for use with BACULA by Kern Sibbald, June 2003 18 */ 19 /** 20 * @file 21 * OSSP var - Variable Expansion 22 */ 23 /* check-sources:disable-copyright-check */ 24 25 #ifndef BAREOS_LIB_VAR_H_ 26 #define BAREOS_LIB_VAR_H_ 27 28 /* Error codes */ 29 typedef enum 30 { 31 VAR_ERR_CALLBACK = -64, 32 VAR_ERR_FORMATTING_FAILURE = -45, 33 VAR_ERR_UNDEFINED_OPERATION = -44, 34 VAR_ERR_MALFORMED_OPERATION_ARGUMENTS = -43, 35 VAR_ERR_INVALID_CHAR_IN_LOOP_LIMITS = -42, 36 VAR_ERR_UNTERMINATED_LOOP_CONSTRUCT = -41, 37 VAR_ERR_DIVISION_BY_ZERO_IN_INDEX = -40, 38 VAR_ERR_UNCLOSED_BRACKET_IN_INDEX = -39, 39 VAR_ERR_INCOMPLETE_INDEX_SPEC = -37, 40 VAR_ERR_INVALID_CHAR_IN_INDEX_SPEC = -36, 41 VAR_ERR_ARRAY_LOOKUPS_ARE_UNSUPPORTED = -35, 42 VAR_ERR_INCOMPLETE_QUOTED_PAIR = -34, 43 VAR_ERR_INVALID_ARGUMENT = -34, 44 VAR_ERR_SUBMATCH_OUT_OF_RANGE = -33, 45 VAR_ERR_UNKNOWN_QUOTED_PAIR_IN_REPLACE = -32, 46 VAR_ERR_EMPTY_PADDING_FILL_STRING = -31, 47 VAR_ERR_MISSING_PADDING_WIDTH = -30, 48 VAR_ERR_MALFORMATTED_PADDING = -29, 49 VAR_ERR_INCORRECT_TRANSPOSE_CLASS_SPEC = -28, 50 VAR_ERR_EMPTY_TRANSPOSE_CLASS = -27, 51 VAR_ERR_TRANSPOSE_CLASSES_MISMATCH = -26, 52 VAR_ERR_MALFORMATTED_TRANSPOSE = -25, 53 VAR_ERR_OFFSET_LOGIC = -24, 54 VAR_ERR_OFFSET_OUT_OF_BOUNDS = -23, 55 VAR_ERR_RANGE_OUT_OF_BOUNDS = -22, 56 VAR_ERR_INVALID_OFFSET_DELIMITER = -21, 57 VAR_ERR_MISSING_START_OFFSET = -20, 58 VAR_ERR_EMPTY_SEARCH_STRING = -19, 59 VAR_ERR_MISSING_PARAMETER_IN_COMMAND = -18, 60 VAR_ERR_INVALID_REGEX_IN_REPLACE = -17, 61 VAR_ERR_UNKNOWN_REPLACE_FLAG = -16, 62 VAR_ERR_MALFORMATTED_REPLACE = -15, 63 VAR_ERR_UNKNOWN_COMMAND_CHAR = -14, 64 VAR_ERR_INPUT_ISNT_TEXT_NOR_VARIABLE = -13, 65 VAR_ERR_UNDEFINED_VARIABLE = -12, 66 VAR_ERR_INCOMPLETE_VARIABLE_SPEC = -11, 67 VAR_ERR_OUT_OF_MEMORY = -10, 68 VAR_ERR_INVALID_CONFIGURATION = -9, 69 VAR_ERR_INCORRECT_CLASS_SPEC = -8, 70 VAR_ERR_INCOMPLETE_GROUPED_HEX = -7, 71 VAR_ERR_INCOMPLETE_OCTAL = -6, 72 VAR_ERR_INVALID_OCTAL = -5, 73 VAR_ERR_OCTAL_TOO_LARGE = -4, 74 VAR_ERR_INVALID_HEX = -3, 75 VAR_ERR_INCOMPLETE_HEX = -2, 76 VAR_ERR_INCOMPLETE_NAMED_CHARACTER = -1, 77 VAR_OK = 0 78 } var_rc_t; 79 80 struct var_st; 81 typedef struct var_st var_t; 82 83 enum class var_config_t 84 { 85 VAR_CONFIG_SYNTAX, 86 VAR_CONFIG_CB_VALUE, 87 VAR_CONFIG_CB_OPERATION 88 }; 89 90 typedef struct { 91 char escape; /* default: '\' */ 92 char delim_init; /* default: '$' */ 93 char delim_open; /* default: '{' */ 94 char delim_close; /* default: '}' */ 95 char index_open; /* default: '[' */ 96 char index_close; /* default: ']' */ 97 char index_mark; /* default: '#' */ 98 const char* name_chars; /* default: "a-zA-Z0-9_" */ 99 } var_syntax_t; 100 101 typedef var_rc_t (*var_cb_value_t)(var_t* var, 102 void* ctx, 103 const char* var_ptr, 104 int var_len, 105 int var_inc, 106 int var_idx, 107 const char** val_ptr, 108 int* val_len, 109 int* val_size); 110 111 typedef var_rc_t (*var_cb_operation_t)(var_t* var, 112 void* ctx, 113 const char* op_ptr, 114 int op_len, 115 const char* arg_ptr, 116 int arg_len, 117 const char* val_ptr, 118 int val_len, 119 const char** out_ptr, 120 int* out_len, 121 int* out_size); 122 123 124 var_rc_t var_create(var_t** var); 125 var_rc_t var_destroy(var_t* var); 126 var_rc_t var_config(var_t* var, var_config_t mode, ...); 127 var_rc_t var_unescape(var_t* var, 128 const char* src_ptr, 129 int src_len, 130 char* dst_ptr, 131 int dst_len, 132 int all); 133 var_rc_t var_expand(var_t* var, 134 const char* src_ptr, 135 int src_len, 136 char** dst_ptr, 137 int* dst_len, 138 int force_expand); 139 var_rc_t var_formatv(var_t* var, 140 char** dst_ptr, 141 int force_expand, 142 const char* fmt, 143 va_list ap); 144 var_rc_t var_format(var_t* var, 145 char** dst_ptr, 146 int force_expand, 147 const char* fmt, 148 ...); 149 const char* var_strerror(var_t* var, var_rc_t rc); 150 151 #endif /* BAREOS_LIB_VAR_H_ */ 152