Evening,
When using `config -e`:
* Don't print a NULL pointer if binary loaded is not a kernel.
* Don't segfault of binary loaded is not a kernel.
* Report non-existent kernel via a preliminary stat().
* Make a warning look like the rest.
OK?
Index: exec.c
===================================================================
RCS file: /cvs/src/usr.sbin/config/exec.c,v
retrieving revision 1.7
diff -u -r1.7 exec.c
--- exec.c 27 Oct 2009 23:59:51 -0000 1.7
+++ exec.c 28 Sep 2011 01:19:49 -0000
@@ -26,6 +26,8 @@
#include <err.h>
#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include <stdio.h>
#ifdef AOUT_SUPPORT
@@ -109,6 +111,11 @@
void
loadkernel(char *file)
{
+ struct stat st;
+
+ if (stat(file, &st) == -1)
+ err(1, "cannot stat '%s'", file);
+
current_exec = -1;
#ifdef AOUT_SUPPORT
Index: ukc.c
===================================================================
RCS file: /cvs/src/usr.sbin/config/ukc.c,v
retrieving revision 1.16
diff -u -r1.16 ukc.c
--- ukc.c 10 Dec 2009 22:07:19 -0000 1.16
+++ ukc.c 28 Sep 2011 01:19:49 -0000
@@ -114,10 +114,8 @@
}
}
- printf("%s", adjust((caddr_t)nl[P_VERSION].n_value));
-
if (force == 0 && outfile == NULL)
- printf("warning: no output file specified\n");
+ printf("WARNING no output file specified\n");
if (nl[IA_EXTRALOC].n_type == 0 || nl[I_NEXTRALOC].n_type == 0 ||
nl[I_UEXTRALOC].n_type == 0 || nl[I_HISTLEN].n_type == 0 ||
@@ -155,6 +153,8 @@
process_history(histlen, history);
}
+ printf("%s", adjust((caddr_t)nl[P_VERSION].n_value));
+
if (config()) {
if (force == 0 && outfile == NULL) {
fprintf(stderr, "not forced\n");
@@ -184,7 +184,9 @@
struct winsize w;
#endif
- cd = get_cfdata(0); /* get first item */
+ if ((cd = get_cfdata(0)) == NULL) /* get first item */
+ errx(1, "failed to get first cfdata");
+
while (cd->cf_attach != 0) {
maxdev = i;
totdev = i;
--
Best Regards
Edd Barrett