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