File: argv.c

package info (click to toggle)
fragroute 1.2-7.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 692 kB
  • ctags: 520
  • sloc: ansic: 4,331; sh: 2,968; makefile: 74
file content (68 lines) | stat: -rw-r--r-- 964 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * argv.c
 *
 * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
 *
 * $Id: argv.c,v 1.5 2002/02/24 22:26:41 dugsong Exp $
 */

#include "config.h"

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "argv.h"

int
argv_create(char *p, int argc, char *argv[])
{
	int i;
	
	for (i = 0; i < argc - 1; i++) {
		while (*p != '\0' && isspace((int)*p))
			*p++ = '\0';
		
		if (*p == '\0')
			break;
		argv[i] = p;
		
		while (*p != '\0' && !isspace((int)*p))
			p++;
	}
	p[0] = '\0';
	argv[i] = NULL;
	
	return (i);
}

/* XXX - from tcpdump util.c. */
char *
argv_copy(char *argv[])
{
	char **p, *buf, *src, *dst;
	int len = 0;
	
	p = argv;
	if (*p == 0)
		return (NULL);
	
	while (*p)
		len += strlen(*p++) + 1;
	
	if ((buf = (char *)malloc(len)) == NULL)
		return (NULL);
	
	p = argv;
	dst = buf;
	
	while ((src = *p++) != NULL) {
		while ((*dst++ = *src++) != '\0')
			;
		dst[-1] = ' ';
	}
	dst[-1] = '\0';
	
	return (buf);
}