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
|
static char rcsid[] = "$Id: string.c,v 1.1 1999/11/03 20:42:14 golda Exp $";
/*
* string.c - Simple string manipulation
*
* Darren Hardy, hardy@cs.colorado.edu, June 1994
*
* ----------------------------------------------------------------------
* Copyright (c) 1994, 1995. All rights reserved.
*
* Mic Bowman of Transarc Corporation.
* Peter Danzig of the University of Southern California.
* Darren R. Hardy of the University of Colorado at Boulder.
* Udi Manber of the University of Arizona.
* Michael F. Schwartz of the University of Colorado at Boulder.
*
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "util.h"
#ifndef isquote
#define isquote(c) (((c) == '\"') || ((c) == '\''))
#endif
/*
* parse_argv() - Parses the command string to build an argv list.
* Supports simple quoting. argv is large enough to support the
* command string.
*/
void parse_argv(argv, cmd)
char *argv[];
char *cmd;
{
char *tmp, *p, *q;
int i = 0;
p = q = tmp = strdup(cmd);
while (1) {
if (isquote(*q)) {
p++;
q++;
while (*q && !isquote(*q))
q++;
if (isquote(*q))
*q++ = '\0';
else if (*q == '\0')
break;
} else {
while (*q && !isspace(*q))
q++;
}
while (isspace(*q) && !isquote(*q))
*q++ = '\0';
if (*q == '\0') {
argv[i++] = strdup(p);
break;
}
if (*p)
argv[i++] = strdup(p);
p = q;
}
argv[i] = NULL;
xfree(tmp);
}
|