54 for (i = 0; i < 4; ++i) {
63 uint8_t mbr_buffer[512];
69 return MBR_ERROR_DISKIO_ERROR;
73 if (mbr_buffer[510] == 0x55 && mbr_buffer[511] == 0xAA) {
74 for (i = 0; i < 4; ++i) {
75 memcpy(&(to->
partition[i]), &(mbr_buffer[446 + 16 * i]), 16);
80 return MBR_ERROR_NO_MBR_FOUND;
86 uint8_t mbr_buffer[512];
88 memset(mbr_buffer, 0, 512);
90 for (i = 0; i < 4; ++i) {
91 memcpy(&(mbr_buffer[446 + 16 * i]), &(from->
partition[i]), 16);
94 mbr_buffer[510] = 0x55;
95 mbr_buffer[511] = 0xAA;
103 uint8_t sectors_per_track = 63, heads_per_cylinder = 16;
104 uint16_t cylinder = 0;
108 return MBR_ERROR_PARTITION_EXISTS;
113 cylinder = start / (sectors_per_track * heads_per_cylinder);
115 mbr->
partition[part_num - 1].
chs_first_sector[1] = ((uint8_t) ((cylinder >> 8) << 6)) + ((start % sectors_per_track) + 1);
123 if (start + len <= start || start + len >= ((uint32_t) 1023)*254 * 63) {
128 cylinder = (start + len) / (sectors_per_track * heads_per_cylinder);
130 mbr->
partition[part_num - 1].
chs_last_sector[1] = ((uint8_t) ((cylinder >> 8) << 6)) + (((start + len) % sectors_per_track) + 1);
141 if (part_num > 4 || part_num < 1) {
142 return MBR_ERROR_INVALID_PARTITION;
148 memset((&(mbr->
partition[part_num - 1])) + 1, 0, 15);
155 if (part_num > 4 || part_num < 1) {