Changeset 1626cd4 in mainline for uspace/lib/label/src/mbr.c
- Timestamp:
- 2015-07-02T19:01:37Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6a0d4ce2
- Parents:
- 3faa03d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/label/src/mbr.c
r3faa03d r1626cd4 37 37 #include <byteorder.h> 38 38 #include <errno.h> 39 #include <mem.h> 39 40 #include <stdlib.h> 40 41 … … 46 47 static void mbr_close(label_t *); 47 48 static int mbr_destroy(label_t *); 49 static int mbr_get_info(label_t *, label_info_t *); 48 50 static label_part_t *mbr_part_first(label_t *); 49 51 static label_part_t *mbr_part_next(label_part_t *); … … 52 54 static int mbr_part_destroy(label_part_t *); 53 55 54 static int mbr_pte_to_part(label_t *, mbr_pte_t * );56 static int mbr_pte_to_part(label_t *, mbr_pte_t *, int); 55 57 56 58 label_ops_t mbr_label_ops = { … … 59 61 .close = mbr_close, 60 62 .destroy = mbr_destroy, 63 .get_info = mbr_get_info, 61 64 .part_first = mbr_part_first, 62 65 .part_next = mbr_part_next, … … 73 76 uint16_t sgn; 74 77 size_t bsize; 78 aoff64_t nblocks; 75 79 uint32_t entry; 76 80 int rc; … … 82 86 } 83 87 88 rc = block_get_nblocks(sid, &nblocks); 89 if (rc != EOK) { 90 rc = EIO; 91 goto error; 92 } 93 84 94 if (bsize < 512 || (bsize % 512) != 0) { 95 rc = EINVAL; 96 goto error; 97 } 98 99 if (nblocks < mbr_ablock0) { 85 100 rc = EINVAL; 86 101 goto error; … … 93 108 } 94 109 95 rc = block_read_direct(sid, MBR_BA, 1, mbr);110 rc = block_read_direct(sid, mbr_ba, 1, mbr); 96 111 if (rc != EOK) { 97 112 rc = EIO; … … 114 129 for (entry = 0; entry < mbr_nprimary; entry++) { 115 130 eptr = &mbr->pte[entry]; 116 rc = mbr_pte_to_part(label, eptr );131 rc = mbr_pte_to_part(label, eptr, entry + 1); 117 132 if (rc != EOK) 118 133 goto error; … … 124 139 label->ops = &mbr_label_ops; 125 140 label->ltype = lt_mbr; 141 label->ablock0 = mbr_ablock0; 142 label->anblocks = nblocks - mbr_ablock0; 126 143 *rlabel = label; 127 144 return EOK; … … 147 164 } 148 165 166 static int mbr_get_info(label_t *label, label_info_t *linfo) 167 { 168 memset(linfo, 0, sizeof(label_info_t)); 169 linfo->dcnt = dc_label; 170 linfo->ltype = lt_mbr; 171 linfo->ablock0 = label->ablock0; 172 linfo->anblocks = label->anblocks; 173 return EOK; 174 } 175 149 176 static label_part_t *mbr_part_first(label_t *label) 150 177 { … … 171 198 static void mbr_part_get_info(label_part_t *part, label_part_info_t *pinfo) 172 199 { 200 pinfo->index = part->index; 173 201 pinfo->block0 = part->block0; 174 202 pinfo->nblocks = part->nblocks; … … 178 206 label_part_t **rpart) 179 207 { 180 return E OK;208 return ENOTSUP; 181 209 } 182 210 183 211 static int mbr_part_destroy(label_part_t *part) 184 212 { 185 return E OK;186 } 187 188 static int mbr_pte_to_part(label_t *label, mbr_pte_t *pte )213 return ENOTSUP; 214 } 215 216 static int mbr_pte_to_part(label_t *label, mbr_pte_t *pte, int index) 189 217 { 190 218 label_part_t *part; … … 204 232 return ENOMEM; 205 233 234 part->index = index; 206 235 part->block0 = block0; 207 236 part->nblocks = nblocks;
Note:
See TracChangeset
for help on using the changeset viewer.