bootflags.c revision 986fd29a0dc13f7608ef7f508f6e700bd7bc2720
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/bootconf.h>
#include <sys/sysmacros.h>
#include <util/getoptstr.h>
#include "boot_plat.h"
static char default_path_buf[MAXPATHLEN];
char cmd_line_boot_archive[MAXPATHLEN];
/*
* Parse the boot arguments, adding the options found to the existing boothowto
* value (if any) or other state. Then rewrite the buffer with arguments for
* the standalone.
*
* NOTE: boothowto may already have bits set when this function is called
*/
void
{
static char newargs[OBP_MAXPATHLEN];
struct gos_params params;
const char *cp;
char *np;
int c;
char *cmd_line_default_path;
switch (c) {
/*
* Bootblock flags.
*/
case 'H':
/*FALLTHRU*/
case 'X':
break;
case 'F':
if (params.gos_optarglen >=
sizeof (cmd_line_boot_archive)) {
printf("boot: -F argument too long. "
"Ignoring.\n");
break;
}
(void) strncpy(cmd_line_boot_archive,
break;
/*
* Boot flags.
*/
case 'V':
verbosemode = 1;
break;
case 'n':
cache_state = 0;
printf("Warning: boot will not enable cache\n");
break;
case 'D':
printf("boot: -D argument too long. "
"Ignoring.\n");
break;
}
break;
case 'o':
if (params.gos_optarglen >=
sizeof (wanboot_arguments)) {
printf("boot: -o argument too long. "
"Ignoring.\n");
break;
}
break;
case 'a':
boothowto |= RB_ASKNAME;
break;
case 'd':
break;
case 'v':
boothowto |= RB_VERBOSE;
break;
case 'h':
break;
/* Consumed by the kernel */
case 'k':
break;
/*
* Unrecognized flags: stop.
*/
case '?':
/*
* Error. Either an unrecognized option, or an option
* without an argument. Check for the latter.
*/
switch (params.gos_last_opt) {
case 'F':
case 'I':
case 'D':
case 'o':
printf("boot: -%c flag missing required "
"argument. Ignoring.\n",
break;
default:
/* Unrecognized option. Stop. */
goto done;
}
break;
default:
printf("boot: Ignoring unimplemented option -%c.\n", c);
}
}
done:
/*
* Construct the arguments for the standalone.
*/
*newargs = '\0';
/*
* We need a dash if we encountered an unrecognized option or if we
* need to pass flags on.
*/
if (c == '?' || (boothowto &
/* These flags are to be passed to the standalone. */
*np++ = '-';
/*
* boot(1M) says to pass these on.
*/
if (boothowto & RB_ASKNAME)
*np++ = 'a';
/*
* boot isn't documented as consuming these flags, so pass
* them on.
*/
if (boothowto & RB_DEBUGENTER)
*np++ = 'd';
*np++ = 'k';
if (boothowto & RB_VERBOSE)
*np++ = 'v';
*np++ = 'h';
/*
* If we didn't encounter an unrecognized flag and there's
* more to copy, add a space to separate these flags.
* (Otherwise, unrecognized flags can be appended since we
* started this word with a dash.)
*/
*np++ = ' ';
}
if (c == '?') {
/*
* Unrecognized flag: Copy gos_errp to end of line or a "--"
* word.
*/
cp += 2;
break;
} else {
/* Copy until the next word. */
cp++;
cp++;
}
}
} else {
}
npres--;
/*
* If a default filename was specified in the args, set it.
*/
/*
* See if user wants to examine things
*/
}