]> git.ipfire.org Git - thirdparty/bash.git/blame - arrayfunc.h
fix for optimizing issues in sourced files; change to printf documentation to specify...
[thirdparty/bash.git] / arrayfunc.h
CommitLineData
f73dda09
JA
1/* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
2
4657c040 3/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
f73dda09
JA
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
2e4498b3
CR
7 Bash is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
f73dda09 11
2e4498b3
CR
12 Bash is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
f73dda09
JA
16
17 You should have received a copy of the GNU General Public License
2e4498b3
CR
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.
19*/
f73dda09
JA
20
21#if !defined (_ARRAYFUNC_H_)
22#define _ARRAYFUNC_H_
23
24/* Must include variables.h before including this file. */
25
b2b78a63
CR
26/* An object to encapsulate the state of an array element. It can describe
27 an array assignment A[KEY]=VALUE or a[IND]=VALUE depending on TYPE, or
28 for passing array subscript references around, where VALUE would be
29 ${a[IND]} or ${A[KEY]}. This is not dependent on ARRAY_VARS so we can
30 use it in function parameters. */
31
32/* values for `type' field */
33#define ARRAY_INVALID -1
34#define ARRAY_SCALAR 0
35#define ARRAY_INDEXED 1
36#define ARRAY_ASSOC 2
37
38/* KEY will contain allocated memory if called through the assign_array_element
39 code path because of how assoc_insert works. */
40typedef struct element_state
41{
42 short type; /* assoc or indexed, says which fields are valid */
43 short subtype; /* `*', `@', or something else */
44 arrayind_t ind;
45 char *key; /* can be allocated memory */
46 char *value;
47} array_eltstate_t;
48
f73dda09
JA
49#if defined (ARRAY_VARS)
50
a57ed9e9
CR
51/* This variable means to not expand associative array subscripts more than
52 once, when performing variable expansion. */
53extern int assoc_expand_once;
54
ec157dfe
CR
55/* The analog for indexed array subscripts */
56extern int array_expand_once;
57
1d17c604
CR
58/* Flags for array_value_internal and callers array_value/get_array_value; also
59 used by array_variable_name and array_variable_part. */
a30f513f 60#define AV_ALLOWALL 0x001 /* treat a[@] like $@ and a[*] like $* */
5f8cde23
CR
61#define AV_QUOTED 0x002
62#define AV_USEIND 0x004
06c3a575 63#define AV_USEVAL 0x008 /* XXX - should move this */
13eae87b 64#define AV_ASSIGNRHS 0x010 /* no splitting, special case ${a[@]} */
a57ed9e9 65#define AV_NOEXPAND 0x020 /* don't run assoc subscripts through word expansion */
a30f513f
CR
66#define AV_ONEWORD 0x040 /* not used yet */
67#define AV_ATSTARKEYS 0x080 /* accept a[@] and a[*] but use them as keys, not special values */
5f8cde23 68
0e513453 69/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript().
fb4ddc2d
CR
70 Also used by unbind_array_element, which is currently the only function
71 that uses VA_ALLOWALL. */
5fab8dbf
CR
72#define VA_NOEXPAND 0x001
73#define VA_ONEWORD 0x002
0e513453 74#define VA_ALLOWALL 0x004 /* allow @ to mean all elements of the array */
5fab8dbf 75
c6c7ae81
CR
76extern SHELL_VAR *convert_var_to_array PARAMS((SHELL_VAR *));
77extern SHELL_VAR *convert_var_to_assoc PARAMS((SHELL_VAR *));
f73dda09 78
c6c7ae81 79extern char *make_array_variable_value PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int));
861a1900 80
c6c7ae81
CR
81extern SHELL_VAR *bind_array_variable PARAMS((char *, arrayind_t, char *, int));
82extern SHELL_VAR *bind_array_element PARAMS((SHELL_VAR *, arrayind_t, char *, int));
b2b78a63 83extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int, array_eltstate_t *));
f73dda09 84
c6c7ae81 85extern SHELL_VAR *bind_assoc_variable PARAMS((SHELL_VAR *, char *, char *, char *, int));
a3143574 86
c6c7ae81 87extern SHELL_VAR *find_or_make_array_variable PARAMS((char *, int));
f73dda09 88
c6c7ae81
CR
89extern SHELL_VAR *assign_array_from_string PARAMS((char *, char *, int));
90extern SHELL_VAR *assign_array_var_from_word_list PARAMS((SHELL_VAR *, WORD_LIST *, int));
d3ad40de 91
c6c7ae81
CR
92extern WORD_LIST *expand_compound_array_assignment PARAMS((SHELL_VAR *, char *, int));
93extern void assign_compound_array_list PARAMS((SHELL_VAR *, WORD_LIST *, int));
94extern SHELL_VAR *assign_array_var_from_string PARAMS((SHELL_VAR *, char *, int));
f73dda09 95
c6c7ae81
CR
96extern char *expand_and_quote_assoc_word PARAMS((char *, int));
97extern void quote_compound_array_list PARAMS((WORD_LIST *, int));
fdf670ea 98
11262b0b
CR
99extern int kvpair_assignment_p PARAMS((WORD_LIST *));
100extern char *expand_and_quote_kvpair_word PARAMS((char *));
101
c6c7ae81
CR
102extern int unbind_array_element PARAMS((SHELL_VAR *, char *, int));
103extern int skipsubscript PARAMS((const char *, int, int));
f73dda09 104
c6c7ae81
CR
105extern void print_array_assignment PARAMS((SHELL_VAR *, int));
106extern void print_assoc_assignment PARAMS((SHELL_VAR *, int));
f73dda09 107
c6c7ae81
CR
108extern arrayind_t array_expand_index PARAMS((SHELL_VAR *, char *, int, int));
109extern int valid_array_reference PARAMS((const char *, int));
4657c040
CR
110extern int tokenize_array_reference PARAMS((char *, int, char **));
111
b2b78a63
CR
112extern char *array_value PARAMS((const char *, int, int, array_eltstate_t *));
113extern char *get_array_value PARAMS((const char *, int, array_eltstate_t *));
d3a24ed2 114
c6c7ae81
CR
115extern char *array_keys PARAMS((char *, int, int));
116
117extern char *array_variable_name PARAMS((const char *, int, char **, int *));
118extern SHELL_VAR *array_variable_part PARAMS((const char *, int, char **, int *));
f73dda09 119
b2b78a63
CR
120extern void init_eltstate (array_eltstate_t *);
121extern void flush_eltstate (array_eltstate_t *);
122
c31d56a7
CR
123#else
124
125#define AV_ALLOWALL 0
126#define AV_QUOTED 0
127#define AV_USEIND 0
a30f513f 128#define AV_USEVAL 0
13eae87b 129#define AV_ASSIGNRHS 0
a30f513f
CR
130#define AV_NOEXPAND 0
131#define AV_ONEWORD 0
132#define AV_ATSTARKEYS 0
c31d56a7 133
0e513453 134#define VA_NOEXPAND 0
5fab8dbf 135#define VA_ONEWORD 0
0e513453 136#define VA_ALLOWALL 0
5fab8dbf 137
f73dda09
JA
138#endif
139
140#endif /* !_ARRAYFUNC_H_ */