summaryrefslogtreecommitdiffstats
path: root/usr.sbin/kgzip/kgzip.c
diff options
context:
space:
mode:
authorrnordier <rnordier@FreeBSD.org>2000-11-04 13:02:00 +0000
committerrnordier <rnordier@FreeBSD.org>2000-11-04 13:02:00 +0000
commit18e0fe6967f684c8adb8dd9db3a8cb24f70e7705 (patch)
tree796a6ec2a8cda6145d54708de7195fc62b04838a /usr.sbin/kgzip/kgzip.c
parent2cfec00a84116cb5277eecec357964eb0c113954 (diff)
downloadFreeBSD-src-18e0fe6967f684c8adb8dd9db3a8cb24f70e7705.zip
FreeBSD-src-18e0fe6967f684c8adb8dd9db3a8cb24f70e7705.tar.gz
Add support for creating a.out output files in addition to ELF.
This allows booting from compressed binaries using older bootstraps. Thanks to: dwmalone
Diffstat (limited to 'usr.sbin/kgzip/kgzip.c')
-rw-r--r--usr.sbin/kgzip/kgzip.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/usr.sbin/kgzip/kgzip.c b/usr.sbin/kgzip/kgzip.c
index 3c3df36..5e96432 100644
--- a/usr.sbin/kgzip/kgzip.c
+++ b/usr.sbin/kgzip/kgzip.c
@@ -49,6 +49,7 @@ static const char rcsid[] =
#define SFX_MAX 5 /* Size of larger filename suffix */
const char *loader = "/usr/lib/kgzldr.o"; /* Default loader */
+int format; /* Output format */
char *tname; /* Name of temporary file */
@@ -70,11 +71,11 @@ main(int argc, char *argv[])
tmpdir = getenv("TMPDIR");
if (asprintf(&tname, "%s/kgzXXXXXXXXXX", tmpdir == NULL ? _PATH_TMP : tmpdir) == -1)
- errx(1, "Out of memory");
+ errx(1, "Out of memory");
output = NULL;
cflag = vflag = 0;
- while ((c = getopt(argc, argv, "cvl:o:")) != -1)
+ while ((c = getopt(argc, argv, "cvf:l:o:")) != -1)
switch (c) {
case 'c':
cflag = 1;
@@ -82,6 +83,14 @@ main(int argc, char *argv[])
case 'v':
vflag = 1;
break;
+ case 'f':
+ if (!strcmp(optarg, "aout"))
+ format = F_AOUT;
+ else if (!strcmp(optarg, "elf"))
+ format = F_ELF;
+ else
+ errx(1, "%s: Unknown format", optarg);
+ break;
case 'l':
loader = optarg;
break;
@@ -98,8 +107,11 @@ main(int argc, char *argv[])
atexit(cleanup);
mk_fn(cflag, *argv, output, fn);
memset(&kh, 0, sizeof(kh));
- if (fn[FN_SRC])
+ if (fn[FN_SRC]) {
+ if (!format)
+ format = F_ELF;
kgzcmp(&kh, fn[FN_SRC], fn[FN_OBJ]);
+ }
if (!cflag)
kgzld(&kh, fn[FN_OBJ], fn[FN_KGZ]);
if (vflag)
@@ -159,6 +171,6 @@ static void
usage(void)
{
fprintf(stderr,
- "usage: kgzip [-cv] [-l file] [-o filename] file\n");
+ "usage: kgzip [-cv] [-f format] [-l file] [-o filename] file\n");
exit(1);
}
OpenPOWER on IntegriCloud