1 /*
2  * argv.c
3  *
4  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
5  *
6  * $Id: argv.c,v 1.5 2002/02/24 22:26:41 dugsong Exp $
7  */
8 
9 #include "config.h"
10 
11 #include <ctype.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 
16 #include "argv.h"
17 
18 int
argv_create(char * p,int argc,char * argv[])19 argv_create(char *p, int argc, char *argv[])
20 {
21 	int i;
22 
23 	for (i = 0; i < argc - 1; i++) {
24 		while (*p != '\0' && isspace((int)*p))
25 			*p++ = '\0';
26 
27 		if (*p == '\0')
28 			break;
29 		argv[i] = p;
30 
31 		while (*p != '\0' && !isspace((int)*p))
32 			p++;
33 	}
34 	p[0] = '\0';
35 	argv[i] = NULL;
36 
37 	return (i);
38 }
39 
40 /* XXX - from tcpdump util.c. */
41 char *
argv_copy(char * argv[])42 argv_copy(char *argv[])
43 {
44 	char **p, *buf, *src, *dst;
45 	int len = 0;
46 
47 	p = argv;
48 	if (*p == 0)
49 		return (NULL);
50 
51 	while (*p)
52 		len += strlen(*p++) + 1;
53 
54 	if ((buf = (char *)malloc(len)) == NULL)
55 		return (NULL);
56 
57 	p = argv;
58 	dst = buf;
59 
60 	while ((src = *p++) != NULL) {
61 		while ((*dst++ = *src++) != '\0')
62 			;
63 		dst[-1] = ' ';
64 	}
65 	dst[-1] = '\0';
66 
67 	return (buf);
68 }
69