Home | History | Annotate | Download | only in newfs_udf

Lines Matching refs:context

73 struct udf_create_context context;
108 memset(&context, 0, sizeof(struct udf_create_context));
111 context.dscrver = 3;
112 context.min_udf = 0x0102;
113 context.max_udf = 0x0250;
114 context.serialnum = 1; /* default */
116 context.gmtoff = 0;
117 context.meta_perc = UDF_META_PERC;
118 context.check_surface = 0;
119 context.create_new_session = 0;
121 context.sector_size = 512; /* minimum for UDF */
122 context.media_accesstype = UDF_ACCESSTYPE_NOT_SPECIFIED;
123 context.format_flags = FORMAT_INVALID;
124 context.write_strategy = UDF_WRITE_PACKET;
126 context.logvol_name = NULL;
127 context.primary_name = NULL;
128 context.volset_name = NULL;
129 context.fileset_name = NULL;
132 context.app_name = "*NetBSD";
133 context.app_version_main = 0;
134 context.app_version_sub = 0;
135 context.impl_name = "*NetBSD";
137 context.vds_seq = 0; /* first one starts with zero */
140 context.unique_id = 0x10;
142 context.num_files = 0;
143 context.num_directories = 0;
145 context.data_part = 0;
146 context.metadata_part = 0;
236 uint32_t sector_size = context.sector_size;
244 int format_flags = context.format_flags;
245 int sector_size = context.sector_size;
298 int format_flags = context.format_flags;
430 context.data_part = 0;
431 context.metadata_part = context.data_part;
433 context.metadata_part = context.data_part + 1;
434 context.fids_part = context.metadata_part;
436 context.fids_part = context.data_part;
453 if (!(context.format_flags & FORMAT_READONLY))
461 ((float) context.meta_perc / 100.0);
466 if (!(context.format_flags & FORMAT_READONLY)) {
479 if (context.metadata_part == context.data_part) {
491 context.alloc_pos[context.data_part] = pos;
492 context.alloc_pos[context.metadata_part] = mpos;
624 tag->descriptor_ver = udf_rw16(context.dscrver);
627 tag->serial_num = udf_rw16(context.serialnum);
636 uint32_t vds1_extent_len = layout.vds1_size * context.sector_size;
637 uint32_t vds2_extent_len = layout.vds2_size * context.sector_size;
639 avdp = context.anchors[num];
641 if ((avdp = calloc(1, context.sector_size)) == NULL)
655 context.anchors[num] = avdp;
663 memset(dscr, 0, context.sector_size);
788 *ver = udf_rw16(context.min_udf);
798 *ver = udf_rw16(context.min_udf);
816 regid->id_suffix[0] = context.app_version_main;
817 regid->id_suffix[1] = context.app_version_sub;
1025 pri = calloc(1, context.sector_size);
1029 memset(pri, 0, context.sector_size);
1031 pri->seq_num = udf_rw32(context.vds_seq); context.vds_seq++;
1034 udf_encode_osta_id(pri->vol_id, 32, context.primary_name);
1046 udf_encode_osta_id(pri->volset_id, 128, context.volset_name);
1050 udf_set_regid(&pri->app_id, context.app_name);
1053 udf_set_regid(&pri->imp_id, context.impl_name);
1061 context.primary_vol = pri;
1079 part = context.partitions[phys_part];
1097 int part_accesstype = context.media_accesstype;
1099 sector_size = context.sector_size;
1102 if (context.partitions[part_num])
1106 pd = calloc(1, context.sector_size);
1112 pd->seq_num = udf_rw32(context.vds_seq); context.vds_seq++;
1117 if (context.dscrver == 2) {
1136 udf_set_regid(&pd->imp_id, context.impl_name);
1142 context.partitions[part_num] = pd;
1154 usd = calloc(1, context.sector_size);
1159 usd->seq_num = udf_rw32(context.vds_seq); context.vds_seq++;
1168 context.unallocated = usd;
1181 sector_size = context.sector_size;
1188 lvd->seq_num = udf_rw32(context.vds_seq); context.vds_seq++;
1191 udf_encode_osta_id(lvd->logvol_id, 128, context.logvol_name);
1201 udf_set_regid(&lvd->imp_id, context.impl_name);
1209 lvd->lv_fsd_loc.loc.part_num = udf_rw16(context.metadata_part);
1215 context.logical_vol = lvd;
1216 context.vtop_tp[UDF_VTOP_RAWPART] = UDF_VTOP_TYPE_RAW;
1225 struct logvol_desc *logvol = context.logical_vol;
1241 context.vtop [log_part] = phys_part;
1242 context.vtop_tp [log_part] = UDF_VTOP_TYPE_PHYS;
1243 context
1244 context.part_free[log_part] = layout.part_size_lba;
1259 struct logvol_desc *logvol = context.logical_vol;
1278 context.vtop [log_part] = phys_part;
1279 context.vtop_tp [log_part] = UDF_VTOP_TYPE_VIRT;
1280 context.part_size[log_part] = 0xffffffff;
1281 context.part_free[log_part] = 0xffffffff;
1297 struct logvol_desc *logvol = context.logical_vol;
1306 spareable_bytes = layout.spareable_area_size * context.sector_size;
1331 context.vtop [log_part] = phys_part;
1332 context.vtop_tp [log_part] = UDF_VTOP_TYPE_SPAREABLE;
1333 context.part_size[log_part] = layout.part_size_lba;
1334 context.part_free[log_part] = layout.part_size_lba;
1353 spt = calloc(context.sector_size, layout.sparing_table_dscr_lbas);
1380 context.sparing_table = spt;
1390 struct logvol_desc *logvol = context.logical_vol;
1417 context.vtop [log_part] = phys_part;
1418 context.vtop_tp [log_part] = UDF_VTOP_TYPE_META;
1419 context.part_size[log_part] = layout.meta_part_size_lba;
1420 context.part_free[log_part] = layout.meta_part_size_lba;
1440 if (context.format_flags & FORMAT_SPAREABLE) {
1442 udf_add_logvol_part_spareable(context.data_part);
1444 udf_add_logvol_part_physical(context.data_part);
1447 if (context.format_flags & FORMAT_VAT) {
1449 udf_add_logvol_part_virtual(context.data_part);
1451 if (context.format_flags & FORMAT_META) {
1453 udf_add_logvol_part_meta(context.data_part);
1467 ivd = calloc(1, context.sector_size);
1473 ivd->seq_num = udf_rw32(context.vds_seq); context.vds_seq++;
1480 udf_encode_osta_id(lvi->logvol_id, 128, context.logvol_name);
1486 udf_set_regid(&lvi->impl_id, context.impl_name);
1492 context.implementation = ivd;
1509 lvid = context.logvol_integrity;
1510 logvol = context.logical_vol;
1523 context.logvol_info = lvinfo;
1525 udf_set_regid(&lvinfo->impl_id, context.impl_name);
1529 lvinfo->num_files = udf_rw32(context.num_files);
1530 lvinfo->num_directories = udf_rw32(context.num_directories);
1532 lvid->lvint_next_unique_id = udf_rw64(context.unique_id);
1536 if (udf_rw16(lvinfo->min_udf_readver) < context.min_udf)
1537 lvinfo->min_udf_readver = udf_rw16(context.min_udf);
1538 if (udf_rw16(lvinfo->min_udf_writever) < context.min_udf)
1539 lvinfo->min_udf_writever = udf_rw16(context.min_udf);
1540 if (udf_rw16(lvinfo->max_udf_writever) < context.max_udf)
1541 lvinfo->max_udf_writever = udf_rw16(context.max_udf);
1547 *pos++ = udf_rw32(context.part_free[cnt]);
1550 *pos++ = udf_rw32(context.part_size[cnt]);
1561 context.logvol_info = lvinfo;
1571 lvid = calloc(1, context.sector_size);
1576 context.logvol_integrity = lvid;
1594 fsd = calloc(1, context.sector_size);
1611 udf_encode_osta_id(fsd->logvol_id, 128, context.logvol_name);
1614 udf_encode_osta_id(fsd->fileset_id, 32, context.fileset_name);
1618 fsd->rootdir_icb.len = udf_rw32(context.sector_size);
1620 fsd->rootdir_icb.loc.part_num = udf_rw16(context.metadata_part);
1631 context.fileset_desc = fsd;
1646 sbd = calloc(context.sector_size, dscr_size);
1676 spt = context.sparing_table;
1716 switch (context.vtop_tp[partnr]) {
1723 if (context.part_unalloc_bits[context.vtop[partnr]] == NULL) {
1724 context.part_free[partnr] = 0;
1730 dscr = (union dscrptr *) (context.part_unalloc_bits[partnr]);
1736 context.part_free[partnr] -= 1;
1742 context.vtop_tp[partnr], __func__);
1751 context.unique_id++;
1752 if (context.unique_id < 0x10)
1753 context.unique_id = 0x10;
1770 sector_size = context.sector_size;
2079 lb_rest = context.sector_size - (endfid % context.sector_size);
2083 udf_set_regid((struct regid *) fid->data, context.impl_name);
2213 sector_size = context.sector_size;
2402 if (context.dscrver != 2) {
2430 fe = calloc(1, context.sector_size);
2484 udf_set_regid(&fe->imp_id, context.impl_name);
2486 fe->unique_id = udf_rw64(context.unique_id);
2530 efe = calloc(1, context.sector_size);
2584 udf_set_regid(&efe->imp_id, context.impl_name);
2587 efe->unique_id = udf_rw64(context.unique_id);
2638 logblks_rec = UDF_ROUNDUP(inf_len, context.sector_size) /
2639 context.sector_size;
2659 max_len = UDF_EXT_MAXLEN / context.sector_size; /* in sectors */
2661 max_len = max_len * context.sector_size;
2671 lb_num += part_len / context.sector_size;
2686 sector_size = context.sector_size;
2690 meta_icb.loc.part_num = udf_rw16(context.data_part);
2698 context.meta_file = efe;
2699 context.meta_file->unique_id = udf_rw64(0);
2707 context.meta_mirror = efe;
2708 context.meta_mirror->unique_id = udf_rw64(0);
2710 if (!(context.format_flags & FORMAT_READONLY)) {
2717 context.meta_bitmap = efe;
2718 context.meta_bitmap->unique_id = udf_rw64(0);
2722 context.unique_id = 0x10;
2726 efe = context.meta_file;
2727 udf_append_meta_mapping_to_efe(efe, context.data_part,
2731 efe = context.meta_mirror;
2732 udf_append_meta_mapping_to_efe(efe, context.data_part,
2736 if (context.meta_bitmap) {
2737 efe = context.meta_bitmap;
2739 udf_append_meta_mapping_to_efe(efe, context.data_part,
2758 root_icb.len = udf_rw32(context.sector_size);
2760 root_icb.loc.part_num = udf_rw16(context.metadata_part);
2763 if (context.dscrver == 2) {
2777 if (context.dscrver == 2) {
2783 context.num_directories++;
2784 assert(context.num_directories == 1);
2794 if (context.dscrver == 2) {
2795 context.vat_start = 0;
2796 context.vat_size = 0;
2800 context.vat_start = offsetof(struct udf_vat, data);
2801 context.vat_size = offsetof(struct udf_vat, data);
2811 if (context.vtop_tp[context.metadata_part] != UDF_VTOP_TYPE_VIRT)
2814 new_size = MAX(context.vat_size,
2815 (context.vat_start + (virt+1)*sizeof(uint32_t)));
2817 if (new_size > context.vat_allocated) {
2818 context.vat_allocated =
2819 UDF_ROUNDUP(new_size, context.sector_size);
2820 context.vat_contents = realloc(context.vat_contents,
2821 context.vat_allocated);
2822 assert(context.vat_contents);
2825 vatpos = (uint32_t *) (context.vat_contents + context.vat_start);
2828 context.vat_size = MAX(context.vat_size,
2829 (context.vat_start + (virt+1)*sizeof(uint32_t)));
2841 if (context.dscrver == 3) {
2843 vathdr = (struct udf_vat *) context.vat_contents;
2846 memcpy(vathdr->logvol_id, context.logical_vol->logvol_id, 128);
2848 vathdr->num_files = udf_rw32(context.num_files);
2849 vathdr->num_directories = udf_rw32(context.num_directories);
2851 vathdr->min_udf_readver = udf_rw16(context.min_udf);
2852 vathdr->min_udf_writever = udf_rw16(context.min_udf);
2853 vathdr->max_udf_writever = udf_rw16(context.max_udf);
2861 len_diff = context.vat_allocated - context.vat_size;
2864 context.vat_allocated += context.sector_size;
2865 context.vat_contents = realloc(context.vat_contents,
2866 context.vat_allocated);
2867 assert(context.vat_contents);
2871 oldvat_tail = (struct udf_oldvat_tail *) (context.vat_contents +
2872 context.vat_size);
2878 context.vat_size += sizeof(struct udf_oldvat_tail);
2897 if (context.dscrver == 2) {
2926 vatlvext->num_files = udf_rw32(context.num_files);
2927 vatlvext->num_directories = udf_rw32(context.num_directories);
2928 memcpy(vatlvext->logvol_id, context.logical_vol->logvol_id,128);
2941 inf_len = context.vat_size;
2945 blks = UDF_ROUNDUP(inf_len, context.sector_size) /
2946 context.sector_size;
2972 inf_len = context.vat_size;
2977 blks = UDF_ROUNDUP(inf_len, context.sector_size) /
2978 context.sector_size;
3003 inf_len = context.vat_size;
3007 blks = UDF_ROUNDUP(inf_len, context.sector_size) /
3008 context.sector_size;
3040 sects = UDF_ROUNDUP(context.vat_size, context.sector_size) /
3041 context.sector_size;
3042 layout.vat = context.alloc_pos[context.data_part];
3044 //printf("layout.vat %d\n", layout.vat + udf_rw32(context.partitions[context.data_part]->start_loc));
3047 udf_translate_vtop(loc, context.data_part, &phys, &ext);
3049 error = udf_write_phys(context.vat_contents, phys, sects);
3060 //printf("VAT itself at %d\n", loc + udf_rw32(context.partitions[context.data_part]->start_loc));
3063 error = udf_write_dscr_virt(vat_dscr, loc, context.data_part, 1);
3066 error = udf_translate_vtop(loc, context.data_part, &phys, &ext);
3073 error = udf_write_dscr_virt(vat_dscr, loc, context.data_part, 1);
3408 if (mmc_discinfo.sector_size > context.sector_size)
3409 context.sector_size = mmc_discinfo.sector_size;
3503 if (!context.create_new_session)
3630 context.write_strategy = write_strategy;
3673 rel_loc * context.sector_size,
3674 sector, context.sector_size);
3692 packet->packet_data = calloc(1, context.sector_size * blockingnr);
3702 rel_loc * context.sector_size,
3703 sector, context.sector_size);
3725 rpos = (uint64_t) location * context.sector_size;
3744 rel_loc * context.sector_size,
3745 context.sector_size);
3747 ret = pread(dev_fd, sector, context.sector_size, rpos);
3750 if (ret < (int) context.sector_size)
3753 rel_loc * context.sector_size,
3754 sector, context.sector_size);
3761 ret = pread(dev_fd, sector, context.sector_size, rpos);
3764 if (ret < (int) context.sector_size)
3795 linesize = blockingnr * context.sector_size;
3800 if (complete && (context.write_strategy != UDF_WRITE_SEQUENTIAL)) {
3806 rpos = (uint64_t) packet->start_sectornr * context.sector_size;
3819 offset = i * context.sector_size;
3822 context.sector_size);
3835 //printf("write %lu + %d\n", packet->start_sectornr, linesize / context.sector_size);
3842 wpos = (uint64_t) packet->start_sectornr * context.sector_size;
3845 wsects * context.sector_size,
3897 part = context.vtop[vpart];
3898 pdesc = context.partitions[part];
3900 switch (context.vtop_tp[vpart]) {
3919 if (lb_num * 4 >= context.vat_size)
3921 vat_off = context.vat_start + lb_num * 4;
3922 vat_pos = context.vat_contents + vat_off;
3925 if (vat_off >= context.vat_size) /* XXX > or >= ? */
3942 for (rel = 0; rel < udf_rw16(context.sparing_table->rt_l); rel++) {
3943 sme = &context.sparing_table->entries[rel];
3964 efe = context.meta_file;
3977 data_pos = (uint8_t *) context.meta_file + dscr_size + l_ea;
3990 end_lb_offset = lb_offset + len / context.sector_size;
4012 context.vtop_tp[vpart]);
4029 bpos += context.sector_size * cnt;
4049 bpos += context.sector_size * cnt;
4080 data += ext * context.sector_size;
4096 if (context.vtop_tp[vpart] == UDF_VTOP_TYPE_VIRT) {
4098 alloc_pos = context.alloc_pos[context.data_part];
4100 udf_translate_vtop(alloc_pos, context.vtop[vpart], &phys, &ext);
4101 context.alloc_pos[context.data_part]++;
4116 data += ext * context.sector_size;
4131 sector_size = context.sector_size;
4196 assert(sectors == udf_tagsize(dscr, context.sector_size) / context.sector_size);
4209 sector_size = context.sector_size;
4292 assert(sectors >= (udf_tagsize(dscr, context.sector_size) / context.sector_size));
4312 pos->len = udf_rw32(nblk * context.sector_size);
4313 pos->loc.lb_num = udf_rw32(context.alloc_pos[vpart]);
4316 udf_mark_allocated(context.alloc_pos[vpart], vpart, nblk);
4317 context.alloc_pos[vpart] += nblk;
4324 udf_partition_alloc(nblk, context.metadata_part, pos);
4331 udf_partition_alloc(nblk, context.data_part, pos);
4338 udf_partition_alloc(nblk, context.fids_part, pos);
4372 !context.create_new_session) {
4390 if (context.min_udf >= 0x0250) {
4397 if (context.min_udf >= 0x150)
4452 context.min_udf = MAX(context.min_udf, 0x0150);
4454 context.min_udf = MAX(context.min_udf, 0x0150);
4456 context.min_udf = MAX(context.min_udf, 0x0250);
4458 context.min_udf = MAX(context.min_udf, 0x0260);
4462 (context.max_udf > 0x200))
4463 context.max_udf = 0x201;
4466 if (context.max_udf <= 0x150)
4467 context.min_udf = 0x102;
4470 context.dscrver = 3;
4471 if ((context.min_udf < 0x200) || (context.max_udf < 0x200)) {
4472 context.dscrver = 2;
4473 context.max_udf = 0x150; /* last version < 0x200 */
4477 if (context.min_udf > context.max_udf) {
4480 context.max_udf, context.min_udf);
4484 if (!UDF_VERSION(context.min_udf) || !UDF_VERSION(context.max_udf)) {
4489 context.format_flags = format_flags;
4490 context.media_accesstype = media_accesstype;
4507 if (context.logvol_name == NULL)
4508 context.logvol_name = strdup("anonymous");
4509 if (context.primary_name == NULL) {
4515 context.primary_name = calloc(32, 1);
4516 sprintf(context.primary_name, "%08"PRIx32, primary_nr);
4518 if (context.volset_name == NULL) {
4526 context.volset_name = calloc(128,1);
4527 sprintf(context.volset_name, "%016"PRIx64, volset_nr);
4529 if (context.fileset_name == NULL)
4530 context.fileset_name = strdup("anonymous");
4533 if (strlen(context.logvol_name) > 128) {
4537 if (strlen(context.primary_name) > 32) {
4541 if (strlen(context.volset_name) > 128) {
4545 if (strlen(context.fileset_name) > 32) {
4564 if ((iso9660_vrs_desc = calloc(1, context.sector_size)) == NULL)
4572 if ((context.format_flags & FORMAT_TRACK512) == 0) {
4573 dpos = (2048 + context.sector_size - 1) / context.sector_size;
4597 if (context.dscrver == 2)
4699 if (context.min_udf <= 0x200)
4724 format_flags = context.format_flags;
4732 if (mmc_discinfo.sector_size > context.sector_size) {
4735 context.sector_size, mmc_discinfo.sector_size);
4754 error = udf_calculate_disc_layout(context.min_udf,
4756 context.sector_size, blockingnr);
4759 data_part = context.data_part;
4760 metadata_part = context.metadata_part;
4767 if (context.check_surface) {
4774 terminator_dscr = calloc(1, context.sector_size);
4787 context.vds_seq = 0;
4794 if ((error = udf_create_partitiond(context.data_part)))
4825 if ((zero_dscr = calloc(1, context.sector_size)) == NULL)
4843 dscr = (union dscrptr *) context.anchors[cnt];
4860 dscr = (union dscrptr *) context.primary_vol;
4868 dscr = (union dscrptr *) context.partitions[cnt];
4878 dscr = (union dscrptr *) context.unallocated;
4885 dscr = (union dscrptr *) context.logical_vol;
4892 dscr = (union dscrptr *) context.implementation;
4909 dscr = (union dscrptr *) context.sparing_table;
4910 len = udf_tagsize(dscr, context.sector_size) /
4911 context.sector_size;
4929 &context.part_unalloc_bits[data_part]);
4954 if (context.meta_bitmap) {
4959 &context.part_unalloc_bits[metadata_part]);
4972 context.num_files = 0;
4973 context.num_directories = 0;
4980 dscr = (union dscrptr *) context.logvol_integrity;
4991 context.vat_allocated = context.sector_size;
4992 context.vat_contents = malloc(context.vat_allocated);
4993 assert(context.vat_contents);
5003 dscr = (union dscrptr *) context.fileset_desc;
5018 assert(context.unique_id == 0x10);
5019 context.unique_id = 0;
5022 udf_mark_allocated(layout.rootdir, context.metadata_part, 1);
5025 layout.rootdir, context.metadata_part, 1);
5039 int format_flags = context.format_flags;
5043 data_part = context.data_part;
5044 metadata_part = context.metadata_part;
5052 dscr = (union dscrptr *) context.logvol_integrity;
5068 dscr = (union dscrptr *) (context.part_unalloc_bits[data_part]);
5077 dscr = (union dscrptr *) context.meta_file;
5083 dscr = (union dscrptr *) context.meta_mirror;
5088 if (context.meta_bitmap) {
5090 dscr = (union dscrptr *) context.meta_bitmap;
5098 (context.part_unalloc_bits[metadata_part]);