summaryrefslogtreecommitdiffstats
path: root/release/picobsd/tinyware/ash/alias.c
diff options
context:
space:
mode:
Diffstat (limited to 'release/picobsd/tinyware/ash/alias.c')
-rw-r--r--release/picobsd/tinyware/ash/alias.c267
1 files changed, 0 insertions, 267 deletions
diff --git a/release/picobsd/tinyware/ash/alias.c b/release/picobsd/tinyware/ash/alias.c
deleted file mode 100644
index 80626cd..0000000
--- a/release/picobsd/tinyware/ash/alias.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* $NetBSD: alias.c,v 1.9 1997/07/04 21:01:48 christos Exp $ */
-
-/*-
- * Copyright (c) 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Kenneth Almquist.
- *
- * 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.
- */
-
-#include <sys/cdefs.h>
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)alias.c 8.3 (Berkeley) 5/4/95";
-#else
-__RCSID("$NetBSD: alias.c,v 1.9 1997/07/04 21:01:48 christos Exp $");
-#endif
-#endif /* not lint */
-
-#include <stdlib.h>
-#include "shell.h"
-#include "input.h"
-#include "output.h"
-#include "error.h"
-#include "memalloc.h"
-#include "mystring.h"
-#include "alias.h"
-#include "options.h" /* XXX for argptr (should remove?) */
-
-#define ATABSIZE 39
-
-struct alias *atab[ATABSIZE];
-
-STATIC void setalias __P((char *, char *));
-STATIC int unalias __P((char *));
-STATIC struct alias **hashalias __P((char *));
-
-STATIC
-void
-setalias(name, val)
- char *name, *val;
-{
- struct alias *ap, **app;
-
- app = hashalias(name);
- for (ap = *app; ap; ap = ap->next) {
- if (equal(name, ap->name)) {
- INTOFF;
- ckfree(ap->val);
- ap->val = savestr(val);
- INTON;
- return;
- }
- }
- /* not found */
- INTOFF;
- ap = ckmalloc(sizeof (struct alias));
- ap->name = savestr(name);
- /*
- * XXX - HACK: in order that the parser will not finish reading the
- * alias value off the input before processing the next alias, we
- * dummy up an extra space at the end of the alias. This is a crock
- * and should be re-thought. The idea (if you feel inclined to help)
- * is to avoid alias recursions. The mechanism used is: when
- * expanding an alias, the value of the alias is pushed back on the
- * input as a string and a pointer to the alias is stored with the
- * string. The alias is marked as being in use. When the input
- * routine finishes reading the string, it markes the alias not
- * in use. The problem is synchronization with the parser. Since
- * it reads ahead, the alias is marked not in use before the
- * resulting token(s) is next checked for further alias sub. The
- * H A C K is that we add a little fluff after the alias value
- * so that the string will not be exhausted. This is a good
- * idea ------- ***NOT***
- */
-#ifdef notyet
- ap->val = savestr(val);
-#else /* hack */
- {
- int len = strlen(val);
- ap->val = ckmalloc(len + 2);
- memcpy(ap->val, val, len);
- ap->val[len] = ' '; /* fluff */
- ap->val[len+1] = '\0';
- }
-#endif
- ap->next = *app;
- *app = ap;
- INTON;
-}
-
-STATIC int
-unalias(name)
- char *name;
- {
- struct alias *ap, **app;
-
- app = hashalias(name);
-
- for (ap = *app; ap; app = &(ap->next), ap = ap->next) {
- if (equal(name, ap->name)) {
- /*
- * if the alias is currently in use (i.e. its
- * buffer is being used by the input routine) we
- * just null out the name instead of freeing it.
- * We could clear it out later, but this situation
- * is so rare that it hardly seems worth it.
- */
- if (ap->flag & ALIASINUSE)
- *ap->name = '\0';
- else {
- INTOFF;
- *app = ap->next;
- ckfree(ap->name);
- ckfree(ap->val);
- ckfree(ap);
- INTON;
- }
- return (0);
- }
- }
-
- return (1);
-}
-
-#ifdef mkinit
-MKINIT void rmaliases __P((void));
-
-SHELLPROC {
- rmaliases();
-}
-#endif
-
-void
-rmaliases() {
- struct alias *ap, *tmp;
- int i;
-
- INTOFF;
- for (i = 0; i < ATABSIZE; i++) {
- ap = atab[i];
- atab[i] = NULL;
- while (ap) {
- ckfree(ap->name);
- ckfree(ap->val);
- tmp = ap;
- ap = ap->next;
- ckfree(tmp);
- }
- }
- INTON;
-}
-
-struct alias *
-lookupalias(name, check)
- char *name;
- int check;
-{
- struct alias *ap = *hashalias(name);
-
- for (; ap; ap = ap->next) {
- if (equal(name, ap->name)) {
- if (check && (ap->flag & ALIASINUSE))
- return (NULL);
- return (ap);
- }
- }
-
- return (NULL);
-}
-
-/*
- * TODO - sort output
- */
-int
-aliascmd(argc, argv)
- int argc;
- char **argv;
-{
- char *n, *v;
- int ret = 0;
- struct alias *ap;
-
- if (argc == 1) {
- int i;
-
- for (i = 0; i < ATABSIZE; i++)
- for (ap = atab[i]; ap; ap = ap->next) {
- if (*ap->name != '\0')
- out1fmt("alias %s=%s\n", ap->name, ap->val);
- }
- return (0);
- }
- while ((n = *++argv) != NULL) {
- if ((v = strchr(n+1, '=')) == NULL) /* n+1: funny ksh stuff */
- if ((ap = lookupalias(n, 0)) == NULL) {
- outfmt(out2, "alias: %s not found\n", n);
- ret = 1;
- } else
- out1fmt("alias %s=%s\n", n, ap->val);
- else {
- *v++ = '\0';
- setalias(n, v);
- }
- }
-
- return (ret);
-}
-
-int
-unaliascmd(argc, argv)
- int argc;
- char **argv;
-{
- int i;
-
- while ((i = nextopt("a")) != '\0') {
- if (i == 'a') {
- rmaliases();
- return (0);
- }
- }
- for (i = 0; *argptr; argptr++)
- i = unalias(*argptr);
-
- return (i);
-}
-
-STATIC struct alias **
-hashalias(p)
- char *p;
- {
- unsigned int hashval;
-
- hashval = *p << 4;
- while (*p)
- hashval+= *p++;
- return &atab[hashval % ATABSIZE];
-}
OpenPOWER on IntegriCloud