Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/vec/vecargs.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* Glenn Fowler
25
* AT&T Bell Laboratories
26
*
27
* string vector argv insertion
28
*/
29
30
#include <ast.h>
31
#include <vecargs.h>
32
#include <ctype.h>
33
34
/*
35
* insert the string vector vec between
36
* (*argvp)[0] and (*argvp)[1], sliding (*argvp)[1] ... over
37
* null and blank args are deleted
38
*
39
* vecfree always called
40
*
41
* -1 returned if insertion failed
42
*/
43
44
int
45
vecargs(register char** vec, int* argcp, char*** argvp)
46
{
47
register char** argv;
48
register char** oargv;
49
char** ovec;
50
char* s;
51
int num;
52
53
if (!vec) return(-1);
54
if ((num = (char**)(*(vec - 1)) - vec) > 0)
55
{
56
if (!(argv = newof(0, char*, num + *argcp + 1, 0)))
57
{
58
vecfree(vec, 0);
59
return(-1);
60
}
61
oargv = *argvp;
62
*argvp = argv;
63
*argv++ = *oargv++;
64
ovec = vec;
65
while (s = *argv = *vec++)
66
{
67
while (isspace(*s)) s++;
68
if (*s) argv++;
69
}
70
vecfree(ovec, 1);
71
while (*argv = *oargv++) argv++;
72
*argcp = argv - *argvp;
73
}
74
else vecfree(vec, 0);
75
return(0);
76
}
77
78