Changeset View
Changeset View
Standalone View
Standalone View
stand/common/module.c
Show First 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
COMMAND_SET(load, "load", "load a kernel or module", command_load); | COMMAND_SET(load, "load", "load a kernel or module", command_load); | ||||
static int | static int | ||||
command_load(int argc, char *argv[]) | command_load(int argc, char *argv[]) | ||||
{ | { | ||||
struct preloaded_file *fp; | struct preloaded_file *fp; | ||||
char *typestr; | char *typestr; | ||||
char *prefix; | |||||
char *skip; | |||||
int dofile, dokld, ch, error; | int dofile, dokld, ch, error; | ||||
dokld = dofile = 0; | dokld = dofile = 0; | ||||
optind = 1; | optind = 1; | ||||
optreset = 1; | optreset = 1; | ||||
typestr = NULL; | typestr = NULL; | ||||
if (argc == 1) { | if (argc == 1) { | ||||
command_errmsg = "no filename specified"; | command_errmsg = "no filename specified"; | ||||
return (CMD_CRIT); | return (CMD_CRIT); | ||||
} | } | ||||
while ((ch = getopt(argc, argv, "kt:")) != -1) { | prefix = skip = NULL; | ||||
while ((ch = getopt(argc, argv, "kp:s:t:")) != -1) { | |||||
switch(ch) { | switch(ch) { | ||||
case 'k': | case 'k': | ||||
dokld = 1; | dokld = 1; | ||||
break; | break; | ||||
case 'p': | |||||
prefix = optarg; | |||||
break; | |||||
case 's': | |||||
skip = optarg; | |||||
break; | |||||
case 't': | case 't': | ||||
typestr = optarg; | typestr = optarg; | ||||
dofile = 1; | dofile = 1; | ||||
break; | break; | ||||
case '?': | case '?': | ||||
default: | default: | ||||
/* getopt has already reported an error */ | /* getopt has already reported an error */ | ||||
return (CMD_OK); | return (CMD_OK); | ||||
} | } | ||||
} | } | ||||
argv += (optind - 1); | argv += (optind - 1); | ||||
argc -= (optind - 1); | argc -= (optind - 1); | ||||
/* | /* | ||||
* Request to load a raw file? | * Request to load a raw file? | ||||
*/ | */ | ||||
if (dofile) { | if (dofile) { | ||||
if ((argc != 2) || (typestr == NULL) || (*typestr == 0)) { | if ((argc != 2) || (typestr == NULL) || (*typestr == 0)) { | ||||
command_errmsg = "invalid load type"; | command_errmsg = "invalid load type"; | ||||
return (CMD_CRIT); | return (CMD_CRIT); | ||||
} | } | ||||
#ifdef LOADER_VERIEXEC | |||||
if (strncmp(typestr, "manifest", 8) == 0) { | |||||
return (load_manifest(argv[1], prefix, skip, NULL)); | |||||
} | |||||
#endif | |||||
fp = file_findfile(argv[1], typestr); | fp = file_findfile(argv[1], typestr); | ||||
if (fp) { | if (fp) { | ||||
snprintf(command_errbuf, sizeof(command_errbuf), | snprintf(command_errbuf, sizeof(command_errbuf), | ||||
"warning: file '%s' already loaded", argv[1]); | "warning: file '%s' already loaded", argv[1]); | ||||
return (CMD_WARN); | return (CMD_WARN); | ||||
} | } | ||||
if (file_loadraw(argv[1], typestr, 1) != NULL) | if (file_loadraw(argv[1], typestr, 1) != NULL) | ||||
▲ Show 20 Lines • Show All 277 Lines • ▼ Show 20 Lines | return(NULL); | ||||
} | } | ||||
if ((fd = open(name, O_RDONLY)) < 0) { | if ((fd = open(name, O_RDONLY)) < 0) { | ||||
snprintf(command_errbuf, sizeof(command_errbuf), | snprintf(command_errbuf, sizeof(command_errbuf), | ||||
"can't open '%s': %s", name, strerror(errno)); | "can't open '%s': %s", name, strerror(errno)); | ||||
free(name); | free(name); | ||||
return(NULL); | return(NULL); | ||||
} | } | ||||
#ifdef LOADER_VERIEXEC | |||||
if (verify_file(fd, name, 0, VE_MUST) < 0) { | |||||
sprintf(command_errbuf, "can't verify '%s'", name); | |||||
free(name); | |||||
close(fd); | |||||
return(NULL); | |||||
} | |||||
#endif | |||||
if (archsw.arch_loadaddr != NULL) | if (archsw.arch_loadaddr != NULL) | ||||
loadaddr = archsw.arch_loadaddr(LOAD_RAW, name, loadaddr); | loadaddr = archsw.arch_loadaddr(LOAD_RAW, name, loadaddr); | ||||
printf("%s ", name); | printf("%s ", name); | ||||
laddr = loadaddr; | laddr = loadaddr; | ||||
for (;;) { | for (;;) { | ||||
▲ Show 20 Lines • Show All 651 Lines • Show Last 20 Lines |