#include #include #include #include #include #include "fs.h" #include "install.h" #include "kernel.h" #include "log.h" #include "windows.h" static int copyFile(char * sourceName, char * destName) { int source, dest, i; char buf[16384]; int olderrno; logMessage("coping %s to %s\n", sourceName, destName); source = open(sourceName, O_RDONLY); if (source < 0) { logMessage("file %s missing from source directory", sourceName); newtWinMessage("Error", "Ok", "file %s missing from source directory", sourceName); return INST_ERROR; } dest = creat(destName, 0644); if (dest < 0) { logMessage("failed to create file %s", destName); newtWinMessage("Error", "Ok", "failed to create file %s", destName); close(source); return INST_ERROR; } while ((i = read(source, buf, sizeof(buf))) > 0) { if (write(dest, buf, i) != i) { olderrno = errno; logMessage("error writing to file %s: %s", destName, strerror(olderrno)); newtWinMessage("Error", "Ok", "error writing to file %s: %s", destName, strerror(olderrno)); close(source); close(dest); unlink(destName); return 1; } } if (i < 0) { olderrno = errno; logMessage("error reading from file %s: %s", sourceName, strerror(olderrno)); newtWinMessage("Error", "Ok", "error reading from file %s: %s", sourceName, strerror(olderrno)); } close(source); close(dest); if (i < 0) return 1; return 0; } int kernelCopy(char * filename) { int rc = 0; if (!filename) { do { newtWinMessage("Kernel", "Ok", "Please insert your boot disk in your first " "disk drive if it's not already present."); rc = doMount("fd0", "/tmp/bootdisk", "ext2", 1, 0); if (!rc && access("/tmp/bootdisk/vmlinux.gz", R_OK)) { umount("/tmp/bootdisk"); newtWinMessage("Error", "Ok", "That's not a Red Hat boot " "floppy!"); rc = 1; } } while (rc); winStatus(34, 3, "Kernel", "Copying kernel from floppy..."); rc = copyFile("/tmp/bootdisk/vmlinux.gz", "/mnt/vmlinux.gz"); sync(); newtPopWindow(); } else { winStatus(34, 3, "Kernel", "Copying kernel from floppy..."); rc = copyFile(filename, "/mnt/vmlinux.gz"); sync(); newtPopWindow(); } return rc; }