1*90aa901fSSumit Garg /* 2*90aa901fSSumit Garg * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 3*90aa901fSSumit Garg * 4*90aa901fSSumit Garg * SPDX-License-Identifier: BSD-3-Clause 5*90aa901fSSumit Garg */ 6*90aa901fSSumit Garg 7*90aa901fSSumit Garg #include <assert.h> 8*90aa901fSSumit Garg #include <cmd_opt.h> 9*90aa901fSSumit Garg #include <getopt.h> 10*90aa901fSSumit Garg #include <stddef.h> 11*90aa901fSSumit Garg #include <stdlib.h> 12*90aa901fSSumit Garg #include "debug.h" 13*90aa901fSSumit Garg 14*90aa901fSSumit Garg /* Command line options */ 15*90aa901fSSumit Garg static struct option long_opt[CMD_OPT_MAX_NUM+1]; 16*90aa901fSSumit Garg static const char *help_msg[CMD_OPT_MAX_NUM+1]; 17*90aa901fSSumit Garg static int num_reg_opt; 18*90aa901fSSumit Garg cmd_opt_add(const cmd_opt_t * cmd_opt)19*90aa901fSSumit Gargvoid cmd_opt_add(const cmd_opt_t *cmd_opt) 20*90aa901fSSumit Garg { 21*90aa901fSSumit Garg assert(cmd_opt != NULL); 22*90aa901fSSumit Garg 23*90aa901fSSumit Garg if (num_reg_opt >= CMD_OPT_MAX_NUM) { 24*90aa901fSSumit Garg ERROR("Out of memory. Please increase CMD_OPT_MAX_NUM\n"); 25*90aa901fSSumit Garg exit(1); 26*90aa901fSSumit Garg } 27*90aa901fSSumit Garg 28*90aa901fSSumit Garg long_opt[num_reg_opt].name = cmd_opt->long_opt.name; 29*90aa901fSSumit Garg long_opt[num_reg_opt].has_arg = cmd_opt->long_opt.has_arg; 30*90aa901fSSumit Garg long_opt[num_reg_opt].flag = 0; 31*90aa901fSSumit Garg long_opt[num_reg_opt].val = cmd_opt->long_opt.val; 32*90aa901fSSumit Garg 33*90aa901fSSumit Garg help_msg[num_reg_opt] = cmd_opt->help_msg; 34*90aa901fSSumit Garg 35*90aa901fSSumit Garg num_reg_opt++; 36*90aa901fSSumit Garg } 37*90aa901fSSumit Garg cmd_opt_get_array(void)38*90aa901fSSumit Gargconst struct option *cmd_opt_get_array(void) 39*90aa901fSSumit Garg { 40*90aa901fSSumit Garg return long_opt; 41*90aa901fSSumit Garg } 42*90aa901fSSumit Garg cmd_opt_get_name(int idx)43*90aa901fSSumit Gargconst char *cmd_opt_get_name(int idx) 44*90aa901fSSumit Garg { 45*90aa901fSSumit Garg if (idx >= num_reg_opt) { 46*90aa901fSSumit Garg return NULL; 47*90aa901fSSumit Garg } 48*90aa901fSSumit Garg 49*90aa901fSSumit Garg return long_opt[idx].name; 50*90aa901fSSumit Garg } 51*90aa901fSSumit Garg cmd_opt_get_help_msg(int idx)52*90aa901fSSumit Gargconst char *cmd_opt_get_help_msg(int idx) 53*90aa901fSSumit Garg { 54*90aa901fSSumit Garg if (idx >= num_reg_opt) { 55*90aa901fSSumit Garg return NULL; 56*90aa901fSSumit Garg } 57*90aa901fSSumit Garg 58*90aa901fSSumit Garg return help_msg[idx]; 59*90aa901fSSumit Garg } 60