Changeset 603c1d1f in mainline for uspace/lib/label/src/mbr.c
- Timestamp:
- 2015-07-05T18:53:00Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bf7ddde
- Parents:
- 99c23405
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/label/src/mbr.c
r99c23405 r603c1d1f 142 142 label->ops = &mbr_label_ops; 143 143 label->ltype = lt_mbr; 144 label->svc_id = sid; 145 label->block_size = bsize; 144 146 label->ablock0 = mbr_ablock0; 145 147 label->anblocks = nblocks - mbr_ablock0; … … 155 157 static int mbr_create(service_id_t sid, label_t **rlabel) 156 158 { 157 return EOK; 159 label_t *label = NULL; 160 mbr_br_block_t *mbr = NULL; 161 aoff64_t nblocks; 162 size_t bsize; 163 int i; 164 int rc; 165 166 rc = block_get_bsize(sid, &bsize); 167 if (rc != EOK) { 168 rc = EIO; 169 goto error; 170 } 171 172 rc = block_get_nblocks(sid, &nblocks); 173 if (rc != EOK) { 174 rc = EIO; 175 goto error; 176 } 177 178 mbr = calloc(1, bsize); 179 if (mbr == NULL) { 180 rc = ENOMEM; 181 goto error; 182 } 183 184 label = calloc(1, sizeof(label_t)); 185 if (label == NULL) 186 return ENOMEM; 187 188 list_initialize(&label->parts); 189 190 mbr->media_id = 0; 191 mbr->pad0 = 0; 192 for (i = 0; i < mbr_nprimary; i++) 193 mbr_unused_pte(&mbr->pte[i]); 194 mbr->signature = host2uint16_t_le(mbr_br_signature); 195 196 rc = block_write_direct(sid, mbr_ba, 1, mbr); 197 if (rc != EOK) { 198 rc = EIO; 199 goto error; 200 } 201 202 free(mbr); 203 mbr = NULL; 204 205 label->ops = &mbr_label_ops; 206 label->ltype = lt_mbr; 207 label->block_size = bsize; 208 label->svc_id = sid; 209 label->ablock0 = mbr_ablock0; 210 label->anblocks = nblocks - mbr_ablock0; 211 label->pri_entries = mbr_nprimary; 212 213 *rlabel = label; 214 return EOK; 215 error: 216 free(mbr); 217 free(label); 218 return rc; 158 219 } 159 220 160 221 static void mbr_close(label_t *label) 161 222 { 223 label_part_t *part; 224 225 part = mbr_part_first(label); 226 while (part != NULL) { 227 list_remove(&part->llabel); 228 free(part); 229 230 part = mbr_part_first(label); 231 } 232 162 233 free(label); 163 234 } … … 165 236 static int mbr_destroy(label_t *label) 166 237 { 167 return EOK; 238 mbr_br_block_t *mbr = NULL; 239 label_part_t *part; 240 int rc; 241 242 part = mbr_part_first(label); 243 if (part != NULL) { 244 rc = ENOTEMPTY; 245 goto error; 246 } 247 248 mbr = calloc(1, label->block_size); 249 if (mbr == NULL) { 250 rc = ENOMEM; 251 goto error; 252 } 253 254 rc = block_write_direct(label->svc_id, mbr_ba, 1, mbr); 255 if (rc != EOK) { 256 rc = EIO; 257 goto error; 258 } 259 260 free(mbr); 261 mbr = NULL; 262 263 free(label); 264 return EOK; 265 error: 266 free(mbr); 267 return rc; 168 268 } 169 269 … … 340 440 return ENOMEM; 341 441 342 rc = block_read_direct(label->svc id, mbr_ba, 1, br);442 rc = block_read_direct(label->svc_id, mbr_ba, 1, br); 343 443 if (rc != EOK) { 344 444 rc = EIO; … … 348 448 br->pte[index] = *pte; 349 449 350 rc = block_write_direct(label->svc id, mbr_ba, 1, br);450 rc = block_write_direct(label->svc_id, mbr_ba, 1, br); 351 451 if (rc != EOK) { 352 452 rc = EIO;
Note:
See TracChangeset
for help on using the changeset viewer.