Initial commit: functional for newer bzImage kernels
[wraplinux.git] / main.c
1 /* ----------------------------------------------------------------------- *
2  *   
3  *   Copyright 2008 H. Peter Anvin - All Rights Reserved
4  *
5  *   This program is free software; you can redistribute it and/or modify
6  *   it under the terms of the GNU General Public License as published by
7  *   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
8  *   Boston MA 02110-1301, USA; either version 2 of the License, or
9  *   (at your option) any later version; incorporated herein by reference.
10  *
11  * ----------------------------------------------------------------------- */
12
13 /*
14  * main.c
15  *
16  * Wrap a Linux image in an ELF (or other) container
17  */
18
19 #include <stdio.h>
20 #include <unistd.h>
21 #include <getopt.h>
22 #include <errno.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <sysexits.h>
26 #include <sys/mman.h>
27 #include <sys/types.h>
28
29 #include "wraplinux.h"
30
31 const char *program;
32
33 struct opt {
34   const char *params;
35 } opt;
36
37 const struct option long_options[] = {
38   { "params",          1, 0, 'p' },
39   { "initrd",          1, 0, 'i' },
40   { 0, 0, 0, 0 }
41 };
42 #define OPTSTRING "p:i:"
43
44 static void usage(int err)
45 {
46   exit(err);
47 }
48
49 int main(int argc, char *argv[])
50 {
51   int optch;
52   const char *kernel;
53   struct string_list *ird = NULL, **irdp = &ird, *ip;
54
55   program = argv[0];
56
57   while ( (optch = getopt_long(argc, argv, OPTSTRING, long_options, NULL))
58           != EOF ) {
59     switch (optch) {
60     case 'p':
61       opt.params = optarg;
62       break;
63     case 'i':
64       ip = malloc(sizeof *ip);
65       ip->str = optarg;
66       ip->next = NULL;
67       *irdp = ip;
68       irdp = &ip->next;
69       break;
70     default:
71       usage(EX_USAGE);
72       break;
73     }
74   }
75
76   if ((argc-optind) != 1)
77     usage(EX_USAGE);
78
79   kernel = argv[optind];
80
81   if (!opt.params)
82     opt.params = "";
83
84   wrap_kernel(kernel, opt.params, ird, stdout);
85   return 0;
86 }
87