home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / misc / src / install / config.c < prev    next >
C/C++ Source or Header  |  1997-11-09  |  4KB  |  180 lines

  1. #include <alloca.h>
  2. #include <newt.h>
  3. #include <sys/wait.h>
  4. #include <malloc.h>
  5. #include <strings.h>
  6. #include <unistd.h>
  7.  
  8. #include "config.h"
  9. #include "install.h"
  10. #include "kickstart.h"
  11. #include "log.h"
  12.  
  13. static int runConfigTool(char * tool, int argc, char ** inargv) {
  14.     int childpid;
  15.     int status;
  16.     char ** argv = NULL;
  17.  
  18.     if (inargv) {
  19.     argv = alloca(sizeof(*argv) * (argc + 1));
  20.     memcpy(argv, inargv, sizeof(*argv) * argc);
  21.     argv[argc] = NULL;
  22.     argv[0] = tool;
  23.     }
  24.  
  25.     logMessage("running %s", tool);
  26.     newtSuspend();
  27.  
  28.     if (!(childpid = fork())) {
  29.     chroot("/mnt");
  30.     chdir("/");
  31.  
  32.     if (argv)
  33.         execv(argv[0], argv);
  34.     else
  35.         execl(tool, tool, NULL);
  36.     exit(2);
  37.     } 
  38.  
  39.     waitpid(childpid, &status, 0);
  40.     newtResume();
  41.     if (WIFEXITED(status)) {
  42.     if (WEXITSTATUS(status) == 1) {
  43.         logMessage("    tool canceled");
  44.         return INST_CANCEL;
  45.     } else if (WEXITSTATUS(status) == 0) {
  46.         return 0;
  47.     }
  48.     }
  49.  
  50.     logMessage("    tool failed");
  51.  
  52.     return INST_ERROR;
  53. }
  54.  
  55. int timeConfig(void) {
  56.     char ** argv; 
  57.     int argc;
  58.  
  59.     if (kickstart && !ksGetCommand(KS_CMD_TIMEZONE, NULL, &argc, &argv)) {
  60.     return runConfigTool("/usr/sbin/timeconfig", argc, argv);
  61.     }
  62.  
  63.     return runConfigTool("/usr/sbin/timeconfig", 0, NULL);
  64. }
  65.  
  66. int servicesConfig(void) {
  67.     if (kickstart) {
  68.     return 0;
  69.     }
  70.  
  71.     return runConfigTool("/usr/sbin/ntsysv", 0, NULL);
  72. }
  73.  
  74. int mouseConfig(void) {
  75.     char ** argv, **kargv; 
  76.     int argc;
  77.     int i;
  78.     int shift;
  79.     
  80.     if (!kickstart || ksGetCommand(KS_CMD_MOUSE, NULL, &argc, &argv)) {
  81.     /* no options, or in normal mode */
  82.     argc = 1;
  83.     argv = alloca(sizeof(*argv));
  84.     argv[0] = alloca(sizeof("mouse")+1);
  85.     strcpy(argv[0],"mouse");
  86.     }    
  87.  
  88.     /* add --kickstart and --expert options */
  89.     shift = 0;
  90.     if (kickstart)
  91.     shift++;
  92.     if (expert)
  93.     shift++;
  94.     
  95.     kargv = alloca(sizeof(*argv) * (argc + shift));
  96.     memcpy(kargv, argv, sizeof(*argv) * argc);
  97.     for (i=argc+shift-1; i>shift; i--)
  98.     kargv[i]=kargv[i-shift];
  99.  
  100.     i = 1;
  101.     if (kickstart) {
  102.     kargv[i] = "--kickstart";
  103.     i++;
  104.     }
  105.     if (expert) {
  106.     kargv[i] = "--expert";
  107.     kargv[i] = "--noprobe";
  108.     i++;
  109.     }
  110.  
  111.     argc += shift;
  112.     return runConfigTool("/usr/sbin/mouseconfig", argc, kargv);
  113. }
  114.  
  115. int xfree86Config(char *mode) {
  116.     char **argv, **kargv;
  117.     int argc;
  118.     int i;
  119.     int shift;
  120.  
  121.     argv  = NULL;
  122.     kargv = NULL;
  123.     if (!kickstart || ksGetCommand(KS_CMD_XCONFIG, argv, &argc, &argv)) {
  124.     /* they didnt specify anything, or in normal mode */
  125.     argc=1;
  126.     argv=alloca(sizeof(*argv));
  127.     argv[0]=alloca(strlen("xconfig"+1));
  128.     strcpy(argv[0],"xconfig");
  129.     }
  130.     
  131.     /* make commandline, add mode and --kickstart, and maybe --expert */
  132.     shift = 1;
  133.     if (expert)
  134.     shift++;
  135.     if (kickstart)
  136.     shift++;
  137.  
  138.     kargv = alloca(sizeof(*argv) * (argc + shift));
  139.     memcpy(kargv, argv, sizeof(*argv) * argc);
  140.     for (i=argc+shift-1; i>shift; i--)
  141.     kargv[i]=kargv[i-shift];
  142.  
  143.     i = 1;
  144.     if (kickstart) {
  145.     kargv[i] = "--kickstart";
  146.     i++;
  147.     }
  148.     if (expert) {
  149.     kargv[i] = "--expert";
  150.     i++;
  151.     }
  152.  
  153.     kargv[i] = alloca(strlen(mode)+1);
  154.     strcpy(kargv[i],mode);
  155.     i++;
  156.     
  157.     argc+=shift;
  158.     
  159.     return runConfigTool("/usr/X11R6/bin/Xconfigurator",argc, kargv);
  160. }
  161.  
  162. void configPCMCIA(char * pcic) {
  163.     FILE * f;
  164.  
  165.     if (testing) return;
  166.  
  167.     f = fopen("/mnt/etc/sysconfig/pcmcia", "w");
  168.     if (pcic) {
  169.     fprintf(f, "PCMCIA=yes\n");
  170.     fprintf(f, "PCIC=%s\n", pcic);
  171.     } else {
  172.     fprintf(f, "PCMCIA=no\n");
  173.     fprintf(f, "PCIC=\n");
  174.     }
  175.  
  176.     fprintf(f, "PCIC_OPTS=\nCORE_OPTS=\n");
  177.  
  178.     fclose(f);
  179. }
  180.