⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 misc.c

📁 早期freebsd实现
💻 C
字号:
/*- * Copyright (c) 1980, 1991, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#ifndef lintstatic char sccsid[] = "@(#)misc.c	8.1 (Berkeley) 5/31/93";#endif /* not lint */#include <sys/param.h>#include <stdlib.h>#include <unistd.h>#if __STDC__# include <stdarg.h>#else# include <varargs.h>#endif#include "csh.h"#include "extern.h"static int	renum __P((int, int));intany(s, c)    register char *s;    register int c;{    if (!s)	return (0);		/* Check for nil pointer */    while (*s)	if (*s++ == c)	    return (1);    return (0);}voidsetzero(cp, i)    char   *cp;    int     i;{    if (i != 0)	do	    *cp++ = 0;	while (--i);}char   *strsave(s)    register char *s;{    char   *n;    register char *p;    if (s == NULL)	s = "";    for (p = s; *p++;)	continue;    n = p = (char *) xmalloc((size_t) ((p - s) * sizeof(char)));    while ((*p++ = *s++) != '\0')	continue;    return (n);}Char  **blkend(up)    register Char **up;{    while (*up)	up++;    return (up);}voidblkpr(fp, av)    FILE *fp;    register Char **av;{    for (; *av; av++) {	(void) fprintf(fp, "%s", vis_str(*av));	if (av[1])	    (void) fprintf(fp, " ");    }}intblklen(av)    register Char **av;{    register int i = 0;    while (*av++)	i++;    return (i);}Char  **blkcpy(oav, bv)    Char  **oav;    register Char **bv;{    register Char **av = oav;    while ((*av++ = *bv++) != NULL)	continue;    return (oav);}Char  **blkcat(up, vp)    Char  **up, **vp;{    (void) blkcpy(blkend(up), vp);    return (up);}voidblkfree(av0)    Char  **av0;{    register Char **av = av0;    if (!av0)	return;    for (; *av; av++)	xfree((ptr_t) * av);    xfree((ptr_t) av0);}Char  **saveblk(v)    register Char **v;{    register Char **newv =    (Char **) xcalloc((size_t) (blklen(v) + 1), sizeof(Char **));    Char  **onewv = newv;    while (*v)	*newv++ = Strsave(*v++);    return (onewv);}#ifdef NOTUSEDchar   *strstr(s, t)    register char *s, *t;{    do {	register char *ss = s;	register char *tt = t;	do	    if (*tt == '\0')		return (s);	while (*ss++ == *tt++);    } while (*s++ != '\0');    return (NULL);}#endif /* NOTUSED */#ifndef SHORT_STRINGSchar   *strspl(cp, dp)    char   *cp, *dp;{    char   *ep;    register char *p, *q;    if (!cp)	cp = "";    if (!dp)	dp = "";    for (p = cp; *p++;)	continue;    for (q = dp; *q++;)	continue;    ep = (char *) xmalloc((size_t) (((p - cp) + (q - dp) - 1) * sizeof(char)));    for (p = ep, q = cp; *p++ = *q++;)	continue;    for (p--, q = dp; *p++ = *q++;)	continue;    return (ep);}#endifChar  **blkspl(up, vp)    register Char **up, **vp;{    register Char **wp =    (Char **) xcalloc((size_t) (blklen(up) + blklen(vp) + 1),		      sizeof(Char **));    (void) blkcpy(wp, up);    return (blkcat(wp, vp));}Charlastchr(cp)    register Char *cp;{    if (!cp)	return (0);    if (!*cp)	return (0);    while (cp[1])	cp++;    return (*cp);}/* * This routine is called after an error to close up * any units which may have been left open accidentally. */voidclosem(){    register int f;    for (f = 0; f < NOFILE; f++)	if (f != SHIN && f != SHOUT && f != SHERR && f != OLDSTD &&	    f != FSHTTY)	    (void) close(f);}voiddonefds(){    (void) close(0);    (void) close(1);    (void) close(2);    didfds = 0;}/* * Move descriptor i to j. * If j is -1 then we just want to get i to a safe place, * i.e. to a unit > 2.  This also happens in dcopy. */intdmove(i, j)    register int i, j;{    if (i == j || i < 0)	return (i);    if (j >= 0) {	(void) dup2(i, j);	if (j != i)	    (void) close(i);	return (j);    }    j = dcopy(i, j);    if (j != i)	(void) close(i);    return (j);}intdcopy(i, j)    register int i, j;{    if (i == j || i < 0 || (j < 0 && i > 2))	return (i);    if (j >= 0) {	(void) dup2(i, j);	return (j);    }    (void) close(j);    return (renum(i, j));}static intrenum(i, j)    register int i, j;{    register int k = dup(i);    if (k < 0)	return (-1);    if (j == -1 && k > 2)	return (k);    if (k != j) {	j = renum(k, j);	(void) close(k);	return (j);    }    return (k);}/* * Left shift a command argument list, discarding * the first c arguments.  Used in "shift" commands * as well as by commands like "repeat". */voidlshift(v, c)    register Char **v;    register int c;{    register Char **u;    for (u = v; *u && --c >= 0; u++)	xfree((ptr_t) *u);    (void) blkcpy(v, u);}intnumber(cp)    Char   *cp;{    if (!cp)	return(0);    if (*cp == '-') {	cp++;	if (!Isdigit(*cp))	    return (0);	cp++;    }    while (*cp && Isdigit(*cp))	cp++;    return (*cp == 0);}Char  **copyblk(v)    register Char **v;{    Char  **nv = (Char **) xcalloc((size_t) (blklen(v) + 1), sizeof(Char **));    return (blkcpy(nv, v));}#ifndef SHORT_STRINGSchar   *strend(cp)    register char *cp;{    if (!cp)	return (cp);    while (*cp)	cp++;    return (cp);}#endif /* SHORT_STRINGS */Char   *strip(cp)    Char   *cp;{    register Char *dp = cp;    if (!cp)	return (cp);    while ((*dp++ &= TRIM) != '\0')	continue;    return (cp);}voidudvar(name)    Char   *name;{    setname(vis_str(name));    stderror(ERR_NAME | ERR_UNDVAR);}intprefix(sub, str)    register Char *sub, *str;{    for (;;) {	if (*sub == 0)	    return (1);	if (*str == 0)	    return (0);	if (*sub++ != *str++)	    return (0);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -