OpenCoverage

list.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/list.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* list.c - Functions for manipulating linked lists of objects. */-
2-
3/* Copyright (C) 1996-2009 Free Software Foundation, Inc.-
4-
5 This file is part of GNU Bash, the Bourne Again SHell.-
6-
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.-
11-
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.-
16-
17 You should have received a copy of the GNU General Public License-
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.-
19*/-
20-
21#include "config.h"-
22-
23#if defined (HAVE_UNISTD_H)-
24# ifdef _MINIX-
25# include <sys/types.h>-
26# endif-
27# include <unistd.h>-
28#endif-
29-
30#include "shell.h"-
31-
32/* A global variable which acts as a sentinel for an `error' list return. */-
33GENERIC_LIST global_error_list;-
34-
35#ifdef INCLUDE_UNUSED-
36/* Call FUNCTION on every member of LIST, a generic list. */-
37void-
38list_walk (list, function)-
39 GENERIC_LIST *list;-
40 sh_glist_func_t *function;-
41{-
42 for ( ; list; list = list->next)-
43 if ((*function) (list) < 0)-
44 return;-
45}-
46-
47/* Call FUNCTION on every string in WORDS. */-
48void-
49wlist_walk (words, function)-
50 WORD_LIST *words;-
51 sh_icpfunc_t *function;-
52{-
53 for ( ; words; words = words->next)-
54 if ((*function) (words->word->word) < 0)-
55 return;-
56}-
57#endif /* INCLUDE_UNUSED */-
58-
59/* Reverse the chain of structures in LIST. Output the new head-
60 of the chain. You should always assign the output value of this-
61 function to something, or you will lose the chain. */-
62GENERIC_LIST *-
63list_reverse (list)-
64 GENERIC_LIST *list;-
65{-
66 register GENERIC_LIST *next, *prev;-
67-
68 for (prev = (GENERIC_LIST *)NULL; list; )
listDescription
TRUEevaluated 195865297 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 66984411 times by 1 test
Evaluated by:
  • Self test
66984411-195865297
69 {-
70 next = list->next;-
71 list->next = prev;-
72 prev = list;-
73 list = next;-
74 }
executed 195865297 times by 1 test: end of block
Executed by:
  • Self test
195865297
75 return (prev);
executed 66984411 times by 1 test: return (prev);
Executed by:
  • Self test
66984411
76}-
77-
78/* Return the number of elements in LIST, a generic list. */-
79int-
80list_length (list)-
81 GENERIC_LIST *list;-
82{-
83 register int i;-
84-
85 for (i = 0; list; list = list->next, i++);
executed 15283 times by 1 test: ;
Executed by:
  • Self test
listDescription
TRUEevaluated 15283 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4463 times by 1 test
Evaluated by:
  • Self test
4463-15283
86 return (i);
executed 4463 times by 1 test: return (i);
Executed by:
  • Self test
4463
87}-
88-
89/* Append TAIL to HEAD. Return the header of the list. */-
90GENERIC_LIST *-
91list_append (head, tail)-
92 GENERIC_LIST *head, *tail;-
93{-
94 register GENERIC_LIST *t_head;-
95-
96 if (head == 0)
head == 0Description
TRUEevaluated 9832 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 63631772 times by 1 test
Evaluated by:
  • Self test
9832-63631772
97 return (tail);
executed 9832 times by 1 test: return (tail);
Executed by:
  • Self test
9832
98-
99 for (t_head = head; t_head->next; t_head = t_head->next)
t_head->nextDescription
TRUEevaluated 5422533 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 63631772 times by 1 test
Evaluated by:
  • Self test
5422533-63631772
100 ;
executed 5422533 times by 1 test: ;
Executed by:
  • Self test
5422533
101 t_head->next = tail;-
102 return (head);
executed 63631772 times by 1 test: return (head);
Executed by:
  • Self test
63631772
103}-
104-
105#ifdef INCLUDE_UNUSED-
106/* Delete the element of LIST which satisfies the predicate function COMPARER.-
107 Returns the element that was deleted, so you can dispose of it, or -1 if-
108 the element wasn't found. COMPARER is called with the list element and-
109 then ARG. Note that LIST contains the address of a variable which points-
110 to the list. You might call this function like this:-
111-
112 SHELL_VAR *elt = list_remove (&variable_list, check_var_has_name, "foo");-
113 dispose_variable (elt);-
114*/-
115GENERIC_LIST *-
116list_remove (list, comparer, arg)-
117 GENERIC_LIST **list;-
118 Function *comparer;-
119 char *arg;-
120{-
121 register GENERIC_LIST *prev, *temp;-
122-
123 for (prev = (GENERIC_LIST *)NULL, temp = *list; temp; prev = temp, temp = temp->next)-
124 {-
125 if ((*comparer) (temp, arg))-
126 {-
127 if (prev)-
128 prev->next = temp->next;-
129 else-
130 *list = temp->next;-
131 return (temp);-
132 }-
133 }-
134 return ((GENERIC_LIST *)&global_error_list);-
135}-
136#endif-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2