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[])19argv_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[])42argv_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