|
#include <ctype.h> |
|
1 |
#include <errno.h> |
#include <errno.h> |
2 |
#include <fcntl.h> |
#include <fcntl.h> |
3 |
#include <stdio.h> |
#include <stdio.h> |
94 |
if (ioctl(rfd, BLKGETSIZE64, &ramdisk_size)) |
if (ioctl(rfd, BLKGETSIZE64, &ramdisk_size)) |
95 |
ramdisk_size = ~0ULL; |
ramdisk_size = ~0ULL; |
96 |
ramdisk_start = 0; |
ramdisk_start = 0; |
97 |
DEBUG(("New size = %llu\n", ramdisk_size)); |
dprintf("New size = %llu\n", ramdisk_size); |
98 |
} |
} |
99 |
do { |
do { |
100 |
ramdisk_left = ramdisk_size - ramdisk_start; |
ramdisk_left = ramdisk_size - ramdisk_start; |
116 |
rv = inflate(&zs, Z_SYNC_FLUSH); |
rv = inflate(&zs, Z_SYNC_FLUSH); |
117 |
} while (rv == Z_OK || rv == Z_BUF_ERROR); |
} while (rv == Z_OK || rv == Z_BUF_ERROR); |
118 |
|
|
119 |
DEBUG(("kinit: inflate returned %d\n", rv)); |
dprintf("kinit: inflate returned %d\n", rv); |
120 |
|
|
121 |
if (rv != Z_STREAM_END) |
if (rv != Z_STREAM_END) |
122 |
goto err2; |
goto err2; |
123 |
|
|
124 |
/* Write the last */ |
/* Write the last */ |
125 |
_fwrite(out_buf, BUF_SZ - zs.avail_out, wfd); |
_fwrite(out_buf, BUF_SZ - zs.avail_out, wfd); |
126 |
DEBUG(("kinit: writing %d bytes\n", BUF_SZ - zs.avail_out)); |
dprintf("kinit: writing %d bytes\n", BUF_SZ - zs.avail_out); |
127 |
|
|
128 |
inflateEnd(&zs); |
inflateEnd(&zs); |
129 |
return 0; |
return 0; |
152 |
if (ioctl(rfd, BLKGETSIZE64, &ramdisk_size)) |
if (ioctl(rfd, BLKGETSIZE64, &ramdisk_size)) |
153 |
ramdisk_size = ~0ULL; |
ramdisk_size = ~0ULL; |
154 |
|
|
155 |
DEBUG(("start: %llu size: %llu fssize: %llu\n", |
dprintf("start: %llu size: %llu fssize: %llu\n", |
156 |
ramdisk_start, ramdisk_size, fssize)); |
ramdisk_start, ramdisk_size, fssize); |
157 |
|
|
158 |
while (fssize) { |
while (fssize) { |
159 |
|
|
188 |
return !!fssize; |
return !!fssize; |
189 |
} |
} |
190 |
|
|
191 |
int ramdisk_load(int argc, char *argv[], dev_t root_dev) |
int ramdisk_load(int argc, char *argv[]) |
192 |
{ |
{ |
193 |
const char *arg_prompt_ramdisk = get_arg(argc, argv, "prompt_ramdisk="); |
const char *arg_prompt_ramdisk = get_arg(argc, argv, "prompt_ramdisk="); |
194 |
const char *arg_ramdisk_blocksize = |
const char *arg_ramdisk_blocksize = |
242 |
(fssize == 0 && !(is_gzip = !strcmp(fstype, "gzip")))) { |
(fssize == 0 && !(is_gzip = !strcmp(fstype, "gzip")))) { |
243 |
fprintf(stderr, |
fprintf(stderr, |
244 |
"Failure loading ramdisk: unknown filesystem type\n"); |
"Failure loading ramdisk: unknown filesystem type\n"); |
245 |
|
close(rfd); |
246 |
|
fclose(wfd); |
247 |
return 0; |
return 0; |
248 |
} |
} |
249 |
|
|
250 |
DEBUG(("kinit: ramdisk is %s, size %llu\n", fstype, fssize)); |
dprintf("kinit: ramdisk is %s, size %llu\n", fstype, fssize); |
251 |
|
|
252 |
fprintf(stderr, "Loading ramdisk (%s) ...", is_gzip ? "gzip" : "raw"); |
fprintf(stderr, "Loading ramdisk (%s) ...", is_gzip ? "gzip" : "raw"); |
253 |
|
|