summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2003-02-10 06:27:10 +0000
committerJeremy Katz <katzj@redhat.com>2003-02-10 06:27:10 +0000
commitcf9736b0d133f5c7114c0585ac44a30dcce9b6cf (patch)
tree2dc644488c86792151d1324d5b27b28a3eb71b81
parentefb37f66baa69616118133a5868349c524186626 (diff)
downloadanaconda-cf9736b0d133f5c7114c0585ac44a30dcce9b6cf.tar.gz
anaconda-cf9736b0d133f5c7114c0585ac44a30dcce9b6cf.tar.xz
anaconda-cf9736b0d133f5c7114c0585ac44a30dcce9b6cf.zip
add back device command for kickstart
-rw-r--r--loader2/kickstart.c3
-rw-r--r--loader2/kickstart.h1
-rw-r--r--loader2/modules.c63
3 files changed, 67 insertions, 0 deletions
diff --git a/loader2/kickstart.c b/loader2/kickstart.c
index 28f995114..73ce0c8f2 100644
--- a/loader2/kickstart.c
+++ b/loader2/kickstart.c
@@ -63,6 +63,8 @@ struct ksCommand {
static void setTextMode(struct loaderData_s * loaderData, int argc,
char ** argv, int * flagsPtr);
+void loadKickstartModule(struct loaderData_s * loaderData, int argc,
+ char ** argv, int * flagsPtr);
struct ksCommandNames ksTable[] = {
{ KS_CMD_NFS, "nfs", setKickstartNfs },
@@ -74,6 +76,7 @@ struct ksCommandNames ksTable[] = {
{ KS_CMD_KEYBOARD, "keyboard", setKickstartKeyboard },
{ KS_CMD_LANG, "lang", setKickstartLanguage },
{ KS_CMD_DD, "driverdisk", useKickstartDD },
+ { KS_CMD_DEVICE, "device", loadKickstartModule },
{ KS_CMD_NONE, NULL, NULL }
};
diff --git a/loader2/kickstart.h b/loader2/kickstart.h
index aca2944f6..a3c3d7c3a 100644
--- a/loader2/kickstart.h
+++ b/loader2/kickstart.h
@@ -13,6 +13,7 @@
#define KS_CMD_KEYBOARD 7
#define KS_CMD_LANG 8
#define KS_CMD_DD 9
+#define KS_CMD_DEVICE 10
int ksReadCommands(char * cmdFile, int flags);
int ksGetCommand(int cmd, char ** last, int * argc, char *** argv);
diff --git a/loader2/modules.c b/loader2/modules.c
index fbb182eff..7cd19ea15 100644
--- a/loader2/modules.c
+++ b/loader2/modules.c
@@ -21,6 +21,7 @@
#include <fcntl.h>
#include <kudzu/kudzu.h>
#include <newt.h>
+#include <popt.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -901,3 +902,65 @@ static int reloadUnloadedModule(char * modName, moduleList modLoaded,
return rc;
}
+void loadKickstartModule(struct loaderData_s * loaderData, int argc,
+ char ** argv, int * flagsPtr) {
+ char * opts = NULL;
+ char * module = NULL;
+ char * type = NULL;
+ char ** args;
+ poptContext optCon;
+ int rc;
+ int flags = *flagsPtr;
+ struct poptOption ksDeviceOptions[] = {
+ { "opts", '\0', POPT_ARG_STRING, &opts, 0 },
+ { 0, 0, 0, 0, 0 }
+ };
+
+ optCon = poptGetContext(NULL, argc, (const char **) argv,
+ ksDeviceOptions, 0);
+ if ((rc = poptGetNextOpt(optCon)) < -1) {
+ newtWinMessage(_("Kickstart Error"), _("OK"),
+ _("Bad argument to device kickstart method "
+ "command %s: %s"),
+ poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
+ poptStrerror(rc));
+ return;
+ }
+
+ type = (char *) poptGetArg(optCon);
+ module = (char *) poptGetArg(optCon);
+
+ if (!type || !module) {
+ logMessage("type and module should be specified for kickstart device "
+ "command");
+ }
+
+ if (opts) {
+ int numAlloced = 5, i = 0;
+ char * start;
+ char * end;
+
+ args = malloc((numAlloced + 1) * sizeof(args));
+ start = opts;
+ while (start && *start) {
+ end = start;
+ while (!isspace(*end) && *end) end++;
+ *end = '\0';
+ (args)[i++] = strdup(start);
+ start = end + 1;
+ *end = ' ';
+ start = strchr(end, ' ');
+ if (start) start++;
+
+ if (i >= numAlloced) {
+ numAlloced += 5;
+ args = realloc(args, sizeof(args) * (numAlloced + 1));
+ }
+ }
+ args[i] = NULL;
+ }
+
+
+ mlLoadModule(module, loaderData->modLoaded, *(loaderData->modDepsPtr),
+ loaderData->modInfo, args, flags);
+}