2 * Copyright (c) 1980, 1991, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 static char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 5/31/93";
38 static const char rcsid[] =
43 #include <sys/param.h>
54 static int renum __P((int, int));
62 return (0); /* Check for nil pointer */
91 n = p = (char *) xmalloc((size_t) ((p - s) * sizeof(char)));
92 while ((*p++ = *s++) != '\0')
115 (void) fprintf(fp, "%s", vis_str(*av));
117 (void) fprintf(fp, " ");
139 while ((*av++ = *bv++) != NULL)
149 (void) blkcpy(blkend(up), vp);
171 (Char **) xcalloc((size_t) (blklen(v) + 1), sizeof(Char **));
175 *newv++ = Strsave(*v++);
191 while (*ss++ == *tt++);
192 } while (*s++ != '\0');
198 #ifndef SHORT_STRINGS
214 ep = (char *) xmalloc((size_t) (((p - cp) + (q - dp) - 1) * sizeof(char)));
215 for (p = ep, q = cp; *p++ = *q++;)
217 for (p--, q = dp; *p++ = *q++;)
229 (Char **) xcalloc((size_t) (blklen(up) + blklen(vp) + 1),
232 (void) blkcpy(wp, up);
233 return (blkcat(wp, vp));
251 * This routine is called after an error to close up
252 * any units which may have been left open accidentally.
259 for (f = 0, flimit = getdtablesize(); f < flimit; f++)
260 if (f != SHIN && f != SHOUT && f != SHERR && f != OLDSTD &&
276 * Move descriptor i to j.
277 * If j is -1 then we just want to get i to a safe place,
278 * i.e. to a unit > 2. This also happens in dcopy.
304 if (i == j || i < 0 || (j < 0 && i > 2))
311 return (renum(i, j));
322 if (j == -1 && k > 2)
333 * Left shift a command argument list, discarding
334 * the first c arguments. Used in "shift" commands
335 * as well as by commands like "repeat".
344 for (u = v; *u && --c >= 0; u++)
361 while (*cp && Isdigit(*cp))
370 Char **nv = (Char **) xcalloc((size_t) (blklen(v) + 1), sizeof(Char **));
372 return (blkcpy(nv, v));
375 #ifndef SHORT_STRINGS
387 #endif /* SHORT_STRINGS */
397 while ((*dp++ &= TRIM) != '\0')
407 setname(vis_str(name));
408 stderror(ERR_NAME | ERR_UNDVAR);
421 if (*sub++ != *str++)