diff options
Diffstat (limited to 'sbin/sysinstall/utils.c')
-rw-r--r-- | sbin/sysinstall/utils.c | 349 |
1 files changed, 0 insertions, 349 deletions
diff --git a/sbin/sysinstall/utils.c b/sbin/sysinstall/utils.c deleted file mode 100644 index 243b191..0000000 --- a/sbin/sysinstall/utils.c +++ /dev/null @@ -1,349 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * $Id: utils.c,v 1.35 1995/01/14 10:31:29 jkh Exp $ - * - */ - -#include <stdlib.h> -#include <stdio.h> -#include <stdarg.h> -#include <unistd.h> -#include <string.h> -#include <dialog.h> -#include <errno.h> - -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/param.h> -#include <sys/mount.h> -#include <sys/reboot.h> -#include <sys/dkbad.h> -#include <sys/disklabel.h> - -#include "sysinstall.h" - -void -strip_trailing_newlines(char *p) -{ - int len = strlen(p); - while (len > 0 && p[len-1] == '\n') - p[--len] = '\0'; -} - -void -Debug(char *fmt, ...) -{ - char *p; - va_list ap; - p = Malloc(2048); - va_start(ap,fmt); - vsnprintf(p, 2048, fmt, ap); - va_end(ap); - write(debug_fd,"Debug <",7); - write(debug_fd,p,strlen(p)); - write(debug_fd,">\n\r",3); - free(p); -} - -void -TellEm(char *fmt, ...) -{ - char *p; - va_list ap; - p = Malloc(2048); - va_start(ap,fmt); - vsnprintf(p, 2048, fmt, ap); - va_end(ap); - strip_trailing_newlines(p); - write(debug_fd,"Progress <",10); - write(debug_fd,p,strlen(p)); - write(debug_fd,">\n\r",3); - if(!on_serial) { - dialog_clear_norefresh(); - dialog_msgbox("Progress", p, -1, -1, 0); - } - free(p); -} - -void -Fatal(char *fmt, ...) -{ - char *p; - va_list ap; - p = Malloc(2048); - va_start(ap,fmt); - vsnprintf(p, 2048, fmt, ap); - va_end(ap); - strip_trailing_newlines(p); - if (dialog_active && !on_serial) - dialog_msgbox("Fatal", p, -1, -1, 1); - else - fprintf(stderr, "Fatal -- %s\n", p); - free(p); - ExitSysinstall(); -} - -void -AskAbort(char *fmt, ...) -{ - char *p; - va_list ap; - - p = Malloc(2048); - va_start(ap,fmt); - vsnprintf(p, 2048, fmt, ap); - va_end(ap); - strcat(p, "\n\nDo you wish to abort the installation?"); - if (!dialog_yesno("Abort", p, -1, -1)) { - dialog_clear_norefresh(); - Abort(); - } - dialog_clear(); - free(p); -} - -void -Abort() -{ - if (dialog_yesno("Exit sysinstall","\n\nAre you sure you want to quit?", - -1, -1)) { - dialog_clear(); - return; - } - ExitSysinstall(); -} - -void -ExitSysinstall() -{ - if (dialog_active) { - clear(); - dialog_update(); - } - if (getpid() == 1) { - if (reboot(RB_AUTOBOOT) == -1) - if (dialog_active) { - clear(); - dialog_msgbox(TITLE, "\n\nCan't reboot machine -- hit reset button", - -1,-1,0); - } else - fprintf(stderr, "Can't reboot the machine -- hit the reset button"); - while(1); - } else { - if (dialog_active) { - end_dialog(); - dialog_active = 0; - } - exit(0); - } -} - -void * -Malloc(size_t size) -{ - void *p = malloc(size); - if (!p) { - exit(7); /* XXX longjmp bad */ - } - return p; -} - -char * -StrAlloc(char *str) -{ - char *p; - - p = (char *)Malloc(strlen(str) + 1); - strcpy(p,str); - return p; -} - -void -MountUfs(char *device, char *mountpoint, int do_mkdir, int flags) -{ - struct ufs_args ufsargs; - char dbuf[90]; - - memset(&ufsargs,0,sizeof ufsargs); - - if(do_mkdir && access(mountpoint,R_OK)) { - Mkdir(mountpoint, TRUE); - } - - strcpy(dbuf,"/dev/"); - strcat(dbuf,device); - - TellEm("mount %s %s",dbuf,mountpoint); - ufsargs.fspec = dbuf; - if (mount(MOUNT_UFS, mountpoint, flags, (caddr_t) &ufsargs) == -1) { - Fatal("Error mounting %s on %s : %s\n", - dbuf, mountpoint, strerror(errno)); - } -} - -void -Mkdir(char *ipath, int die) -{ - struct stat sb; - int final=0; - char *p,*path=StrAlloc(ipath); - - Debug("mkdir(%s)",path); - p = path; - if (p[0] == '/') /* Skip leading '/'. */ - ++p; - for (;!final; ++p) { - if (p[0] == '\0' || (p[0] == '/' && p[1] == '\0')) - final++; - else if (p[0] != '/') - continue; - *p = '\0'; - if (stat(path, &sb)) { - if (errno != ENOENT && die) - Fatal("Couldn't stat directory %s: %s\n", - path,strerror(errno)); - Debug("mkdir(%s..)",path); - if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && - die) - Fatal("Couldn't create directory %s: %s\n", - path,strerror(errno)); - } - *p = '/'; - } - free(path); - return; -} - -void -Link(char *from, char *to) -{ - TellEm("ln %s %s", from, to); - if(fixit) - unlink(to); - if (link(from, to) == -1) - Fatal("Couldn't create link: %s -> %s\n", from, to); -} - -void -CopyFile(char *p1, char *p2) -{ - char buf[BUFSIZ]; - int fd1,fd2; - int i; - struct stat st; - - TellEm("Copy %s to %s",p1,p2); - fd1 = open(p1,O_RDONLY); - if (fd1 < 0) Fatal("Couldn't open %s: %s\n",p1,strerror(errno)); - fd2 = open(p2,O_TRUNC|O_CREAT|O_WRONLY,0200); - if (fd2 < 0) Fatal("Couldn't open %s: %s\n",p2,strerror(errno)); - for(;;) { - i = read(fd1,buf,sizeof buf); - if (i > 0) - if (i != write(fd2,buf,i)) { - Fatal("Write errror on %s: %s\n", - p2,strerror(errno)); - } - if (i != sizeof buf) - break; - } - fstat(fd1,&st); - fchmod(fd2,st.st_mode & 07777); - fchown(fd2,st.st_uid,st.st_gid); - close(fd1); - close(fd2); -} - -u_long -PartMb(struct disklabel *lbl,int part) -{ - u_long l; - l = 1024*1024/lbl->d_secsize; - return (lbl->d_partitions[part].p_size + l/2)/l; -} - -void -CleanMount(int disk, int part) -{ - int i = MP[disk][part]; - Faction[i] = 0; - if (Fmount[i]) { - free(Fmount[i]); - Fmount[i] = 0; - } - if (Fname[i]) { - free(Fname[i]); - Fname[i] = 0; - } - if (Ftype[i]) { - free(Ftype[i]); - Ftype[i] = 0; - } - MP[disk][part] = 0; -} - -char * -SetMount(int disk, int part, char *path) -{ - int k; - char buf[80]; - - CleanMount(disk,part); - for (k = 1; k < MAX_NO_FS; k++) - if (!Fmount[k]) - break; - - if (k >= MAX_NO_FS) - return "Maximum number of filesystems exceeded"; - - Fmount[k] = StrAlloc(path); - sprintf(buf, "%s%c", Dname[disk], part + 'a'); - Fname[k] = StrAlloc(buf); - switch (Dlbl[disk]->d_partitions[part].p_fstype) { - case FS_BSDFFS: - Ftype[k] = StrAlloc("ufs"); - if(!fixit) - Faction[k] = 1; - break; - case FS_MSDOS: - Ftype[k] = StrAlloc("msdos"); - Faction[k] = 0; - break; - case FS_SWAP: - Ftype[k] = StrAlloc("swap"); - Faction[k] = 1; - break; - default: - CleanMount(disk,part); - return "Unknown filesystem-type"; - } - Fsize[k] = (Dlbl[disk]->d_partitions[part].p_size+1024)/2048; - - MP[disk][part] = k; - return NULL; -} - -void -enable_label(int fd) -{ - int flag = 1; - if (ioctl(fd, DIOCWLABEL, &flag) < 0) - Fatal("ioctl(DIOCWLABEL,1) failed: %s",strerror(errno)); -} - -void -disable_label(int fd) -{ - int flag = 0; - if (ioctl(fd, DIOCWLABEL, &flag) < 0) - Fatal("ioctl(DIOCWLABEL,0) failed: %s",strerror(errno)); -} - |