From 17b337d4a8ae0a355a8e61e967f5015907590e9e Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 21 Nov 2010 16:39:36 +0000 Subject: [autoboot] Use generic option-parsing library Total saving: 32 bytes. Signed-off-by: Michael Brown --- src/hci/commands/autoboot_cmd.c | 121 +++++++++++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 32 deletions(-) (limited to 'src/hci') diff --git a/src/hci/commands/autoboot_cmd.c b/src/hci/commands/autoboot_cmd.c index 17bd6bcfc..33788682e 100644 --- a/src/hci/commands/autoboot_cmd.c +++ b/src/hci/commands/autoboot_cmd.c @@ -1,53 +1,110 @@ +/* + * Copyright (C) 2010 Michael Brown . + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + #include +#include #include +#include #include #include FILE_LICENCE ( GPL2_OR_LATER ); +/** @file + * + * Booting commands + * + */ + +/** "autoboot" options */ +struct autoboot_options {}; + +/** "autoboot" option list */ +static struct option_descriptor autoboot_opts[] = {}; + +/** "autoboot" command descriptor */ +static struct command_descriptor autoboot_cmd = + COMMAND_DESC ( struct autoboot_options, autoboot_opts, 0, 0, + "", + "Attempt to boot the system" ); + +/** + * "autoboot" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ static int autoboot_exec ( int argc, char **argv ) { + struct autoboot_options opts; + int rc; - if ( argc != 1 ) { - printf ( "Usage:\n" - " %s\n" - "\n" - "Attempts to boot the system\n", - argv[0] ); - return 1; - } + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &autoboot_cmd, &opts ) ) != 0 ) + return rc; - autoboot(); + /* Try to boot */ + if ( ( rc = autoboot() ) != 0 ) + return rc; - /* Can never return success by definition */ - return 1; + return 0; } +/** "netboot" options */ +struct netboot_options {}; + +/** "netboot" option list */ +static struct option_descriptor netboot_opts[] = {}; + +/** "netboot" command descriptor */ +static struct command_descriptor netboot_cmd = + COMMAND_DESC ( struct netboot_options, netboot_opts, 1, 1, + "", + "Attempt to boot the system from " ); + +/** + * "netboot" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ static int netboot_exec ( int argc, char **argv ) { - const char *netdev_name; + struct netboot_options opts; struct net_device *netdev; + int rc; + + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &netboot_cmd, &opts ) ) != 0 ) + return rc; + + /* Parse interface */ + if ( ( rc = parse_netdev ( argv[optind], &netdev ) ) != 0 ) + return rc; + + /* Try to boot */ + if ( ( rc = netboot ( netdev ) ) != 0 ) + return rc; - if ( argc != 2 ) { - printf ( "Usage:\n" - " %s \n" - "\n" - "Attempts to boot the system from \n", - argv[0] ); - return 1; - } - netdev_name = argv[1]; - - netdev = find_netdev ( netdev_name ); - if ( ! netdev ) { - printf ( "%s: no such interface\n", netdev_name ); - return 1; - } - - netboot ( netdev ); - - /* Can never return success by definition */ - return 1; + return 0; } +/** Booting commands */ struct command autoboot_commands[] __command = { { .name = "autoboot", -- cgit v1.2.3-55-g7522