|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980, 1986, 1990 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution is only permitted until one year after the first shipment ! 6: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and ! 7: * binary forms are permitted provided that: (1) source distributions retain ! 8: * this entire copyright notice and comment, and (2) distributions including ! 9: * binaries display the following acknowledgement: This product includes ! 10: * software developed by the University of California, Berkeley and its ! 11: * contributors'' in the documentation or other materials provided with the ! 12: * distribution and in all advertising materials mentioning features or use ! 13: * of this software. Neither the name of the University nor the names of ! 14: * its contributors may be used to endorse or promote products derived from ! 15: * this software without specific prior written permission. ! 16: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 17: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 18: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 19: * ! 20: * @(#)installboot.c 7.1 (Berkeley) 5/8/90 ! 21: */ ! 22: ! 23: #ifndef lint ! 24: char copyright[] = ! 25: "@(#) Copyright (c) 1980, 1986, 1990 The Regents of the University of California.\n\ ! 26: All rights reserved.\n"; ! 27: #endif /* not lint */ ! 28: ! 29: #ifndef lint ! 30: static char sccsid[] = "@(#)installboot.c 7.1 (Berkeley) 5/8/90"; ! 31: #endif /* not lint */ ! 32: ! 33: #include "../sys/param.h" ! 34: #include "../ufs/fs.h" ! 35: ! 36: char block[1024]; ! 37: int maxbootsize = 16 * 7 * 512; /* XXX */ ! 38: ! 39: /* ! 40: * HPs are a kludge. ! 41: * The boot program won't fit in the boot area of a file system so we ! 42: * have to place it outside the file systems. By convention, this means ! 43: * that if the 'a' partition is being used for '/', it is offset one ! 44: * cylinder into the disk and the boot program goes into that one cylinder. ! 45: * Also by convention, the 'c' partition is defined to be the entire disk ! 46: * including this boot cylinder. If these conventions are not adhered to, ! 47: * the potential for disaster is enormous. ! 48: */ ! 49: main(argc, argv) ! 50: int argc; ! 51: char *argv[]; ! 52: { ! 53: int ifd, ofd, len; ! 54: char *dev, *standalonecode; ! 55: int bsize = 1024; ! 56: ! 57: if (argc != 3) ! 58: usage(); ! 59: dev = argv[2]; ! 60: len = strlen(dev); ! 61: if (dev[len-1] != 'c') ! 62: usage(); ! 63: standalonecode = argv[1]; ! 64: ifd = open(standalonecode, 0); ! 65: if (ifd < 0) { ! 66: perror(standalonecode); ! 67: exit(1); ! 68: } ! 69: ofd = open(dev, 1); ! 70: if (ofd < 0) { ! 71: perror(dev); ! 72: exit(1); ! 73: } ! 74: while ((len = read(ifd, block, bsize)) > 0) { ! 75: if ((maxbootsize -= bsize) < 0) { ! 76: printf("%s: too big\n", standalonecode); ! 77: exit(2); ! 78: } ! 79: if (len < bsize) ! 80: bzero(&block[len], bsize-len); ! 81: if (write(ofd, block, bsize) != bsize) { ! 82: perror(dev); ! 83: exit(2); ! 84: } ! 85: } ! 86: if (len < 0) { ! 87: perror(standalonecode); ! 88: exit(2); ! 89: } ! 90: exit(0); ! 91: } ! 92: ! 93: usage() ! 94: { ! 95: printf("Usage: installboot bootprog device\n"); ! 96: printf("where:\n"); ! 97: printf("\t\"bootprog\" is a LIF format file < %d bytes long\n", ! 98: maxbootsize); ! 99: printf("\t\"device\" must be the 'c' partition of a bootable disk\n"); ! 100: printf("WARNING!! If the 'c' partition contains a file system, %s\n", ! 101: "DON'T RUN THIS!!"); ! 102: exit(1); ! 103: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.