home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 February
/
CHIP_2_98.iso
/
misc
/
src
/
install
/
config.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-11-09
|
4KB
|
180 lines
#include <alloca.h>
#include <newt.h>
#include <sys/wait.h>
#include <malloc.h>
#include <strings.h>
#include <unistd.h>
#include "config.h"
#include "install.h"
#include "kickstart.h"
#include "log.h"
static int runConfigTool(char * tool, int argc, char ** inargv) {
int childpid;
int status;
char ** argv = NULL;
if (inargv) {
argv = alloca(sizeof(*argv) * (argc + 1));
memcpy(argv, inargv, sizeof(*argv) * argc);
argv[argc] = NULL;
argv[0] = tool;
}
logMessage("running %s", tool);
newtSuspend();
if (!(childpid = fork())) {
chroot("/mnt");
chdir("/");
if (argv)
execv(argv[0], argv);
else
execl(tool, tool, NULL);
exit(2);
}
waitpid(childpid, &status, 0);
newtResume();
if (WIFEXITED(status)) {
if (WEXITSTATUS(status) == 1) {
logMessage(" tool canceled");
return INST_CANCEL;
} else if (WEXITSTATUS(status) == 0) {
return 0;
}
}
logMessage(" tool failed");
return INST_ERROR;
}
int timeConfig(void) {
char ** argv;
int argc;
if (kickstart && !ksGetCommand(KS_CMD_TIMEZONE, NULL, &argc, &argv)) {
return runConfigTool("/usr/sbin/timeconfig", argc, argv);
}
return runConfigTool("/usr/sbin/timeconfig", 0, NULL);
}
int servicesConfig(void) {
if (kickstart) {
return 0;
}
return runConfigTool("/usr/sbin/ntsysv", 0, NULL);
}
int mouseConfig(void) {
char ** argv, **kargv;
int argc;
int i;
int shift;
if (!kickstart || ksGetCommand(KS_CMD_MOUSE, NULL, &argc, &argv)) {
/* no options, or in normal mode */
argc = 1;
argv = alloca(sizeof(*argv));
argv[0] = alloca(sizeof("mouse")+1);
strcpy(argv[0],"mouse");
}
/* add --kickstart and --expert options */
shift = 0;
if (kickstart)
shift++;
if (expert)
shift++;
kargv = alloca(sizeof(*argv) * (argc + shift));
memcpy(kargv, argv, sizeof(*argv) * argc);
for (i=argc+shift-1; i>shift; i--)
kargv[i]=kargv[i-shift];
i = 1;
if (kickstart) {
kargv[i] = "--kickstart";
i++;
}
if (expert) {
kargv[i] = "--expert";
kargv[i] = "--noprobe";
i++;
}
argc += shift;
return runConfigTool("/usr/sbin/mouseconfig", argc, kargv);
}
int xfree86Config(char *mode) {
char **argv, **kargv;
int argc;
int i;
int shift;
argv = NULL;
kargv = NULL;
if (!kickstart || ksGetCommand(KS_CMD_XCONFIG, argv, &argc, &argv)) {
/* they didnt specify anything, or in normal mode */
argc=1;
argv=alloca(sizeof(*argv));
argv[0]=alloca(strlen("xconfig"+1));
strcpy(argv[0],"xconfig");
}
/* make commandline, add mode and --kickstart, and maybe --expert */
shift = 1;
if (expert)
shift++;
if (kickstart)
shift++;
kargv = alloca(sizeof(*argv) * (argc + shift));
memcpy(kargv, argv, sizeof(*argv) * argc);
for (i=argc+shift-1; i>shift; i--)
kargv[i]=kargv[i-shift];
i = 1;
if (kickstart) {
kargv[i] = "--kickstart";
i++;
}
if (expert) {
kargv[i] = "--expert";
i++;
}
kargv[i] = alloca(strlen(mode)+1);
strcpy(kargv[i],mode);
i++;
argc+=shift;
return runConfigTool("/usr/X11R6/bin/Xconfigurator",argc, kargv);
}
void configPCMCIA(char * pcic) {
FILE * f;
if (testing) return;
f = fopen("/mnt/etc/sysconfig/pcmcia", "w");
if (pcic) {
fprintf(f, "PCMCIA=yes\n");
fprintf(f, "PCIC=%s\n", pcic);
} else {
fprintf(f, "PCMCIA=no\n");
fprintf(f, "PCIC=\n");
}
fprintf(f, "PCIC_OPTS=\nCORE_OPTS=\n");
fclose(f);
}