Switch part/autopart to new mbr bootblock
This commit is contained in:
parent
636264c1c6
commit
7a60d6d33f
3 changed files with 42 additions and 95 deletions
|
@ -12,7 +12,6 @@
|
|||
#include <time.h>
|
||||
#include <dirent.h>
|
||||
#include <limits.h>
|
||||
#include <a.out.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include <time.h>
|
||||
#include <dirent.h>
|
||||
#include <limits.h>
|
||||
#include <a.out.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -41,7 +40,7 @@ void printstep(int step, char *message);
|
|||
#define ext_part(s) ((s) == 0x05 || (s) == 0x0F)
|
||||
|
||||
/* Minix master bootstrap code. */
|
||||
char MASTERBOOT[] = "/usr/mdec/masterboot";
|
||||
char MASTERBOOT[] = "/usr/mdec/mbr";
|
||||
|
||||
/* Template:
|
||||
----first---- --geom/last-- ------sectors-----
|
||||
|
@ -354,38 +353,6 @@ void getdevices(void)
|
|||
(void) closedir(d);
|
||||
}
|
||||
|
||||
/* One featureful master bootstrap. */
|
||||
unsigned char bootstrap[] = {
|
||||
0353,0001,0000,0061,0300,0216,0330,0216,0300,0372,0216,0320,0274,0000,0174,0373,
|
||||
0275,0276,0007,0211,0346,0126,0277,0000,0006,0271,0000,0001,0374,0363,0245,0352,
|
||||
0044,0006,0000,0000,0264,0002,0315,0026,0250,0010,0164,0033,0350,0071,0001,0174,
|
||||
0007,0060,0344,0315,0026,0242,0205,0007,0054,0060,0074,0012,0163,0363,0120,0350,
|
||||
0046,0001,0205,0007,0130,0353,0012,0240,0002,0006,0204,0300,0165,0003,0351,0147,
|
||||
0000,0230,0262,0005,0366,0362,0262,0200,0000,0302,0210,0340,0120,0350,0234,0000,
|
||||
0163,0003,0351,0147,0000,0130,0054,0001,0175,0003,0351,0141,0000,0276,0276,0175,
|
||||
0211,0357,0271,0040,0000,0363,0245,0200,0301,0004,0211,0356,0215,0174,0020,0070,
|
||||
0154,0004,0164,0016,0213,0135,0010,0053,0134,0010,0213,0135,0012,0033,0134,0012,
|
||||
0163,0014,0212,0044,0206,0144,0020,0210,0044,0106,0071,0376,0162,0364,0211,0376,
|
||||
0201,0376,0356,0007,0162,0326,0342,0322,0211,0356,0264,0020,0366,0344,0001,0306,
|
||||
0200,0174,0004,0001,0162,0026,0353,0021,0204,0322,0175,0041,0211,0356,0200,0174,
|
||||
0004,0000,0164,0013,0366,0004,0200,0164,0006,0350,0070,0000,0162,0053,0303,0203,
|
||||
0306,0020,0201,0376,0376,0007,0162,0346,0350,0215,0000,0211,0007,0376,0302,0204,
|
||||
0322,0174,0023,0315,0021,0321,0340,0321,0340,0200,0344,0003,0070,0342,0167,0355,
|
||||
0350,0011,0000,0162,0350,0303,0350,0003,0000,0162,0146,0303,0211,0356,0214,0134,
|
||||
0010,0214,0134,0012,0277,0003,0000,0122,0006,0127,0264,0010,0315,0023,0137,0007,
|
||||
0200,0341,0077,0376,0306,0210,0310,0366,0346,0211,0303,0213,0104,0010,0213,0124,
|
||||
0012,0367,0363,0222,0210,0325,0366,0361,0060,0322,0321,0352,0321,0352,0010,0342,
|
||||
0210,0321,0376,0301,0132,0210,0306,0273,0000,0174,0270,0001,0002,0315,0023,0163,
|
||||
0020,0200,0374,0200,0164,0011,0117,0174,0006,0060,0344,0315,0023,0163,0270,0371,
|
||||
0303,0201,0076,0376,0175,0125,0252,0165,0001,0303,0350,0013,0000,0243,0007,0353,
|
||||
0005,0350,0004,0000,0227,0007,0353,0376,0136,0255,0126,0211,0306,0254,0204,0300,
|
||||
0164,0011,0264,0016,0273,0001,0000,0315,0020,0353,0362,0303,0057,0144,0145,0166,
|
||||
0057,0150,0144,0077,0010,0000,0015,0012,0000,0116,0157,0156,0145,0040,0141,0143,
|
||||
0164,0151,0166,0145,0015,0012,0000,0122,0145,0141,0144,0040,0145,0162,0162,0157,
|
||||
0162,0040,0000,0116,0157,0164,0040,0142,0157,0157,0164,0141,0142,0154,0145,0040,
|
||||
0000,0000,
|
||||
};
|
||||
|
||||
int dirty= 0;
|
||||
unsigned char bootblock[SECTOR_SIZE];
|
||||
struct part_entry table[1 + NR_PARTITIONS];
|
||||
|
@ -1378,7 +1345,7 @@ void installboot(unsigned char *bootblock, char *masterboot)
|
|||
/* Install code from a master bootstrap into a boot block. */
|
||||
{
|
||||
FILE *mfp;
|
||||
struct exec hdr;
|
||||
unsigned char buf[SECTOR_SIZE];
|
||||
int n;
|
||||
char *err;
|
||||
|
||||
|
@ -1387,32 +1354,39 @@ void installboot(unsigned char *bootblock, char *masterboot)
|
|||
goto m_err;
|
||||
}
|
||||
|
||||
n= fread(&hdr, sizeof(char), A_MINHDR, mfp);
|
||||
n= fread(buf, sizeof(char), SECTOR_SIZE, mfp);
|
||||
if (ferror(mfp)) {
|
||||
err= strerror(errno);
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
|
||||
if (n < A_MINHDR || BADMAG(hdr) || hdr.a_cpu != A_I8086) {
|
||||
err= "Not an 8086 executable";
|
||||
else if (n < 256) {
|
||||
err= "Is probably not a boot sector, too small";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
else if (n < SECTOR_SIZE && n > PART_TABLE_OFF) {
|
||||
/* if only code, it cannot override partition table */
|
||||
err= "Does not fit in a boot sector";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
else if (n == SECTOR_SIZE) {
|
||||
if (buf[510] != 0x55 || buf[511] != 0xaa) {
|
||||
err= "Is not a boot sector (bad magic)";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
n = PART_TABLE_OFF;
|
||||
}
|
||||
|
||||
if (hdr.a_text + hdr.a_data > PART_TABLE_OFF) {
|
||||
if (n > PART_TABLE_OFF) {
|
||||
err= "Does not fit in a boot sector";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
|
||||
fseek(mfp, hdr.a_hdrlen, 0);
|
||||
fread(bootblock, sizeof(char), (size_t) (hdr.a_text + hdr.a_data), mfp);
|
||||
if (ferror(mfp)) {
|
||||
err= strerror(errno);
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
memcpy(bootblock, buf, n);
|
||||
fclose(mfp);
|
||||
|
||||
/* Bootstrap installed. */
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
#include <time.h>
|
||||
#include <dirent.h>
|
||||
#include <limits.h>
|
||||
#include <a.out.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -31,7 +30,7 @@
|
|||
#define ext_part(s) ((s) == 0x05 || (s) == 0x0F)
|
||||
|
||||
/* Minix master bootstrap code. */
|
||||
static char MASTERBOOT[] = "/usr/mdec/masterboot";
|
||||
static char MASTERBOOT[] = "/usr/mdec/mbr";
|
||||
|
||||
/* Template:
|
||||
----first---- --geom/last-- ------sectors-----
|
||||
|
@ -305,38 +304,6 @@ void getdevices(void)
|
|||
(void) closedir(d);
|
||||
}
|
||||
|
||||
/* One featureful master bootstrap. */
|
||||
unsigned char bootstrap[] = {
|
||||
0353,0001,0000,0061,0300,0216,0330,0216,0300,0372,0216,0320,0274,0000,0174,0373,
|
||||
0275,0276,0007,0211,0346,0126,0277,0000,0006,0271,0000,0001,0374,0363,0245,0352,
|
||||
0044,0006,0000,0000,0264,0002,0315,0026,0250,0010,0164,0033,0350,0071,0001,0174,
|
||||
0007,0060,0344,0315,0026,0242,0205,0007,0054,0060,0074,0012,0163,0363,0120,0350,
|
||||
0046,0001,0205,0007,0130,0353,0012,0240,0002,0006,0204,0300,0165,0003,0351,0147,
|
||||
0000,0230,0262,0005,0366,0362,0262,0200,0000,0302,0210,0340,0120,0350,0234,0000,
|
||||
0163,0003,0351,0147,0000,0130,0054,0001,0175,0003,0351,0141,0000,0276,0276,0175,
|
||||
0211,0357,0271,0040,0000,0363,0245,0200,0301,0004,0211,0356,0215,0174,0020,0070,
|
||||
0154,0004,0164,0016,0213,0135,0010,0053,0134,0010,0213,0135,0012,0033,0134,0012,
|
||||
0163,0014,0212,0044,0206,0144,0020,0210,0044,0106,0071,0376,0162,0364,0211,0376,
|
||||
0201,0376,0356,0007,0162,0326,0342,0322,0211,0356,0264,0020,0366,0344,0001,0306,
|
||||
0200,0174,0004,0001,0162,0026,0353,0021,0204,0322,0175,0041,0211,0356,0200,0174,
|
||||
0004,0000,0164,0013,0366,0004,0200,0164,0006,0350,0070,0000,0162,0053,0303,0203,
|
||||
0306,0020,0201,0376,0376,0007,0162,0346,0350,0215,0000,0211,0007,0376,0302,0204,
|
||||
0322,0174,0023,0315,0021,0321,0340,0321,0340,0200,0344,0003,0070,0342,0167,0355,
|
||||
0350,0011,0000,0162,0350,0303,0350,0003,0000,0162,0146,0303,0211,0356,0214,0134,
|
||||
0010,0214,0134,0012,0277,0003,0000,0122,0006,0127,0264,0010,0315,0023,0137,0007,
|
||||
0200,0341,0077,0376,0306,0210,0310,0366,0346,0211,0303,0213,0104,0010,0213,0124,
|
||||
0012,0367,0363,0222,0210,0325,0366,0361,0060,0322,0321,0352,0321,0352,0010,0342,
|
||||
0210,0321,0376,0301,0132,0210,0306,0273,0000,0174,0270,0001,0002,0315,0023,0163,
|
||||
0020,0200,0374,0200,0164,0011,0117,0174,0006,0060,0344,0315,0023,0163,0270,0371,
|
||||
0303,0201,0076,0376,0175,0125,0252,0165,0001,0303,0350,0013,0000,0243,0007,0353,
|
||||
0005,0350,0004,0000,0227,0007,0353,0376,0136,0255,0126,0211,0306,0254,0204,0300,
|
||||
0164,0011,0264,0016,0273,0001,0000,0315,0020,0353,0362,0303,0057,0144,0145,0166,
|
||||
0057,0150,0144,0077,0010,0000,0015,0012,0000,0116,0157,0156,0145,0040,0141,0143,
|
||||
0164,0151,0166,0145,0015,0012,0000,0122,0145,0141,0144,0040,0145,0162,0162,0157,
|
||||
0162,0040,0000,0116,0157,0164,0040,0142,0157,0157,0164,0141,0142,0154,0145,0040,
|
||||
0000,0000,
|
||||
};
|
||||
|
||||
int dirty= 0;
|
||||
unsigned char bootblock[SECTOR_SIZE];
|
||||
struct part_entry table[1 + NR_PARTITIONS];
|
||||
|
@ -1558,7 +1525,7 @@ void installboot(unsigned char *bootblock, char *masterboot)
|
|||
/* Install code from a master bootstrap into a boot block. */
|
||||
{
|
||||
FILE *mfp;
|
||||
struct exec hdr;
|
||||
unsigned char buf[SECTOR_SIZE];
|
||||
int n;
|
||||
char *err;
|
||||
|
||||
|
@ -1567,32 +1534,39 @@ void installboot(unsigned char *bootblock, char *masterboot)
|
|||
goto m_err;
|
||||
}
|
||||
|
||||
n= fread(&hdr, sizeof(char), A_MINHDR, mfp);
|
||||
n= fread(buf, sizeof(char), SECTOR_SIZE, mfp);
|
||||
if (ferror(mfp)) {
|
||||
err= strerror(errno);
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
|
||||
if (n < A_MINHDR || BADMAG(hdr) || hdr.a_cpu != A_I8086) {
|
||||
err= "Not an 8086 executable";
|
||||
else if (n < 256) {
|
||||
err= "Is probably not a boot sector, too small";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
else if (n < SECTOR_SIZE && n > PART_TABLE_OFF) {
|
||||
/* if only code, it cannot override partition table */
|
||||
err= "Does not fit in a boot sector";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
else if (n == SECTOR_SIZE) {
|
||||
if (buf[510] != 0x55 || buf[511] != 0xaa) {
|
||||
err= "Is not a boot sector (bad magic)";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
n = PART_TABLE_OFF;
|
||||
}
|
||||
|
||||
if (hdr.a_text + hdr.a_data > PART_TABLE_OFF) {
|
||||
if (n > PART_TABLE_OFF) {
|
||||
err= "Does not fit in a boot sector";
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
|
||||
fseek(mfp, hdr.a_hdrlen, 0);
|
||||
fread(bootblock, sizeof(char), (size_t) (hdr.a_text + hdr.a_data), mfp);
|
||||
if (ferror(mfp)) {
|
||||
err= strerror(errno);
|
||||
fclose(mfp);
|
||||
goto m_err;
|
||||
}
|
||||
memcpy(bootblock, buf, n);
|
||||
fclose(mfp);
|
||||
|
||||
/* Bootstrap installed. */
|
||||
|
|
Loading…
Reference in a new issue