]> git.ipfire.org Git - thirdparty/bash.git/blame - arrayfunc.h
second set of ANSI C changes: C89-style function declarations, more inline functions...
[thirdparty/bash.git] / arrayfunc.h
CommitLineData
f73dda09
JA
1/* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
2
81e3a4fb 3/* Copyright (C) 2001-2022 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
81e3a4fb
CR
76extern SHELL_VAR *convert_var_to_array (SHELL_VAR *);
77extern SHELL_VAR *convert_var_to_assoc (SHELL_VAR *);
f73dda09 78
81e3a4fb 79extern char *make_array_variable_value (SHELL_VAR *, arrayind_t, char *, char *, int);
861a1900 80
81e3a4fb
CR
81extern SHELL_VAR *bind_array_variable (char *, arrayind_t, char *, int);
82extern SHELL_VAR *bind_array_element (SHELL_VAR *, arrayind_t, char *, int);
83extern SHELL_VAR *assign_array_element (char *, char *, int, array_eltstate_t *);
f73dda09 84
81e3a4fb 85extern SHELL_VAR *bind_assoc_variable (SHELL_VAR *, char *, char *, char *, int);
a3143574 86
81e3a4fb 87extern SHELL_VAR *find_or_make_array_variable (char *, int);
f73dda09 88
81e3a4fb
CR
89extern SHELL_VAR *assign_array_from_string (char *, char *, int);
90extern SHELL_VAR *assign_array_var_from_word_list (SHELL_VAR *, WORD_LIST *, int);
d3ad40de 91
81e3a4fb
CR
92extern WORD_LIST *expand_compound_array_assignment (SHELL_VAR *, char *, int);
93extern void assign_compound_array_list (SHELL_VAR *, WORD_LIST *, int);
94extern SHELL_VAR *assign_array_var_from_string (SHELL_VAR *, char *, int);
f73dda09 95
81e3a4fb
CR
96extern char *expand_and_quote_assoc_word (char *, int);
97extern void quote_compound_array_list (WORD_LIST *, int);
fdf670ea 98
81e3a4fb
CR
99extern int kvpair_assignment_p (WORD_LIST *);
100extern char *expand_and_quote_kvpair_word (char *);
11262b0b 101
81e3a4fb
CR
102extern int unbind_array_element (SHELL_VAR *, char *, int);
103extern int skipsubscript (const char *, int, int);
f73dda09 104
81e3a4fb
CR
105extern void print_array_assignment (SHELL_VAR *, int);
106extern void print_assoc_assignment (SHELL_VAR *, int);
f73dda09 107
81e3a4fb
CR
108extern arrayind_t array_expand_index (SHELL_VAR *, char *, int, int);
109extern int valid_array_reference (const char *, int);
110extern int tokenize_array_reference (char *, int, char **);
4657c040 111
81e3a4fb
CR
112extern char *array_value (const char *, int, int, array_eltstate_t *);
113extern char *get_array_value (const char *, int, array_eltstate_t *);
d3a24ed2 114
81e3a4fb 115extern char *array_keys (char *, int, int);
c6c7ae81 116
81e3a4fb
CR
117extern char *array_variable_name (const char *, int, char **, int *);
118extern SHELL_VAR *array_variable_part (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_ */