OpenCoverage

shell.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/readline/shell.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* shell.c -- readline utility functions that are normally provided by-
2 bash when readline is linked as part of the shell. */-
3-
4/* Copyright (C) 1997-2009,2017 Free Software Foundation, Inc.-
5-
6 This file is part of the GNU Readline Library (Readline), a library-
7 for reading lines of text with interactive input and history editing. -
8-
9 Readline is free software: you can redistribute it and/or modify-
10 it under the terms of the GNU General Public License as published by-
11 the Free Software Foundation, either version 3 of the License, or-
12 (at your option) any later version.-
13-
14 Readline is distributed in the hope that it will be useful,-
15 but WITHOUT ANY WARRANTY; without even the implied warranty of-
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
17 GNU General Public License for more details.-
18-
19 You should have received a copy of the GNU General Public License-
20 along with Readline. If not, see <http://www.gnu.org/licenses/>.-
21*/-
22-
23#define READLINE_LIBRARY-
24-
25#if defined (HAVE_CONFIG_H)-
26# include <config.h>-
27#endif-
28-
29#include <sys/types.h>-
30-
31#if defined (HAVE_UNISTD_H)-
32# include <unistd.h>-
33#endif /* HAVE_UNISTD_H */-
34-
35#if defined (HAVE_STDLIB_H)-
36# include <stdlib.h>-
37#else-
38# include "ansi_stdlib.h"-
39#endif /* HAVE_STDLIB_H */-
40-
41#if defined (HAVE_STRING_H)-
42# include <string.h>-
43#else-
44# include <strings.h>-
45#endif /* !HAVE_STRING_H */-
46-
47#if defined (HAVE_LIMITS_H)-
48# include <limits.h>-
49#endif-
50-
51#if defined (HAVE_FCNTL_H)-
52#include <fcntl.h>-
53#endif-
54#if defined (HAVE_PWD_H)-
55#include <pwd.h>-
56#endif-
57-
58#include <stdio.h>-
59-
60#include "rlstdc.h"-
61#include "rlshell.h"-
62#include "rldefs.h"-
63-
64#include "xmalloc.h"-
65-
66#if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)-
67extern struct passwd *getpwuid PARAMS((uid_t));-
68#endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */-
69-
70#ifndef NULL-
71# define NULL 0-
72#endif-
73-
74#ifndef CHAR_BIT-
75# define CHAR_BIT 8-
76#endif-
77-
78/* Nonzero if the integer type T is signed. */-
79#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))-
80-
81/* Bound on length of the string representing an integer value of type T.-
82 Subtract one for the sign bit if T is signed;-
83 302 / 1000 is log10 (2) rounded up;-
84 add one for integer division truncation;-
85 add one more for a minus sign if t is signed. */-
86#define INT_STRLEN_BOUND(t) \-
87 ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \-
88 + 1 + TYPE_SIGNED (t))-
89-
90/* All of these functions are resolved from bash if we are linking readline-
91 as part of bash. */-
92-
93/* Does shell-like quoting using single quotes. */-
94char *-
95sh_single_quote (char *string)-
96{-
97 register int c;-
98 char *result, *r, *s;-
99-
100 result = (char *)xmalloc (3 + (4 * strlen (string)));-
101 r = result;-
102 *r++ = '\'';-
103-
104 for (s = string; s && (c = *s); s++)
sDescription
TRUEnever evaluated
FALSEnever evaluated
(c = *s)Description
TRUEnever evaluated
FALSEnever evaluated
0
105 {-
106 *r++ = c;-
107-
108 if (c == '\'')
c == '\''Description
TRUEnever evaluated
FALSEnever evaluated
0
109 {-
110 *r++ = '\\'; /* insert escaped single quote */-
111 *r++ = '\'';-
112 *r++ = '\''; /* start new quoted string */-
113 }
never executed: end of block
0
114 }
never executed: end of block
0
115-
116 *r++ = '\'';-
117 *r = '\0';-
118-
119 return (result);
never executed: return (result);
0
120}-
121-
122/* Set the environment variables LINES and COLUMNS to lines and cols,-
123 respectively. */-
124static char setenv_buf[INT_STRLEN_BOUND (int) + 1];-
125static char putenv_buf1[INT_STRLEN_BOUND (int) + 6 + 1]; /* sizeof("LINES=") == 6 */-
126static char putenv_buf2[INT_STRLEN_BOUND (int) + 8 + 1]; /* sizeof("COLUMNS=") == 8 */-
127-
128void-
129sh_set_lines_and_columns (int lines, int cols)-
130{-
131#if defined (HAVE_SETENV)-
132 sprintf (setenv_buf, "%d", lines);-
133 setenv ("LINES", setenv_buf, 1);-
134-
135 sprintf (setenv_buf, "%d", cols);-
136 setenv ("COLUMNS", setenv_buf, 1);-
137#else /* !HAVE_SETENV */-
138# if defined (HAVE_PUTENV)-
139 sprintf (putenv_buf1, "LINES=%d", lines);-
140 putenv (putenv_buf1);-
141-
142 sprintf (putenv_buf2, "COLUMNS=%d", cols);-
143 putenv (putenv_buf2);-
144# endif /* HAVE_PUTENV */-
145#endif /* !HAVE_SETENV */-
146}
never executed: end of block
0
147-
148char *-
149sh_get_env_value (const char *varname)-
150{-
151 return ((char *)getenv (varname));
never executed: return ((char *)getenv (varname));
0
152}-
153-
154char *-
155sh_get_home_dir (void)-
156{-
157 static char *home_dir = (char *)NULL;-
158 struct passwd *entry;-
159-
160 if (home_dir)
home_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
161 return (home_dir);
never executed: return (home_dir);
0
162-
163 home_dir = (char *)NULL;-
164#if defined (HAVE_GETPWUID)-
165# if defined (__TANDEM)-
166 entry = getpwnam (getlogin ());-
167# else-
168 entry = getpwuid (getuid ());-
169# endif-
170 if (entry)
entryDescription
TRUEnever evaluated
FALSEnever evaluated
0
171 home_dir = savestring (entry->pw_dir);
never executed: home_dir = strcpy ((char *)xmalloc (1 + strlen (entry->pw_dir)), (entry->pw_dir));
0
172#endif-
173-
174#if defined (HAVE_GETPWENT)-
175 endpwent (); /* some systems need this */-
176#endif-
177-
178 return (home_dir);
never executed: return (home_dir);
0
179}-
180-
181#if !defined (O_NDELAY)-
182# if defined (FNDELAY)-
183# define O_NDELAY FNDELAY-
184# endif-
185#endif-
186-
187int-
188sh_unset_nodelay_mode (int fd)-
189{-
190#if defined (HAVE_FCNTL)-
191 int flags, bflags;-
192-
193 if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
(flags = fcntl...d, 3 , 0)) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
194 return -1;
never executed: return -1;
0
195-
196 bflags = 0;-
197-
198#ifdef O_NONBLOCK-
199 bflags |= O_NONBLOCK;-
200#endif-
201-
202#ifdef O_NDELAY-
203 bflags |= O_NDELAY;-
204#endif-
205-
206 if (flags & bflags)
flags & bflagsDescription
TRUEnever evaluated
FALSEnever evaluated
0
207 {-
208 flags &= ~bflags;-
209 return (fcntl (fd, F_SETFL, flags));
never executed: return (fcntl (fd, 4 , flags));
0
210 }-
211#endif-
212-
213 return 0;
never executed: return 0;
0
214}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2