7e22b02b53f39f4ab68f026f4f6a63c405d2efa1
[wraplinux.git] / wraplinux.h
1 /* ----------------------------------------------------------------------- *
2  *
3  *   Copyright 2008 rPath, Inc. - 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 #ifndef WRAPLINUX_H
14 #define WRAPLINUX_H
15
16 #include "config.h"
17
18 #include <inttypes.h>
19 #include <stdbool.h>
20 #include <stdlib.h>
21 #include <stdio.h>
22 #include <sysexits.h>
23
24 #include "segment.h"
25
26 #define WRAPLINUX_PACKAGE "wraplinux"
27
28 extern const char *program;
29
30 struct opt {
31         const char *params;
32         int (*output) (struct segment *, addr_t, FILE *);
33 } opt;
34
35 struct string_list {
36         struct string_list *next;
37         const char *str;
38 };
39
40 /* Convenience inline functions */
41 static inline addr_t align_up(addr_t addr, int align)
42 {
43         addr_t align_mask = ((addr_t)1 << align)-1;
44         return (addr + align_mask) & ~align_mask;
45 }
46
47 static inline addr_t align_down(addr_t addr, int align)
48 {
49         addr_t align_mask = ((addr_t)1 << align)-1;
50         return addr & ~align_mask;
51 }
52
53 static inline addr_t padsize(addr_t addr, int align)
54 {
55         addr_t align_mask = ((addr_t)1 << align)-1;
56         return -addr & align_mask;
57 }
58
59 /* linux.c */
60 int wrap_kernel(const char *kernel, const char *cmdline,
61                 const struct string_list *initrd_list, FILE *out);
62
63 /* mapfile.c */
64 void *mapfile(int fd, size_t *len, bool writable);
65 void unmapfile(int fd, void *ptr, size_t len);
66
67 /* xmalloc.c */
68 void *xmalloc(size_t);
69 void *xcalloc(size_t, size_t);
70 int xasprintf(char **strp, const char *fmt, ...);
71
72 /* cwrite.c */
73 size_t c_fwrite(const void *ptr, size_t bytes, FILE *stream);
74 size_t c_writezero(size_t n, FILE *stream);
75
76 #endif