File: arglist.c

package info (click to toggle)
vtprint 2.0.2-9
  • links: PTS
  • area: main
  • in suites: woody
  • size: 336 kB
  • ctags: 110
  • sloc: ansic: 659; sed: 487; makefile: 184; sh: 96
file content (137 lines) | stat: -rw-r--r-- 5,261 bytes parent folder | download | duplicates (7)
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;
}