xref: /rk3399_ARM-atf/tools/cert_create/src/cmd_opt.c (revision aa965e1583349b36ce7edd2b3fe9f1f461ef8b23)
1ad2c1a9aSJuan Castillo /*
2ad2c1a9aSJuan Castillo  * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3ad2c1a9aSJuan Castillo  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5ad2c1a9aSJuan Castillo  */
6ad2c1a9aSJuan Castillo 
7159807e2SJuan Castillo #include <assert.h>
8*2a4b4b71SIsla Mitchell #include <cmd_opt.h>
9ad2c1a9aSJuan Castillo #include <getopt.h>
10ad2c1a9aSJuan Castillo #include <stddef.h>
11159807e2SJuan Castillo #include <stdlib.h>
12159807e2SJuan Castillo #include "debug.h"
13ad2c1a9aSJuan Castillo 
14ad2c1a9aSJuan Castillo /* Command line options */
15ad2c1a9aSJuan Castillo static struct option long_opt[CMD_OPT_MAX_NUM+1];
16159807e2SJuan Castillo static const char *help_msg[CMD_OPT_MAX_NUM+1];
17ad2c1a9aSJuan Castillo static int num_reg_opt;
18ad2c1a9aSJuan Castillo 
cmd_opt_add(const cmd_opt_t * cmd_opt)19159807e2SJuan Castillo void cmd_opt_add(const cmd_opt_t *cmd_opt)
20ad2c1a9aSJuan Castillo {
21159807e2SJuan Castillo 	assert(cmd_opt != NULL);
22ad2c1a9aSJuan Castillo 
23159807e2SJuan Castillo 	if (num_reg_opt >= CMD_OPT_MAX_NUM) {
24159807e2SJuan Castillo 		ERROR("Out of memory. Please increase CMD_OPT_MAX_NUM\n");
25159807e2SJuan Castillo 		exit(1);
26159807e2SJuan Castillo 	}
27159807e2SJuan Castillo 
28159807e2SJuan Castillo 	long_opt[num_reg_opt].name = cmd_opt->long_opt.name;
29159807e2SJuan Castillo 	long_opt[num_reg_opt].has_arg = cmd_opt->long_opt.has_arg;
30159807e2SJuan Castillo 	long_opt[num_reg_opt].flag = 0;
31159807e2SJuan Castillo 	long_opt[num_reg_opt].val = cmd_opt->long_opt.val;
32159807e2SJuan Castillo 
33159807e2SJuan Castillo 	help_msg[num_reg_opt] = cmd_opt->help_msg;
34159807e2SJuan Castillo 
35159807e2SJuan Castillo 	num_reg_opt++;
36ad2c1a9aSJuan Castillo }
37ad2c1a9aSJuan Castillo 
cmd_opt_get_array(void)38ad2c1a9aSJuan Castillo const struct option *cmd_opt_get_array(void)
39ad2c1a9aSJuan Castillo {
40ad2c1a9aSJuan Castillo 	return long_opt;
41ad2c1a9aSJuan Castillo }
42ad2c1a9aSJuan Castillo 
cmd_opt_get_name(int idx)43ad2c1a9aSJuan Castillo const char *cmd_opt_get_name(int idx)
44ad2c1a9aSJuan Castillo {
45ad2c1a9aSJuan Castillo 	if (idx >= num_reg_opt) {
46ad2c1a9aSJuan Castillo 		return NULL;
47ad2c1a9aSJuan Castillo 	}
48ad2c1a9aSJuan Castillo 
49ad2c1a9aSJuan Castillo 	return long_opt[idx].name;
50ad2c1a9aSJuan Castillo }
51159807e2SJuan Castillo 
cmd_opt_get_help_msg(int idx)52159807e2SJuan Castillo const char *cmd_opt_get_help_msg(int idx)
53159807e2SJuan Castillo {
54159807e2SJuan Castillo 	if (idx >= num_reg_opt) {
55159807e2SJuan Castillo 		return NULL;
56159807e2SJuan Castillo 	}
57159807e2SJuan Castillo 
58159807e2SJuan Castillo 	return help_msg[idx];
59159807e2SJuan Castillo }
60