*** build.c.orig	Sat Nov  9 21:50:51 1991
--- build.c	Sat Nov  9 22:23:13 1991
***************
*** 17,24 ****
--- 17,27 ----
   */
  
  #include <stdio.h>	/* fprintf */
+ #include <string.h>
  #include <stdlib.h>	/* contains exit */
  #include <sys/types.h>	/* unistd.h needs this */
+ #include <sys/stat.h>
+ #include <linux/fs.h>
  #include <unistd.h>	/* contains read/write */
  #include <fcntl.h>
  
***************
*** 25,30 ****
--- 28,36 ----
  #define MINIX_HEADER 32
  #define GCC_HEADER 1024
  
+ #define DEFAULT_MAJOR_ROOT 3
+ #define DEFAULT_MINOR_ROOT 6
+ 
  /* max nr of sectors of setup: don't change unless you also change
   * bootsect etc */
  #define SETUP_SECTS 4
***************
*** 46,54 ****
  {
  	int i,c,id;
  	char buf[1024];
  
! 	if (argc != 4)
  		usage();
  	for (i=0;i<sizeof buf; i++) buf[i]=0;
  	if ((id=open(argv[1],O_RDONLY,0))<0)
  		die("Unable to open 'boot'");
--- 52,85 ----
  {
  	int i,c,id;
  	char buf[1024];
+ 	char major_root, minor_root;
+ 	struct stat sb;
  
! 	if ((argc != 4) && (argc != 5))
  		usage();
+ 	if (argc == 5) {
+ 		if (strcmp(argv[4], "FLOPPY")) {
+ 			if (stat(argv[4], &sb)) {
+ 				perror(argv[4]);
+ 				die("Couldn't stat root device.");
+ 			}
+ 			major_root = MAJOR(sb.st_rdev);
+ 			minor_root = MINOR(sb.st_rdev);
+ 		} else {
+ 			major_root = 0;
+ 			minor_root = 0;
+ 		}
+ 	} else {
+ 		major_root = DEFAULT_MAJOR_ROOT;
+ 		minor_root = DEFAULT_MINOR_ROOT;
+ 	}
+ 	fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
+ 	if ((major_root != 2) && (major_root != 3) &&
+ 	    (major_root != 0)) {
+ 		fprintf(stderr, "Illegal root device (major = %d)\n",
+ 			major_root);
+ 		die("Bad root device --- major #");
+ 	}
  	for (i=0;i<sizeof buf; i++) buf[i]=0;
  	if ((id=open(argv[1],O_RDONLY,0))<0)
  		die("Unable to open 'boot'");
***************
*** 72,77 ****
--- 103,110 ----
  		die("Boot block must be exactly 512 bytes");
  	if ((*(unsigned short *)(buf+510)) != 0xAA55)
  		die("Boot block hasn't got boot flag (0xAA55)");
+ 	buf[508] = (char) minor_root;
+ 	buf[509] = (char) major_root;	
  	i=write(1,buf,512);
  	if (i!=512)
  		die("Write call failed");