Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/sommerfeld_i386mp_1]: src/sys/arch/i386/stand use exit(int), not exit(vo...
details: https://anonhg.NetBSD.org/src/rev/003bc1841d65
branches: sommerfeld_i386mp_1
changeset: 482538:003bc1841d65
user: itojun <itojun%NetBSD.org@localhost>
date: Sat Jun 01 11:40:33 2002 +0000
description:
use exit(int), not exit(void), consistently - even if the arg has no meaning.
diffstat:
sys/arch/i386/stand/biosboot/main.c | 402 ++++++++++++++++++++++++++++++++++++
sys/arch/i386/stand/lib/panic.c | 54 ++++
2 files changed, 456 insertions(+), 0 deletions(-)
diffs (truncated from 464 to 300 lines):
diff -r 57504a3f6194 -r 003bc1841d65 sys/arch/i386/stand/biosboot/main.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/i386/stand/biosboot/main.c Sat Jun 01 11:40:33 2002 +0000
@@ -0,0 +1,402 @@
+/* $NetBSD: main.c,v 1.29.2.2 2002/06/01 11:40:33 itojun Exp $ */
+
+/*
+ * Copyright (c) 1996, 1997, 1999
+ * Matthias Drochner. All rights reserved.
+ * Copyright (c) 1996, 1997
+ * Perry E. Metzger. All rights reserved.
+ * Copyright (c) 1997
+ * Jason R. Thorpe. All rights reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgements:
+ * This product includes software developed for the NetBSD Project
+ * by Matthias Drochner.
+ * This product includes software developed for the NetBSD Project
+ * by Perry E. Metzger.
+ * 4. The names of the authors may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <sys/reboot.h>
+
+#include <lib/libsa/stand.h>
+#include <lib/libsa/ufs.h>
+#include <lib/libkern/libkern.h>
+
+#include <libi386.h>
+#include "devopen.h"
+
+#ifdef SUPPORT_PS2
+#include <biosmca.h>
+#endif
+
+int errno;
+extern int boot_biosdev;
+
+extern const char bootprog_name[], bootprog_rev[], bootprog_date[],
+ bootprog_maker[];
+
+static const char * const names[] = {
+ "netbsd", "netbsd.gz",
+ "netbsd.old", "netbsd.old.gz",
+ "onetbsd", "onetbsd.gz",
+#ifdef notyet
+ "netbsd.el", "netbsd.el.gz",
+#endif /*notyet*/
+};
+
+#define NUMNAMES (sizeof(names)/sizeof(char *))
+#define DEFFILENAME names[0]
+
+#define MAXDEVNAME 16
+
+#define TIMEOUT 5
+int boottimeout = TIMEOUT; /* patchable */
+
+static char *default_devname;
+static int default_unit, default_partition;
+static const char *default_filename;
+
+char *sprint_bootsel __P((const char *));
+void bootit __P((const char *, int, int));
+void print_banner __P((void));
+void main __P((void));
+
+void command_help __P((char *));
+void command_ls __P((char *));
+void command_quit __P((char *));
+void command_boot __P((char *));
+void command_dev __P((char *));
+void command_consdev __P((char *));
+
+const struct bootblk_command commands[] = {
+ { "help", command_help },
+ { "?", command_help },
+ { "ls", command_ls },
+ { "quit", command_quit },
+ { "boot", command_boot },
+ { "dev", command_dev },
+#ifdef SUPPORT_SERIAL
+ { "consdev", command_consdev },
+#endif
+ { NULL, NULL },
+};
+
+int
+parsebootfile(fname, fsname, devname, unit, partition, file)
+ const char *fname;
+ char **fsname; /* out */
+ char **devname; /* out */
+ unsigned int *unit, *partition; /* out */
+ const char **file; /* out */
+{
+ const char *col, *help;
+
+ *fsname = "ufs";
+ *devname = default_devname;
+ *unit = default_unit;
+ *partition = default_partition;
+ *file = default_filename;
+
+ if (fname == NULL)
+ return(0);
+
+ if((col = strchr(fname, ':'))) { /* device given */
+ static char savedevname[MAXDEVNAME+1];
+ int devlen;
+ unsigned int u = 0, p = 0;
+ int i = 0;
+
+ devlen = col - fname;
+ if (devlen > MAXDEVNAME)
+ return(EINVAL);
+
+#define isvalidname(c) ((c) >= 'a' && (c) <= 'z')
+ if (!isvalidname(fname[i]))
+ return(EINVAL);
+ do {
+ savedevname[i] = fname[i];
+ i++;
+ } while (isvalidname(fname[i]));
+ savedevname[i] = '\0';
+
+#define isnum(c) ((c) >= '0' && (c) <= '9')
+ if (i < devlen) {
+ if (!isnum(fname[i]))
+ return(EUNIT);
+ do {
+ u *= 10;
+ u += fname[i++] - '0';
+ } while (isnum(fname[i]));
+ }
+
+#define isvalidpart(c) ((c) >= 'a' && (c) <= 'z')
+ if (i < devlen) {
+ if (!isvalidpart(fname[i]))
+ return(EPART);
+ p = fname[i++] - 'a';
+ }
+
+ if (i != devlen)
+ return(ENXIO);
+
+ *devname = savedevname;
+ *unit = u;
+ *partition = p;
+ help = col + 1;
+ } else
+ help = fname;
+
+ if (*help)
+ *file = help;
+
+ return(0);
+}
+
+char *
+sprint_bootsel(filename)
+ const char *filename;
+{
+ char *fsname, *devname;
+ int unit, partition;
+ const char *file;
+ static char buf[80];
+
+ if (parsebootfile(filename, &fsname, &devname, &unit,
+ &partition, &file) == 0) {
+ sprintf(buf, "%s%d%c:%s", devname, unit, 'a' + partition, file);
+ return(buf);
+ }
+ return("(invalid)");
+}
+
+void
+bootit(filename, howto, tell)
+ const char *filename;
+ int howto, tell;
+{
+
+ if (tell) {
+ printf("booting %s", sprint_bootsel(filename));
+ if (howto)
+ printf(" (howto 0x%x)", howto);
+ printf("\n");
+ }
+
+ if (exec_netbsd(filename, 0, howto) < 0)
+ printf("boot: %s: %s\n", sprint_bootsel(filename),
+ strerror(errno));
+ else
+ printf("boot returned\n");
+}
+
+void
+print_banner()
+{
+
+ printf("\n");
+ printf(">> %s, Revision %s\n", bootprog_name, bootprog_rev);
+ printf(">> (%s, %s)\n", bootprog_maker, bootprog_date);
+ printf(">> Memory: %d/%d k\n", getbasemem(), getextmem());
+}
+
+
+/*
+ * note: normally, void main() wouldn't be legal, but this isn't a
+ * hosted environment...
+ */
+void
+main()
+{
+ int currname;
+ char c;
+
+#ifdef SUPPORT_SERIAL
+ initio(SUPPORT_SERIAL);
+#else
+ initio(CONSDEV_PC);
+#endif
+
+#ifdef SUPPORT_PS2
+ biosmca();
+#endif
+ gateA20();
+
+#ifdef RESET_VIDEO
+ biosvideomode();
+#endif
+
+ print_banner();
+
+ /* try to set default device to what BIOS tells us */
+ bios2dev(boot_biosdev, &default_devname, &default_unit);
+ default_partition = 0;
+
+ /* if the user types "boot" without filename */
+ default_filename = DEFFILENAME;
+
+ printf("Press return to boot now, any other key for boot menu\n");
+ currname = 0;
+ for (;;) {
+ printf("booting %s - starting in ",
+ sprint_bootsel(names[currname]));
+
+ c = awaitkey(boottimeout, 1);
+ if ((c != '\r') && (c != '\n') && (c != '\0')
+#ifdef BOOTPASSWD
+ && checkpasswd()
+#endif
+ ) {
+ printf("type \"?\" or \"help\" for help.\n");
+ bootmenu(); /* does not return */
+ }
+
+ /*
+ * try pairs of names[] entries, foo and foo.gz
+ */
+ /* don't print "booting..." again */
+ bootit(names[currname], 0, 0);
+ /* since it failed, try switching bootfile. */
+ currname = ++currname % NUMNAMES;
+
+ /* now try the second of a pair, presumably the .gz
+ version. */
+ /* XXX duped code sucks. */
+ bootit(names[currname], 0, 1);
+ /* since it failed, try switching bootfile. */
+ currname = ++currname % NUMNAMES;
+ }
+}
+
+/* ARGSUSED */
+void
+command_help(arg)
+ char *arg;
+{
Home |
Main Index |
Thread Index |
Old Index