/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1985-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* David Korn <[email protected]> *18* Phong Vo <[email protected]> *19* *20***********************************************************************/21#pragma prototyped22/*23* Glenn Fowler24* AT&T Bell Laboratories25*26* string vector argv insertion27*/2829#include <ast.h>30#include <vecargs.h>31#include <ctype.h>3233/*34* insert the string vector vec between35* (*argvp)[0] and (*argvp)[1], sliding (*argvp)[1] ... over36* null and blank args are deleted37*38* vecfree always called39*40* -1 returned if insertion failed41*/4243int44vecargs(register char** vec, int* argcp, char*** argvp)45{46register char** argv;47register char** oargv;48char** ovec;49char* s;50int num;5152if (!vec) return(-1);53if ((num = (char**)(*(vec - 1)) - vec) > 0)54{55if (!(argv = newof(0, char*, num + *argcp + 1, 0)))56{57vecfree(vec, 0);58return(-1);59}60oargv = *argvp;61*argvp = argv;62*argv++ = *oargv++;63ovec = vec;64while (s = *argv = *vec++)65{66while (isspace(*s)) s++;67if (*s) argv++;68}69vecfree(ovec, 1);70while (*argv = *oargv++) argv++;71*argcp = argv - *argvp;72}73else vecfree(vec, 0);74return(0);75}767778