Lines Matching full:table

209 		/* Check CRC only when buffer size is enough for table. */  in gpt_checktbl()
212 DPRINTF("GPT table's CRC doesn't match"); in gpt_checktbl()
228 ptable_gptread(struct ptable *table, void *dev, diskread_t dread) in ptable_gptread() argument
238 buf = malloc(table->sectorsize); in ptable_gptread()
241 tbl = malloc(table->sectorsize * MAXTBLSZ); in ptable_gptread()
248 ptable_close(table); in ptable_gptread()
249 table = NULL; in ptable_gptread()
254 phdr = gpt_checkhdr((struct gpt_hdr *)buf, 1, table->sectors - 1, in ptable_gptread()
255 table->sectorsize); in ptable_gptread()
257 /* Read the primary GPT table. */ in ptable_gptread()
260 table->sectorsize)); in ptable_gptread()
262 gpt_checktbl(phdr, tbl, size * table->sectorsize, in ptable_gptread()
263 table->sectors - 1) == 0) { in ptable_gptread()
268 offset = pri ? hdr.hdr_lba_alt: table->sectors - 1; in ptable_gptread()
274 table->sectors - 1, table->sectorsize); in ptable_gptread()
279 * table. If they are different, then prefer backup header in ptable_gptread()
280 * and try to read backup table. in ptable_gptread()
291 /* Read the backup GPT table. */ in ptable_gptread()
294 table->sectorsize)); in ptable_gptread()
296 gpt_checktbl(phdr, tbl, size * table->sectorsize, in ptable_gptread()
297 table->sectors - 1) == 0) { in ptable_gptread()
305 table->type = PTABLE_NONE; in ptable_gptread()
310 MAXTBLSZ * table->sectorsize); in ptable_gptread()
314 * in the disk's GPT table header, set the table->sectors to the value in ptable_gptread()
321 table->sectors = hdr.hdr_lba_alt + 1; in ptable_gptread()
343 STAILQ_INSERT_TAIL(&table->entries, entry, entry); in ptable_gptread()
349 return (table); in ptable_gptread()
380 ptable_ebrread(struct ptable *table, void *dev, diskread_t dread) in ptable_ebrread() argument
388 STAILQ_FOREACH(e1, &table->entries, entry) { in ptable_ebrread()
394 return (table); in ptable_ebrread()
397 buf = malloc(table->sectorsize); in ptable_ebrread()
399 return (table); in ptable_ebrread()
403 if (offset >= table->sectors) in ptable_ebrread()
427 STAILQ_INSERT_TAIL(&table->entries, entry, entry); in ptable_ebrread()
434 return (table); in ptable_ebrread()
456 ptable_bsdread(struct ptable *table, void *dev, diskread_t dread) in ptable_bsdread() argument
465 if (table->sectorsize < sizeof(struct disklabel)) { in ptable_bsdread()
467 return (table); in ptable_bsdread()
469 buf = malloc(table->sectorsize); in ptable_bsdread()
471 return (table); in ptable_bsdread()
474 ptable_close(table); in ptable_bsdread()
475 table = NULL; in ptable_bsdread()
482 if (le32toh(dl->d_secsize) != table->sectorsize) { in ptable_bsdread()
508 STAILQ_INSERT_TAIL(&table->entries, entry, entry); in ptable_bsdread()
511 table->type = PTABLE_BSD; in ptable_bsdread()
514 return (table); in ptable_bsdread()
517 #define cdb2devb(bno) ((bno) * ISO_DEFAULT_BLOCK_SIZE / table->sectorsize)
520 ptable_iso9660read(struct ptable *table, void *dev, diskread_t dread) in ptable_iso9660read() argument
526 buf = malloc(table->sectorsize); in ptable_iso9660read()
528 return (table); in ptable_iso9660read()
532 ptable_close(table); in ptable_iso9660read()
533 table = NULL; in ptable_iso9660read()
544 entry->part.end = table->sectors; in ptable_iso9660read()
547 STAILQ_INSERT_TAIL(&table->entries, entry, entry); in ptable_iso9660read()
549 table->type = PTABLE_ISO9660; in ptable_iso9660read()
553 return (table); in ptable_iso9660read()
561 struct ptable *table; in ptable_open() local
568 table = NULL; in ptable_open()
579 table = malloc(sizeof(*table)); in ptable_open()
580 if (table == NULL) in ptable_open()
582 table->sectors = sectors; in ptable_open()
583 table->sectorsize = sectorsize; in ptable_open()
584 table->type = PTABLE_NONE; in ptable_open()
585 STAILQ_INIT(&table->entries); in ptable_open()
587 if (ptable_iso9660read(table, dev, dread) == NULL) { in ptable_open()
589 table = NULL; in ptable_open()
591 } else if (table->type == PTABLE_ISO9660) in ptable_open()
595 if (ptable_bsdread(table, dev, dread) == NULL) { /* Read error. */ in ptable_open()
596 table = NULL; in ptable_open()
598 } else if (table->type == PTABLE_BSD) in ptable_open()
608 table->type = PTABLE_GPT; in ptable_open()
609 table = ptable_gptread(table, dev, dread); in ptable_open()
632 table->type = PTABLE_GPT; in ptable_open()
638 if (table->type == PTABLE_GPT) { in ptable_open()
639 table = ptable_gptread(table, dev, dread); in ptable_open()
646 table->type = PTABLE_MBR; in ptable_open()
670 STAILQ_INSERT_TAIL(&table->entries, entry, entry); in ptable_open()
674 table = ptable_ebrread(table, dev, dread); in ptable_open()
682 return (table); in ptable_open()
686 ptable_close(struct ptable *table) in ptable_close() argument
690 if (table == NULL) in ptable_close()
693 while (!STAILQ_EMPTY(&table->entries)) { in ptable_close()
694 entry = STAILQ_FIRST(&table->entries); in ptable_close()
695 STAILQ_REMOVE_HEAD(&table->entries, entry); in ptable_close()
698 free(table); in ptable_close()
702 ptable_gettype(const struct ptable *table) in ptable_gettype() argument
705 return (table->type); in ptable_gettype()
709 ptable_getsize(const struct ptable *table, uint64_t *sizep) in ptable_getsize() argument
711 uint64_t tmp = table->sectors * table->sectorsize; in ptable_getsize()
713 if (tmp < table->sectors) in ptable_getsize()
722 ptable_getpart(const struct ptable *table, struct ptable_entry *part, int index) in ptable_getpart() argument
726 if (part == NULL || table == NULL) in ptable_getpart()
729 STAILQ_FOREACH(entry, &table->entries, entry) { in ptable_getpart()
757 ptable_getbestpart(const struct ptable *table, struct ptable_entry *part) in ptable_getbestpart() argument
762 if (part == NULL || table == NULL) in ptable_getbestpart()
767 STAILQ_FOREACH(entry, &table->entries, entry) { in ptable_getbestpart()
769 if (table->type == PTABLE_MBR) { in ptable_getbestpart()
794 if (table->type == PTABLE_GPT) { in ptable_getbestpart()
817 ptable_iterate(const struct ptable *table, void *arg, ptable_iterate_t *iter) in ptable_iterate() argument
824 STAILQ_FOREACH(entry, &table->entries, entry) { in ptable_iterate()
826 if (table->type == PTABLE_MBR) in ptable_iterate()
831 if (table->type == PTABLE_GPT) in ptable_iterate()
835 if (table->type == PTABLE_BSD) in ptable_iterate()