OpenCoverage

echo.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/echo.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* echo.c, derived from code echo.c in Bash.-
2 Copyright (C) 1987-2018 Free Software Foundation, Inc.-
3-
4 This program is free software: you can redistribute it and/or modify-
5 it under the terms of the GNU General Public License as published by-
6 the Free Software Foundation, either version 3 of the License, or-
7 (at your option) any later version.-
8-
9 This program is distributed in the hope that it will be useful,-
10 but WITHOUT ANY WARRANTY; without even the implied warranty of-
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
12 GNU General Public License for more details.-
13-
14 You should have received a copy of the GNU General Public License-
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
16-
17#include <config.h>-
18#include <stdio.h>-
19#include <sys/types.h>-
20#include "system.h"-
21-
22/* The official name of this program (e.g., no 'g' prefix). */-
23#define PROGRAM_NAME "echo"-
24-
25#define AUTHORS \-
26 proper_name ("Brian Fox"), \-
27 proper_name ("Chet Ramey")-
28-
29/* If true, interpret backslash escapes by default. */-
30#ifndef DEFAULT_ECHO_TO_XPG-
31enum { DEFAULT_ECHO_TO_XPG = false };-
32#endif-
33-
34void-
35usage (int status)-
36{-
37 if (status != EXIT_SUCCESS)
status != 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • echo
0-2
38 emit_try_help ();
never executed: end of block
0
39 else-
40 {-
41 printf (_("\-
42Usage: %s [SHORT-OPTION]... [STRING]...\n\-
43 or: %s LONG-OPTION\n\-
44"), program_name, program_name);-
45 fputs (_("\-
46Echo the STRING(s) to standard output.\n\-
47\n\-
48 -n do not output the trailing newline\n\-
49"), stdout);-
50 fputs (_(DEFAULT_ECHO_TO_XPG-
51 ? N_("\-
52 -e enable interpretation of backslash escapes (default)\n\-
53 -E disable interpretation of backslash escapes\n")-
54 : N_("\-
55 -e enable interpretation of backslash escapes\n\-
56 -E disable interpretation of backslash escapes (default)\n")),-
57 stdout);-
58 fputs (HELP_OPTION_DESCRIPTION, stdout);-
59 fputs (VERSION_OPTION_DESCRIPTION, stdout);-
60 fputs (_("\-
61\n\-
62If -e is in effect, the following sequences are recognized:\n\-
63\n\-
64"), stdout);-
65 fputs (_("\-
66 \\\\ backslash\n\-
67 \\a alert (BEL)\n\-
68 \\b backspace\n\-
69 \\c produce no further output\n\-
70 \\e escape\n\-
71 \\f form feed\n\-
72 \\n new line\n\-
73 \\r carriage return\n\-
74 \\t horizontal tab\n\-
75 \\v vertical tab\n\-
76"), stdout);-
77 fputs (_("\-
78 \\0NNN byte with octal value NNN (1 to 3 digits)\n\-
79 \\xHH byte with hexadecimal value HH (1 to 2 digits)\n\-
80"), stdout);-
81 printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME);-
82 emit_ancillary_info (PROGRAM_NAME);-
83 }
executed 2 times by 1 test: end of block
Executed by:
  • echo
2
84 exit (status);
executed 2 times by 1 test: exit (status);
Executed by:
  • echo
2
85}-
86-
87/* Convert C from hexadecimal character to integer. */-
88static int-
89hextobin (unsigned char c)-
90{-
91 switch (c)-
92 {-
93 default: return c - '0';
never executed: return c - '0';
never executed: default:
0
94 case 'a': case 'A': return 10;
never executed: return 10;
never executed: case 'a':
never executed: case 'A':
0
95 case 'b': case 'B': return 11;
never executed: return 11;
never executed: case 'b':
never executed: case 'B':
0
96 case 'c': case 'C': return 12;
never executed: return 12;
never executed: case 'c':
never executed: case 'C':
0
97 case 'd': case 'D': return 13;
never executed: return 13;
never executed: case 'd':
never executed: case 'D':
0
98 case 'e': case 'E': return 14;
never executed: return 14;
never executed: case 'e':
never executed: case 'E':
0
99 case 'f': case 'F': return 15;
never executed: return 15;
never executed: case 'f':
never executed: case 'F':
0
100 }-
101}-
102-
103/* Print the words in LIST to standard output. If the first word is-
104 '-n', then don't print a trailing newline. We also support the-
105 echo syntax from Version 9 unix systems. */-
106-
107int-
108main (int argc, char **argv)-
109{-
110 bool display_return = true;-
111 bool allow_options =-
112 (! getenv ("POSIXLY_CORRECT")
! getenv ("POSIXLY_CORRECT")Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • echo
FALSEnever evaluated
0-25
113 || (! DEFAULT_ECHO_TO_XPG && 1 < argc && STREQ (argv[1], "-n")));
never executed: __result = (((const unsigned char *) (const char *) ( argv[1] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-n" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! DEFAULT_ECHO_TO_XPGDescription
TRUEnever evaluated
FALSEnever evaluated
1 < argcDescription
TRUEnever evaluated
FALSEnever evaluated
( __extension_...)))); }) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
114-
115 /* System V machines already have a /bin/sh with a v9 behavior.-
116 Use the identical behavior for these machines so that the-
117 existing system shell scripts won't barf. */-
118 bool do_v9 = DEFAULT_ECHO_TO_XPG;-
119-
120 initialize_main (&argc, &argv);-
121 set_program_name (argv[0]);-
122 setlocale (LC_ALL, "");-
123 bindtextdomain (PACKAGE, LOCALEDIR);-
124 textdomain (PACKAGE);-
125-
126 atexit (close_stdout);-
127-
128 /* We directly parse options, rather than use parse_long_options, in-
129 order to avoid accepting abbreviations. */-
130 if (allow_options && argc == 2)
allow_optionsDescription
TRUEevaluated 25 times by 1 test
Evaluated by:
  • echo
FALSEnever evaluated
argc == 2Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 14 times by 1 test
Evaluated by:
  • echo
0-25
131 {-
132 if (STREQ (argv[1], "--help"))
never executed: __result = (((const unsigned char *) (const char *) ( argv[1] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "--help" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 9 times by 1 test
Evaluated by:
  • echo
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-9
133 usage (EXIT_SUCCESS);
executed 2 times by 1 test: usage ( 0 );
Executed by:
  • echo
2
134-
135 if (STREQ (argv[1], "--version"))
never executed: __result = (((const unsigned char *) (const char *) ( argv[1] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "--version" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 6 times by 1 test
Evaluated by:
  • echo
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-6
136 {-
137 version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,-
138 (char *) NULL);-
139 return EXIT_SUCCESS;
executed 3 times by 1 test: return 0 ;
Executed by:
  • echo
3
140 }-
141 }
executed 6 times by 1 test: end of block
Executed by:
  • echo
6
142-
143 --argc;-
144 ++argv;-
145-
146 if (allow_options)
allow_optionsDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • echo
FALSEnever evaluated
0-20
147 while (argc > 0 && *argv[0] == '-')
argc > 0Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 11 times by 1 test
Evaluated by:
  • echo
*argv[0] == '-'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • echo
FALSEevaluated 8 times by 1 test
Evaluated by:
  • echo
1-11
148 {-
149 char const *temp = argv[0] + 1;-
150 size_t i;-
151-
152 /* If it appears that we are handling options, then make sure that-
153 all of the options specified are actually valid. Otherwise, the-
154 string should just be echoed. */-
155-
156 for (i = 0; temp[i]; i++)
temp[i]Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • echo
FALSEnever evaluated
0-1
157 switch (temp[i])-
158 {-
159 case 'e': case 'E': case 'n':
never executed: case 'e':
never executed: case 'E':
never executed: case 'n':
0
160 break;
never executed: break;
0
161 default:
executed 1 time by 1 test: default:
Executed by:
  • echo
1
162 goto just_echo;
executed 1 time by 1 test: goto just_echo;
Executed by:
  • echo
1
163 }-
164-
165 if (i == 0)
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
166 goto just_echo;
never executed: goto just_echo;
0
167-
168 /* All of the options in TEMP are valid options to ECHO.-
169 Handle them. */-
170 while (*temp)
*tempDescription
TRUEnever evaluated
FALSEnever evaluated
0
171 switch (*temp++)-
172 {-
173 case 'e':
never executed: case 'e':
0
174 do_v9 = true;-
175 break;
never executed: break;
0
176-
177 case 'E':
never executed: case 'E':
0
178 do_v9 = false;-
179 break;
never executed: break;
0
180-
181 case 'n':
never executed: case 'n':
0
182 display_return = false;-
183 break;
never executed: break;
0
184 }
never executed: end of block
0
185-
186 argc--;-
187 argv++;-
188 }
never executed: end of block
0
189-
190just_echo:
code before this statement executed 19 times by 1 test: just_echo:
Executed by:
  • echo
19
191-
192 if (do_v9)
do_v9Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • echo
0-20
193 {-
194 while (argc > 0)
argc > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
195 {-
196 char const *s = argv[0];-
197 unsigned char c;-
198-
199 while ((c = *s++))
(c = *s++)Description
TRUEnever evaluated
FALSEnever evaluated
0
200 {-
201 if (c == '\\' && *s)
c == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
*sDescription
TRUEnever evaluated
FALSEnever evaluated
0
202 {-
203 switch (c = *s++)-
204 {-
205 case 'a': c = '\a'; break;
never executed: break;
never executed: case 'a':
0
206 case 'b': c = '\b'; break;
never executed: break;
never executed: case 'b':
0
207 case 'c': return EXIT_SUCCESS;
never executed: return 0 ;
never executed: case 'c':
0
208 case 'e': c = '\x1B'; break;
never executed: break;
never executed: case 'e':
0
209 case 'f': c = '\f'; break;
never executed: break;
never executed: case 'f':
0
210 case 'n': c = '\n'; break;
never executed: break;
never executed: case 'n':
0
211 case 'r': c = '\r'; break;
never executed: break;
never executed: case 'r':
0
212 case 't': c = '\t'; break;
never executed: break;
never executed: case 't':
0
213 case 'v': c = '\v'; break;
never executed: break;
never executed: case 'v':
0
214 case 'x':
never executed: case 'x':
0
215 {-
216 unsigned char ch = *s;-
217 if (! isxdigit (ch))
! ((*__ctype_b...nt) _ISxdigit)Description
TRUEnever evaluated
FALSEnever evaluated
0
218 goto not_an_escape;
never executed: goto not_an_escape;
0
219 s++;-
220 c = hextobin (ch);-
221 ch = *s;-
222 if (isxdigit (ch))
((*__ctype_b_l...nt) _ISxdigit)Description
TRUEnever evaluated
FALSEnever evaluated
0
223 {-
224 s++;-
225 c = c * 16 + hextobin (ch);-
226 }
never executed: end of block
0
227 }-
228 break;
never executed: break;
0
229 case '0':
never executed: case '0':
0
230 c = 0;-
231 if (! ('0' <= *s && *s <= '7'))
'0' <= *sDescription
TRUEnever evaluated
FALSEnever evaluated
*s <= '7'Description
TRUEnever evaluated
FALSEnever evaluated
0
232 break;
never executed: break;
0
233 c = *s++;-
234 FALLTHROUGH;-
235 case '1': case '2': case '3':
code before this statement never executed: case '1':
never executed: case '1':
never executed: case '2':
never executed: case '3':
0
236 case '4': case '5': case '6': case '7':
never executed: case '4':
never executed: case '5':
never executed: case '6':
never executed: case '7':
0
237 c -= '0';-
238 if ('0' <= *s && *s <= '7')
'0' <= *sDescription
TRUEnever evaluated
FALSEnever evaluated
*s <= '7'Description
TRUEnever evaluated
FALSEnever evaluated
0
239 c = c * 8 + (*s++ - '0');
never executed: c = c * 8 + (*s++ - '0');
0
240 if ('0' <= *s && *s <= '7')
'0' <= *sDescription
TRUEnever evaluated
FALSEnever evaluated
*s <= '7'Description
TRUEnever evaluated
FALSEnever evaluated
0
241 c = c * 8 + (*s++ - '0');
never executed: c = c * 8 + (*s++ - '0');
0
242 break;
never executed: break;
0
243 case '\\': break;
never executed: break;
never executed: case '\\':
0
244-
245 not_an_escape:-
246 default: putchar ('\\'); break;
never executed: break;
never executed: default:
0
247 }-
248 }-
249 putchar (c);-
250 }
never executed: end of block
0
251 argc--;-
252 argv++;-
253 if (argc > 0)
argc > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
254 putchar (' ');
never executed: putchar_unlocked (' ');
0
255 }
never executed: end of block
0
256 }
never executed: end of block
0
257 else-
258 {-
259 while (argc > 0)
argc > 0Description
TRUEevaluated 14 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 20 times by 1 test
Evaluated by:
  • echo
14-20
260 {-
261 fputs (argv[0], stdout);-
262 argc--;-
263 argv++;-
264 if (argc > 0)
argc > 0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • echo
FALSEevaluated 9 times by 1 test
Evaluated by:
  • echo
5-9
265 putchar (' ');
executed 5 times by 1 test: putchar_unlocked (' ');
Executed by:
  • echo
5
266 }
executed 14 times by 1 test: end of block
Executed by:
  • echo
14
267 }
executed 20 times by 1 test: end of block
Executed by:
  • echo
20
268-
269 if (display_return)
display_returnDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • echo
FALSEnever evaluated
0-20
270 putchar ('\n');
executed 20 times by 1 test: putchar_unlocked ('\n');
Executed by:
  • echo
20
271 return EXIT_SUCCESS;
executed 20 times by 1 test: return 0 ;
Executed by:
  • echo
20
272}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2