nodes.c revision dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * This file was generated by mknodes.sh 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* $NetBSD: nodes.c.pat,v 1.12 2004/06/15 22:57:27 dsl Exp $ */ 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*- 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (c) 1991, 1993 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * The Regents of the University of California. All rights reserved. 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * This code is derived from software contributed to Berkeley by 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Kenneth Almquist. 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Redistribution and use in source and binary forms, with or without 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * modification, are permitted provided that the following conditions 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * are met: 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * notice, this list of conditions and the following disclaimer. 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * documentation and/or other materials provided with the distribution. 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 3. Neither the name of the University nor the names of its contributors 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * may be used to endorse or promote products derived from this software 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * without specific prior written permission. 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * SUCH DAMAGE. 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * @(#)nodes.c.pat 8.2 (Berkeley) 5/4/95 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdlib.h> 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Routine for dealing with parsed shell commands. 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "shell.h" 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "nodes.h" 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "memalloc.h" 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "machdep.h" 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include "mystring.h" 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint funcblocksize; /* size of structures in function */ 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint funcstringsize; /* size of strings in node */ 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectpointer funcblock; /* block to allocate function from */ 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectchar *funcstring; /* block to allocate strings from */ 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic const short nodesize[26] = { 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nbinary)), 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct ncmd)), 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct npipe)), 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nredir)), 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nredir)), 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nredir)), 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nbinary)), 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nbinary)), 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nif)), 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nbinary)), 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nbinary)), 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfor)), 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct ncase)), 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nclist)), 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct narg)), 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct narg)), 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfile)), 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfile)), 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfile)), 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfile)), 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nfile)), 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct ndup)), 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct ndup)), 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nhere)), 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nhere)), 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof (struct nnot)), 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC void calcsize(union node *); 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC void sizenodelist(struct nodelist *); 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC union node *copynode(union node *); 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC struct nodelist *copynodelist(struct nodelist *); 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC char *nodesavestr(char *); 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Make a copy of a parse tree. 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectunion node * 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectcopyfunc(n) 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project union node *n; 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n == NULL) 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return NULL; 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblocksize = 0; 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcstringsize = 0; 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n); 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblock = ckmalloc(funcblocksize + funcstringsize); 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcstring = (char *) funcblock + funcblocksize; 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return copynode(n); 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC void 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectcalcsize(n) 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project union node *n; 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n == NULL) 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return; 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblocksize += nodesize[n->type]; 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project switch (n->type) { 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NSEMI: 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NAND: 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NOR: 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NWHILE: 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NUNTIL: 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nbinary.ch2); 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nbinary.ch1); 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCMD: 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ncmd.redirect); 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ncmd.args); 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NPIPE: 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sizenodelist(n->npipe.cmdlist); 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NREDIR: 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NBACKGND: 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NSUBSHELL: 142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nredir.redirect); 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nredir.n); 144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NIF: 146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nif.elsepart); 147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nif.ifpart); 148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nif.test); 149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFOR: 151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcstringsize += strlen(n->nfor.var) + 1; 152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nfor.body); 153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nfor.args); 154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCASE: 156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ncase.cases); 157dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ncase.expr); 158dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 159dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCLIST: 160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nclist.body); 161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nclist.pattern); 162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nclist.next); 163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NDEFUN: 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NARG: 166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sizenodelist(n->narg.backquote); 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcstringsize += strlen(n->narg.text) + 1; 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->narg.next); 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NTO: 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCLOBBER: 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROM: 173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROMTO: 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NAPPEND: 175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nfile.fname); 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nfile.next); 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NTOFD: 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROMFD: 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ndup.vname); 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->ndup.next); 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NHERE: 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NXHERE: 185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nhere.doc); 186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nhere.next); 187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NNOT: 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(n->nnot.com); 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project }; 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC void 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectsizenodelist(lp) 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct nodelist *lp; 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (lp) { 201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblocksize += SHELL_ALIGN(sizeof(struct nodelist)); 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project calcsize(lp->n); 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project lp = lp->next; 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC union node * 210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectcopynode(n) 211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project union node *n; 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project union node *new; 214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n == NULL) 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return NULL; 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new = funcblock; 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblock = (char *) funcblock + nodesize[n->type]; 219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project switch (n->type) { 220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NSEMI: 221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NAND: 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NOR: 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NWHILE: 224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NUNTIL: 225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nbinary.ch2 = copynode(n->nbinary.ch2); 226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nbinary.ch1 = copynode(n->nbinary.ch1); 227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCMD: 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ncmd.redirect = copynode(n->ncmd.redirect); 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ncmd.args = copynode(n->ncmd.args); 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ncmd.backgnd = n->ncmd.backgnd; 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NPIPE: 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->npipe.cmdlist = copynodelist(n->npipe.cmdlist); 235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->npipe.backgnd = n->npipe.backgnd; 236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NREDIR: 238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NBACKGND: 239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NSUBSHELL: 240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nredir.redirect = copynode(n->nredir.redirect); 241dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nredir.n = copynode(n->nredir.n); 242dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 243dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NIF: 244dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nif.elsepart = copynode(n->nif.elsepart); 245dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nif.ifpart = copynode(n->nif.ifpart); 246dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nif.test = copynode(n->nif.test); 247dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 248dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFOR: 249dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfor.var = nodesavestr(n->nfor.var); 250dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfor.body = copynode(n->nfor.body); 251dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfor.args = copynode(n->nfor.args); 252dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 253dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCASE: 254dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ncase.cases = copynode(n->ncase.cases); 255dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ncase.expr = copynode(n->ncase.expr); 256dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 257dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCLIST: 258dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nclist.body = copynode(n->nclist.body); 259dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nclist.pattern = copynode(n->nclist.pattern); 260dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nclist.next = copynode(n->nclist.next); 261dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 262dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NDEFUN: 263dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NARG: 264dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->narg.backquote = copynodelist(n->narg.backquote); 265dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->narg.text = nodesavestr(n->narg.text); 266dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->narg.next = copynode(n->narg.next); 267dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 268dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NTO: 269dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NCLOBBER: 270dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROM: 271dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROMTO: 272dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NAPPEND: 273dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfile.fname = copynode(n->nfile.fname); 274dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfile.fd = n->nfile.fd; 275dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nfile.next = copynode(n->nfile.next); 276dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 277dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NTOFD: 278dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NFROMFD: 279dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ndup.vname = copynode(n->ndup.vname); 280dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ndup.dupfd = n->ndup.dupfd; 281dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ndup.fd = n->ndup.fd; 282dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->ndup.next = copynode(n->ndup.next); 283dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 284dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NHERE: 285dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NXHERE: 286dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nhere.doc = copynode(n->nhere.doc); 287dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nhere.fd = n->nhere.fd; 288dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nhere.next = copynode(n->nhere.next); 289dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 290dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project case NNOT: 291dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->nnot.com = copynode(n->nnot.com); 292dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project break; 293dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project }; 294dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project new->type = n->type; 295dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return new; 296dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 297dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 298dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 299dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC struct nodelist * 300dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectcopynodelist(lp) 301dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct nodelist *lp; 302dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 303dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct nodelist *start; 304dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct nodelist **lpp; 305dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 306dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project lpp = &start; 307dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while (lp) { 308dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *lpp = funcblock; 309dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcblock = (char *) funcblock + 310dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project SHELL_ALIGN(sizeof(struct nodelist)); 311dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project (*lpp)->n = copynode(lp->n); 312dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project lp = lp->next; 313dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project lpp = &(*lpp)->next; 314dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 315dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *lpp = NULL; 316dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return start; 317dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 318dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 319dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 320dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 321dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectSTATIC char * 322dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectnodesavestr(s) 323dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *s; 324dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 325dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project register char *p = s; 326dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project register char *q = funcstring; 327dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *rtn = funcstring; 328dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 329dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while ((*q++ = *p++) != 0) 330dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project continue; 331dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project funcstring = q; 332dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return rtn; 333dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 334dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 335dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 336dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 337dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 338dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Free a parse tree. 339dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 340dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 341dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid 342dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectfreefunc(n) 343dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project union node *n; 344dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 345dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (n) 346dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ckfree(n); 347dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 348