~ubuntu-branches/ubuntu/trusty/ipxe/trusty

« back to all changes in this revision

Viewing changes to src/hci/commands/param_cmd.c

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-11-26 17:50:47 UTC
  • mfrom: (1.2.2)
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: package-import@ubuntu.com-20131126175047-rrtzcroy6yyz7lqp
Tags: upstream-1.0.0+git-20131111.c3d1e78
ImportĀ upstreamĀ versionĀ 1.0.0+git-20131111.c3d1e78

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or
 
5
 * modify it under the terms of the GNU General Public License as
 
6
 * published by the Free Software Foundation; either version 2 of the
 
7
 * License, or any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful, but
 
10
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
 * General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
17
 * 02110-1301, USA.
 
18
 */
 
19
 
 
20
FILE_LICENCE ( GPL2_OR_LATER );
 
21
 
 
22
/** @file
 
23
 *
 
24
 * Form parameter commands
 
25
 *
 
26
 */
 
27
 
 
28
#include <stdlib.h>
 
29
#include <errno.h>
 
30
#include <getopt.h>
 
31
#include <ipxe/params.h>
 
32
#include <ipxe/parseopt.h>
 
33
#include <ipxe/command.h>
 
34
 
 
35
/** "params" options */
 
36
struct params_options {
 
37
        /** Name */
 
38
        char *name;
 
39
        /** Delete */
 
40
        int delete;
 
41
};
 
42
 
 
43
/** "params" option list */
 
44
static struct option_descriptor params_opts[] = {
 
45
        OPTION_DESC ( "name", 'n', required_argument,
 
46
                      struct params_options, name, parse_string ),
 
47
        OPTION_DESC ( "delete", 'd', no_argument,
 
48
                      struct params_options, delete, parse_flag ),
 
49
};
 
50
 
 
51
/** "params" command descriptor */
 
52
static struct command_descriptor params_cmd =
 
53
        COMMAND_DESC ( struct params_options, params_opts, 0, 0, NULL );
 
54
 
 
55
/**
 
56
 * The "params" command
 
57
 *
 
58
 * @v argc              Argument count
 
59
 * @v argv              Argument list
 
60
 * @ret rc              Return status code
 
61
 */
 
62
static int params_exec ( int argc, char **argv ) {
 
63
        struct params_options opts;
 
64
        struct parameters *params;
 
65
        int rc;
 
66
 
 
67
        /* Parse options */
 
68
        if ( ( rc = parse_options ( argc, argv, &params_cmd, &opts ) ) != 0)
 
69
                return rc;
 
70
 
 
71
        /* Create parameter list */
 
72
        params = create_parameters ( opts.name );
 
73
        if ( ! params )
 
74
                return -ENOMEM;
 
75
 
 
76
        /* Destroy parameter list, if applicable */
 
77
        if ( opts.delete )
 
78
                destroy_parameters ( params );
 
79
 
 
80
        return 0;
 
81
}
 
82
 
 
83
/** "param" options */
 
84
struct param_options {
 
85
        /** Parameter list name */
 
86
        char *params;
 
87
};
 
88
 
 
89
/** "param" option list */
 
90
static struct option_descriptor param_opts[] = {
 
91
        OPTION_DESC ( "params", 'p', required_argument,
 
92
                      struct param_options, params, parse_string ),
 
93
};
 
94
 
 
95
/** "param" command descriptor */
 
96
static struct command_descriptor param_cmd =
 
97
        COMMAND_DESC ( struct param_options, param_opts, 1, MAX_ARGUMENTS,
 
98
                       "<key> [<value>]" );
 
99
 
 
100
/**
 
101
 * The "param" command
 
102
 *
 
103
 * @v argc              Argument count
 
104
 * @v argv              Argument list
 
105
 * @ret rc              Return status code
 
106
 */
 
107
static int param_exec ( int argc, char **argv ) {
 
108
        struct param_options opts;
 
109
        char *key;
 
110
        char *value;
 
111
        struct parameters *params;
 
112
        struct parameter *param;
 
113
        int rc;
 
114
 
 
115
        /* Parse options */
 
116
        if ( ( rc = parse_options ( argc, argv, &param_cmd, &opts ) ) != 0 )
 
117
                goto err_parse_options;
 
118
 
 
119
        /* Parse key */
 
120
        key = argv[optind];
 
121
 
 
122
        /* Parse value */
 
123
        value = concat_args ( &argv[ optind + 1 ] );
 
124
        if ( ! value ) {
 
125
                rc = -ENOMEM;
 
126
                goto err_parse_value;
 
127
        }
 
128
 
 
129
        /* Identify parameter list */
 
130
        if ( ( rc = parse_parameters ( opts.params, &params ) ) != 0 )
 
131
                goto err_parse_parameters;
 
132
 
 
133
        /* Add parameter */
 
134
        param = add_parameter ( params, key, value );
 
135
        if ( ! param ) {
 
136
                rc = -ENOMEM;
 
137
                goto err_add_parameter;
 
138
        }
 
139
 
 
140
        /* Success */
 
141
        rc = 0;
 
142
 
 
143
 err_add_parameter:
 
144
 err_parse_parameters:
 
145
        free ( value );
 
146
 err_parse_value:
 
147
 err_parse_options:
 
148
        return rc;
 
149
}
 
150
 
 
151
/** Form parameter commands */
 
152
struct command param_commands[] __command = {
 
153
        {
 
154
                .name = "params",
 
155
                .exec = params_exec,
 
156
        },
 
157
        {
 
158
                .name = "param",
 
159
                .exec = param_exec,
 
160
        },
 
161
};