summaryrefslogtreecommitdiff
path: root/contrib/pgxc_ctl/variables.h
blob: d408c86fe1f4ba9ba4f7185ea6916fe20e94cef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*-------------------------------------------------------------------------
 *
 * variables.h
 *
 *    Variable handling module of Postgres-XC configuration and operation tool.
 *
 * Copyright (c) 2013 Postgres-XC Development Group
 *
 *-------------------------------------------------------------------------
 */
#ifndef VARIABLES_H
#define VARIABLES_H

#include <stdio.h>
#include <stdlib.h>
#define NUM_HASH_BUCKET 128

typedef struct pgxc_ctl_var {
	struct pgxc_ctl_var *next;
	struct pgxc_ctl_var *prev;
	char	*varname;
	int		val_size;		/*
							 * current size of the allocated array including
							 * place to store the NULL pointer as an
							 * end-of-array marker
							 */

	int		val_used;		/* currently used values */

	char	**val;			/* 
							 * max (val_size - 1) values and NULL as the last
							 * element
							 */
} pgxc_ctl_var;


extern pgxc_ctl_var *var_head;
extern pgxc_ctl_var *var_tail;

typedef struct pgxc_var_hash {
	int		el_size;
	int		el_used;
	pgxc_ctl_var **el;
} pgxc_var_hash;


pgxc_var_hash var_hash[NUM_HASH_BUCKET];

void init_var_hash(void);
void add_var_hash(pgxc_ctl_var *var);
pgxc_ctl_var *new_var(char *name);
void add_val(pgxc_ctl_var *var, char *val);
void add_val_name(char *name, char *val);
pgxc_ctl_var *find_var(char *name);
char *sval(char *name);
char **aval(char *name);
int arraySizeName(char *name);
int arraySize(pgxc_ctl_var *var);
void print_vars(void);
void print_var(char *vname);
void reset_value(pgxc_ctl_var *var);
void assign_val(char *dest, char *src);
void assign_sval(char *name, char *val);
void assign_arrayEl(char *name, int idx, char *val, char *pad);
void replace_arrayEl(char *name, int idx, char *val, char *pad);
pgxc_ctl_var *confirm_var(char *name);
void reset_var_val(char *name, char *val);
void reset_var(char *name);
void remove_var(pgxc_ctl_var *var);
void reset_value(pgxc_ctl_var *var);
void log_var(char *name);
char **add_member(char **array, char *val);
void var_assign(char **dest, char *src);
char  *listValue(char *name);
int extendVar(char *name, int newSize, char *def_value);
int doesExist(char *name, int idx);
void assign_arrayEl_internal(char *name, int idx, char *val, char *pad,
		int extend);

#define AddMember(a, b) do{if((a) == NULL) (a) = Malloc0(sizeof(char *)); (a) = add_member((a), (b));}while(0)
void clean_array(char **array);
#define CleanArray(a) do{clean_array(a); (a) = NULL;}while(0)
#define VAR(a) find_var(a)

int ifExists(char *name, char *value);
int IfExists(char *name, char *value);

#endif /* VARIABLES _H */