| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/bash/src/assoc.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 2 | * assoc.c - functions to manipulate associative arrays | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 3 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 4 | * Associative arrays are standard shell hash tables. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 5 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 6 | * Chet Ramey | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 7 | * chet@ins.cwru.edu | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 8 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 9 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 10 | /* Copyright (C) 2008,2009,2011 Free Software Foundation, Inc. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 11 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 12 | This file is part of GNU Bash, the Bourne Again SHell. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 13 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 14 | Bash is free software: you can redistribute it and/or modify | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 15 | it under the terms of the GNU General Public License as published by | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 16 | the Free Software Foundation, either version 3 of the License, or | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 17 | (at your option) any later version. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 18 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 19 | Bash is distributed in the hope that it will be useful, | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 22 | GNU General Public License for more details. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 23 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 24 | You should have received a copy of the GNU General Public License | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 25 | along with Bash. If not, see <http://www.gnu.org/licenses/>. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 26 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 27 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 28 | #include "config.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 29 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 30 | #if defined (ARRAY_VARS) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 31 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 32 | #if defined (HAVE_UNISTD_H) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 33 | # ifdef _MINIX | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 34 | # include <sys/types.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 35 | # endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 36 | # include <unistd.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 37 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 38 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 39 | #include <stdio.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 40 | #include "bashansi.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 41 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 42 | #include "shell.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 43 | #include "array.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 44 | #include "assoc.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 45 | #include "builtins/common.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 46 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 47 | static WORD_LIST *assoc_to_word_list_internal __P((HASH_TABLE *, int)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 48 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 49 | /* assoc_create == hash_create */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 50 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 51 | void | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 52 | assoc_dispose (hash) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 53 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 54 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 55 | if (hash)
| 0-111 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 56 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 57 | hash_flush (hash, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 58 | hash_dispose (hash); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 59 | } executed 111 times by 1 test: end of blockExecuted by:
| 111 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 60 | } executed 111 times by 1 test: end of blockExecuted by:
| 111 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 61 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 62 | void | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 63 | assoc_flush (hash) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 64 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 65 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 66 | hash_flush (hash, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 67 | } executed 70 times by 1 test: end of blockExecuted by:
| 70 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 68 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 69 | int | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 70 | assoc_insert (hash, key, value) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 71 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 72 | char *key; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 73 | char *value; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 74 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 75 | BUCKET_CONTENTS *b; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 76 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 77 | b = hash_search (key, hash, HASH_CREATE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 78 | if (b == 0)
| 0-590 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 79 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 80 | /* If we are overwriting an existing element's value, we're not going to | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 81 | use the key. Nothing in the array assignment code path frees the key | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 82 | string, so we can free it here to avoid a memory leak. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 83 | if (b->key != key)
| 28-562 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 84 | free (key); executed 28 times by 1 test: sh_xfree((key), "assoc.c", 84);Executed by:
| 28 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 85 | FREE (b->data); executed 28 times by 1 test: sh_xfree((b->data), "assoc.c", 85);Executed by:
| 28-562 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 86 | b->data = value ? savestring (value) : (char *)0;
| 0-590 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 87 | return (0); executed 590 times by 1 test: return (0);Executed by:
| 590 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 88 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 89 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 90 | /* Like assoc_insert, but returns b->data instead of freeing it */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 91 | PTR_T | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 92 | assoc_replace (hash, key, value) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 93 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 94 | char *key; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 95 | char *value; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 96 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 97 | BUCKET_CONTENTS *b; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 98 | PTR_T t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 99 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 100 | b = hash_search (key, hash, HASH_CREATE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 101 | if (b == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 102 | return (PTR_T)0; never executed: return (void *)0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 103 | /* If we are overwriting an existing element's value, we're not going to | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 104 | use the key. Nothing in the array assignment code path frees the key | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 105 | string, so we can free it here to avoid a memory leak. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 106 | if (b->key != key)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 107 | free (key); never executed: sh_xfree((key), "assoc.c", 107); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 108 | t = b->data; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 109 | b->data = value ? savestring (value) : (char *)0;
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 110 | return t; never executed: return t; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 111 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 112 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 113 | void | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 114 | assoc_remove (hash, string) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 115 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 116 | char *string; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 117 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 118 | BUCKET_CONTENTS *b; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 119 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 120 | b = hash_remove (string, hash, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 121 | if (b)
| 0-9 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 122 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 123 | free ((char *)b->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 124 | free (b->key); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 125 | free (b); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 126 | } executed 9 times by 1 test: end of blockExecuted by:
| 9 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 127 | } executed 9 times by 1 test: end of blockExecuted by:
| 9 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 128 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 129 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 130 | assoc_reference (hash, string) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 131 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 132 | char *string; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 133 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 134 | BUCKET_CONTENTS *b; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 135 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 136 | if (hash == 0)
| 0-88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 137 | return (char *)0; never executed: return (char *)0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 138 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 139 | b = hash_search (string, hash, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 140 | return (b ? (char *)b->data : 0); executed 88 times by 1 test: return (b ? (char *)b->data : 0);Executed by:
| 88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 141 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 142 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 143 | /* Quote the data associated with each element of the hash table ASSOC, | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 144 | using quote_string */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 145 | HASH_TABLE * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 146 | assoc_quote (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 147 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 148 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 149 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 150 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 151 | char *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 152 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 153 | if (h == 0 || assoc_empty (h))
| 0-10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 154 | return ((HASH_TABLE *)NULL); never executed: return ((HASH_TABLE *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 155 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 156 | for (i = 0; i < h->nbuckets; i++)
| 10-1280 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 157 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 56-1280 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 158 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 159 | t = quote_string ((char *)tlist->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 160 | FREE (tlist->data); executed 56 times by 1 test: sh_xfree((tlist->data), "assoc.c", 160);Executed by:
| 0-56 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 161 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 162 | } executed 56 times by 1 test: end of blockExecuted by:
| 56 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 163 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 164 | return h; executed 10 times by 1 test: return h;Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 165 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 166 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 167 | /* Quote escape characters in the data associated with each element | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 168 | of the hash table ASSOC, using quote_escapes */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 169 | HASH_TABLE * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 170 | assoc_quote_escapes (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 171 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 172 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 173 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 174 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 175 | char *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 176 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 177 | if (h == 0 || assoc_empty (h))
| 0-10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 178 | return ((HASH_TABLE *)NULL); never executed: return ((HASH_TABLE *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 179 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 180 | for (i = 0; i < h->nbuckets; i++)
| 10-1280 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 181 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 32-1280 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 182 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 183 | t = quote_escapes ((char *)tlist->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 184 | FREE (tlist->data); executed 32 times by 1 test: sh_xfree((tlist->data), "assoc.c", 184);Executed by:
| 0-32 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 185 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 186 | } executed 32 times by 1 test: end of blockExecuted by:
| 32 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 187 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 188 | return h; executed 10 times by 1 test: return h;Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 189 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 190 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 191 | HASH_TABLE * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 192 | assoc_dequote (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 193 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 194 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 195 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 196 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 197 | char *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 198 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 199 | if (h == 0 || assoc_empty (h))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 200 | return ((HASH_TABLE *)NULL); never executed: return ((HASH_TABLE *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 201 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 202 | for (i = 0; i < h->nbuckets; i++)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 203 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 204 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 205 | t = dequote_string ((char *)tlist->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 206 | FREE (tlist->data); never executed: sh_xfree((tlist->data), "assoc.c", 206);
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 207 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 208 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 209 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 210 | return h; never executed: return h; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 211 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 212 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 213 | HASH_TABLE * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 214 | assoc_dequote_escapes (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 215 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 216 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 217 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 218 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 219 | char *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 220 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 221 | if (h == 0 || assoc_empty (h))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 222 | return ((HASH_TABLE *)NULL); never executed: return ((HASH_TABLE *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 223 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 224 | for (i = 0; i < h->nbuckets; i++)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 225 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 226 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 227 | t = dequote_escapes ((char *)tlist->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 228 | FREE (tlist->data); never executed: sh_xfree((tlist->data), "assoc.c", 228);
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 229 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 230 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 231 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 232 | return h; never executed: return h; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 233 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 234 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 235 | HASH_TABLE * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 236 | assoc_remove_quoted_nulls (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 237 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 238 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 239 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 240 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 241 | char *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 242 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 243 | if (h == 0 || assoc_empty (h))
| 0-3 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 244 | return ((HASH_TABLE *)NULL); never executed: return ((HASH_TABLE *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 245 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 246 | for (i = 0; i < h->nbuckets; i++)
| 3-384 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 247 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 12-384 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 248 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 249 | t = remove_quoted_nulls ((char *)tlist->data); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 250 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 251 | } executed 12 times by 1 test: end of blockExecuted by:
| 12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 252 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 253 | return h; executed 3 times by 1 test: return h;Executed by:
| 3 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 254 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 255 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 256 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 257 | * Return a string whose elements are the members of array H beginning at | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 258 | * the STARTth element and spanning NELEM members. Null elements are counted. | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 259 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 260 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 261 | assoc_subrange (hash, start, nelem, starsub, quoted) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 262 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 263 | arrayind_t start, nelem; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 264 | int starsub, quoted; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 265 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 266 | WORD_LIST *l, *save, *h, *t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 267 | int i, j; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 268 | char *ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 269 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 270 | if (assoc_empty (hash))
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 271 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 272 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 273 | save = l = assoc_to_word_list (hash); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 274 | if (save == 0)
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 275 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 276 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 277 | for (i = 1; l && i < start; i++)
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 278 | l = l->next; never executed: l = l->next; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 279 | if (l == 0)
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 280 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 281 | dispose_words (save); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 282 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 283 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 284 | for (j = 0,h = t = l; l && j < nelem; j++)
| 0-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 285 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 286 | t = l; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 287 | l = l->next; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 288 | } executed 8 times by 1 test: end of blockExecuted by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 289 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 290 | t->next = (WORD_LIST *)NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 291 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 292 | ret = string_list_pos_params (starsub ? '*' : '@', h, quoted); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 293 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 294 | if (t != l)
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 295 | t->next = l; executed 2 times by 1 test: t->next = l;Executed by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 296 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 297 | dispose_words (save); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 298 | return (ret); executed 2 times by 1 test: return (ret);Executed by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 299 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 300 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 301 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 302 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 303 | assoc_patsub (h, pat, rep, mflags) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 304 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 305 | char *pat, *rep; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 306 | int mflags; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 307 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 308 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 309 | int i, slen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 310 | HASH_TABLE *h2; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 311 | char *t, *sifs, *ifs; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 312 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 313 | if (h == 0 || assoc_empty (h))
| 0-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 314 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 315 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 316 | h2 = assoc_copy (h); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 317 | for (i = 0; i < h2->nbuckets; i++)
| 8-1024 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 318 | for (tlist = hash_items (i, h2); tlist; tlist = tlist->next)
| 56-1024 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 319 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 320 | t = pat_subst ((char *)tlist->data, pat, rep, mflags); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 321 | FREE (tlist->data); executed 56 times by 1 test: sh_xfree((tlist->data), "assoc.c", 321);Executed by:
| 0-56 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 322 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 323 | } executed 56 times by 1 test: end of blockExecuted by:
| 56 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 324 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 325 | if (mflags & MATCH_QUOTED)
| 2-6 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 326 | assoc_quote (h2); executed 6 times by 1 test: assoc_quote (h2);Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 327 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 328 | assoc_quote_escapes (h2); executed 2 times by 1 test: assoc_quote_escapes (h2);Executed by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 329 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 330 | if (mflags & MATCH_STARSUB)
| 1-7 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 331 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 332 | assoc_remove_quoted_nulls (h2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 333 | sifs = ifs_firstchar ((int *)NULL); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 334 | t = assoc_to_string (h2, sifs, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 335 | free (sifs); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 336 | } executed 1 time by 1 test: end of blockExecuted by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 337 | else if (mflags & MATCH_QUOTED)
| 2-5 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 338 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 339 | /* ${array[@]} */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 340 | sifs = ifs_firstchar (&slen); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 341 | ifs = getifs (); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 342 | if (ifs == 0 || *ifs == 0)
| 0-5 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 343 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 344 | if (slen < 2)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 345 | sifs = xrealloc (sifs, 2); never executed: sifs = sh_xrealloc((sifs), (2), "assoc.c", 345); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 346 | sifs[0] = ' '; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 347 | sifs[1] = '\0'; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 348 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 349 | t = assoc_to_string (h2, sifs, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 350 | free(sifs); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 351 | } executed 5 times by 1 test: end of blockExecuted by:
| 5 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 352 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 353 | t = assoc_to_string (h2, " ", 0); executed 2 times by 1 test: t = assoc_to_string (h2, " ", 0);Executed by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 354 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 355 | assoc_dispose (h2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 356 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 357 | return t; executed 8 times by 1 test: return t;Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 358 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 359 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 360 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 361 | assoc_modcase (h, pat, modop, mflags) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 362 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 363 | char *pat; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 364 | int modop; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 365 | int mflags; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 366 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 367 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 368 | int i, slen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 369 | HASH_TABLE *h2; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 370 | char *t, *sifs, *ifs; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 371 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 372 | if (h == 0 || assoc_empty (h))
| 0-12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 373 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 374 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 375 | h2 = assoc_copy (h); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 376 | for (i = 0; i < h2->nbuckets; i++)
| 12-1536 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 377 | for (tlist = hash_items (i, h2); tlist; tlist = tlist->next)
| 32-1536 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 378 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 379 | t = sh_modcase ((char *)tlist->data, pat, modop); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 380 | FREE (tlist->data); executed 32 times by 1 test: sh_xfree((tlist->data), "assoc.c", 380);Executed by:
| 0-32 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 381 | tlist->data = t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 382 | } executed 32 times by 1 test: end of blockExecuted by:
| 32 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 383 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 384 | if (mflags & MATCH_QUOTED)
| 4-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 385 | assoc_quote (h2); executed 4 times by 1 test: assoc_quote (h2);Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 386 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 387 | assoc_quote_escapes (h2); executed 8 times by 1 test: assoc_quote_escapes (h2);Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 388 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 389 | if (mflags & MATCH_STARSUB)
| 2-10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 390 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 391 | assoc_remove_quoted_nulls (h2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 392 | sifs = ifs_firstchar ((int *)NULL); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 393 | t = assoc_to_string (h2, sifs, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 394 | free (sifs); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 395 | } executed 2 times by 1 test: end of blockExecuted by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 396 | else if (mflags & MATCH_QUOTED)
| 2-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 397 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 398 | /* ${array[@]} */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 399 | sifs = ifs_firstchar (&slen); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 400 | ifs = getifs (); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 401 | if (ifs == 0 || *ifs == 0)
| 0-2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 402 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 403 | if (slen < 2)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 404 | sifs = xrealloc (sifs, 2); never executed: sifs = sh_xrealloc((sifs), (2), "assoc.c", 404); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 405 | sifs[0] = ' '; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 406 | sifs[1] = '\0'; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 407 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 408 | t = assoc_to_string (h2, sifs, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 409 | free(sifs); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 410 | } executed 2 times by 1 test: end of blockExecuted by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 411 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 412 | t = assoc_to_string (h2, " ", 0); executed 8 times by 1 test: t = assoc_to_string (h2, " ", 0);Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 413 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 414 | assoc_dispose (h2); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 415 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 416 | return t; executed 12 times by 1 test: return t;Executed by:
| 12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 417 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 418 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 419 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 420 | assoc_to_assign (hash, quoted) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 421 | HASH_TABLE *hash; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 422 | int quoted; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 423 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 424 | char *ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 425 | char *istr, *vstr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 426 | int i, rsize, rlen, elen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 427 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 428 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 429 | if (hash == 0 || assoc_empty (hash))
| 0-121 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 430 | return (char *)0; executed 34 times by 1 test: return (char *)0;Executed by:
| 34 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 431 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 432 | ret = xmalloc (rsize = 128); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 433 | ret[0] = '('; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 434 | rlen = 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 435 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 436 | for (i = 0; i < hash->nbuckets; i++)
| 87-11136 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 437 | for (tlist = hash_items (i, hash); tlist; tlist = tlist->next)
| 194-11136 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 438 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 439 | if (ansic_shouldquote (tlist->key))
| 1-193 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 440 | istr = ansic_quote (tlist->key, 0, (int *)0); executed 1 time by 1 test: istr = ansic_quote (tlist->key, 0, (int *)0);Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 441 | else if (sh_contains_shell_metas (tlist->key))
| 70-123 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 442 | istr = sh_double_quote (tlist->key); executed 70 times by 1 test: istr = sh_double_quote (tlist->key);Executed by:
| 70 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 443 | else if (ALL_ELEMENT_SUB (tlist->key[0]) && tlist->key[1] == '\0')
| 0-123 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 444 | istr = sh_double_quote (tlist->key); never executed: istr = sh_double_quote (tlist->key); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 445 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 446 | istr = tlist->key; executed 123 times by 1 test: istr = tlist->key;Executed by:
| 123 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 447 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 448 | vstr = tlist->data ? (ansic_shouldquote ((char *)tlist->data) ?
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 449 | ansic_quote ((char *)tlist->data, 0, (int *)0) : | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 450 | sh_double_quote ((char *)tlist->data)) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 451 | : (char *)0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 452 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 453 | elen = STRLEN (istr) + 8 + STRLEN (vstr);
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 454 | RESIZE_MALLOCED_BUFFER (ret, rlen, (elen+1), rsize, rsize); never executed: rsize += (rsize);never executed: end of block
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 455 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 456 | ret[rlen++] = '['; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 457 | strcpy (ret+rlen, istr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 458 | rlen += STRLEN (istr);
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 459 | ret[rlen++] = ']'; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 460 | ret[rlen++] = '='; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 461 | if (vstr)
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 462 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 463 | strcpy (ret + rlen, vstr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 464 | rlen += STRLEN (vstr);
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 465 | } executed 194 times by 1 test: end of blockExecuted by:
| 194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 466 | ret[rlen++] = ' '; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 467 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 468 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 469 | if (istr != tlist->key)
| 71-123 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 470 | FREE (istr); executed 71 times by 1 test: sh_xfree((istr), "assoc.c", 470);Executed by:
executed 71 times by 1 test: end of blockExecuted by:
| 0-71 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 471 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 472 | FREE (vstr); executed 194 times by 1 test: sh_xfree((vstr), "assoc.c", 472);Executed by:
| 0-194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 473 | } executed 194 times by 1 test: end of blockExecuted by:
| 194 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 474 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 475 | RESIZE_MALLOCED_BUFFER (ret, rlen, 1, rsize, 8); never executed: rsize += (8);never executed: end of block
| 0-87 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 476 | ret[rlen++] = ')'; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 477 | ret[rlen] = '\0'; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 478 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 479 | if (quoted)
| 0-87 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 480 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 481 | vstr = sh_single_quote (ret); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 482 | free (ret); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 483 | ret = vstr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 484 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 485 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 486 | return ret; executed 87 times by 1 test: return ret;Executed by:
| 87 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 487 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 488 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 489 | static WORD_LIST * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 490 | assoc_to_word_list_internal (h, t) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 491 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 492 | int t; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 493 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 494 | WORD_LIST *list; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 495 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 496 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 497 | char *w; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 498 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 499 | if (h == 0 || assoc_empty (h))
| 0-129 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 500 | return((WORD_LIST *)NULL); executed 1 time by 1 test: return((WORD_LIST *) ((void *)0) );Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 501 | list = (WORD_LIST *)NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 502 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 503 | for (i = 0; i < h->nbuckets; i++)
| 128-15872 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 504 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 424-15872 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 505 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 506 | w = (t == 0) ? (char *)tlist->data : (char *)tlist->key;
| 57-367 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 507 | list = make_word_list (make_bare_word(w), list); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 508 | } executed 424 times by 1 test: end of blockExecuted by:
| 424 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 509 | return (REVERSE_LIST(list, WORD_LIST *)); executed 128 times by 1 test: return (((list && list->next) ? (WORD_LIST *)list_reverse ((GENERIC_LIST *)list) : (WORD_LIST *)(list)));Executed by:
| 128 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 510 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 511 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 512 | WORD_LIST * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 513 | assoc_to_word_list (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 514 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 515 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 516 | return (assoc_to_word_list_internal (h, 0)); executed 97 times by 1 test: return (assoc_to_word_list_internal (h, 0));Executed by:
| 97 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 517 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 518 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 519 | WORD_LIST * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 520 | assoc_keys_to_word_list (h) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 521 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 522 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 523 | return (assoc_to_word_list_internal (h, 1)); executed 32 times by 1 test: return (assoc_to_word_list_internal (h, 1));Executed by:
| 32 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 524 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 525 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 526 | char * | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 527 | assoc_to_string (h, sep, quoted) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 528 | HASH_TABLE *h; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 529 | char *sep; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 530 | int quoted; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 531 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 532 | BUCKET_CONTENTS *tlist; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 533 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 534 | char *result, *t, *w; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 535 | WORD_LIST *list, *l; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 536 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 537 | if (h == 0)
| 0-20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 538 | return ((char *)NULL); never executed: return ((char *) ((void *)0) ); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 539 | if (assoc_empty (h))
| 0-20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 540 | return (savestring ("")); never executed: return ((char *)strcpy (sh_xmalloc((1 + strlen ("")), "assoc.c", 540), (""))); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 541 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 542 | result = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 543 | l = list = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 544 | /* This might be better implemented directly, but it's simple to implement | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 545 | by converting to a word list first, possibly quoting the data, then | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 546 | using list_string */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 547 | for (i = 0; i < h->nbuckets; i++)
| 20-2560 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 548 | for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
| 88-2560 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 549 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 550 | w = (char *)tlist->data; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 551 | if (w == 0)
| 0-88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 552 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 553 | t = quoted ? quote_string (w) : savestring (w);
| 0-88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 554 | list = make_word_list (make_bare_word(t), list); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 555 | FREE (t); executed 88 times by 1 test: sh_xfree((t), "assoc.c", 555);Executed by:
| 0-88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 556 | } executed 88 times by 1 test: end of blockExecuted by:
| 88 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 557 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 558 | l = REVERSE_LIST(list, WORD_LIST *);
| 0-20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 559 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 560 | result = l ? string_list_internal (l, sep) : savestring ("");
| 0-20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 561 | dispose_words (l); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 562 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 563 | return result; executed 20 times by 1 test: return result;Executed by:
| 20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 564 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 565 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 566 | #endif /* ARRAY_VARS */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| Source code | Switch to Preprocessed file |