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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/**************************************************************************
**************************************************************************
** **
** arglist.c Argument list functions **
** ========= **
** **
** Purpose: Simplifies handling of argument lists that may **
** appear in argv, and environment variable, or else- **
** where. **
** **
** Author: Garrett D'Amore <garrett@sciences.sdsu.edu> **
** **
** Copyright: 1994, Garrett E. D'Amore **
** **
** NO WARRANTY: This program is provided entirely without warranty. **
** The user assumes full responsibility for the use of **
** this program, and agrees to indemnify the author and **
** the copyright holder from any damage or loss that **
** may result from the use of or inability to use this **
** program. In simple language: YOU USE THIS PROGRAM **
** AT YOUR OWN RISK! **
** **
** Warning: None. **
** **
** Restrictions: None. **
** **
** Algorithm: None. **
** **
** References: None. **
** **
** File formats: None. **
** **
** Rev. History: June 2, 1994 Garrett D'Amore **
** -- Initial coding. **
** **
** Notes: None. **
** **
**************************************************************************
**************************************************************************/
/* >>>>>>>>>> Headers <<<<<<<<<< */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include "arglist.h"
/* >>>>>>>>>> Functions <<<<<<<<<< */
/***************************************
*
* string2arglist Convert a string to an arglist.
*
* Purpose Used to split a string up into an
* argv-like arglist.
*
* Parameters string: the string to convert from
* args: pointer to struct to hold result
*
* Returns zero on success,
* non-zero on error (ENOMEM).
*
*/
int string2arglist (char *string, arglist *args)
{
char *st;
/* clear the arglist to a clean state */
if (args->argv) free (args->argv);
args->argc = 1;
args->alloc = 0;
st = string;
while (1)
{
/* resize array if necessary */
if (args->argc >= args->alloc)
{
if (!(args->argv))
args->argv = (char **) malloc (ARGLISTINC * sizeof (char *));
else
args->argv = (char **) realloc (args->argv,
(args->alloc + ARGLISTINC) * sizeof (char *));
if (args->argv == NULL) return (ENOMEM);
args->alloc += ARGLISTINC;
}
/* get string and set it up, exit loop if not found */
if (!(args->argv [args->argc] = strtok (st, "\t "))) break;
/* needed for additional calls to strtok */
st = NULL;
args->argc++;
}
return 0;
}
/***************************************
*
* argv2arglist Fill an arglist from argv array.
*
* Purpose Converts argv[] array to arglist structure.
*
* Parameters argc: number of entries in argv[]
* argv: argv argument to main()
*
* Returns zero on success,
* nonzero on error (ENOMEM).
*
*/
int argv2arglist (int argc, char *argv[], arglist *args)
{
int i;
/* clear any old memory */
if (args->argv) free (args->argv);
args->argv = (char **) malloc ((argc + 1) * sizeof (char *));
if (!args->argv) return (ENOMEM);
args->alloc = argc;
for (i = 0; i < argc; i++)
{
args->argv[i+1] = argv[i+1];
}
args->argc = argc;
return 0;
}
|