Lines Matching +full:t +full:- +full:head
3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
7 * Perez-Rathke and Ram Vedam. All rights reserved.
10 * Alan Perez-Rathke and Ram Vedam.
23 * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM ``AS IS'' AND ANY EXPRESS OR
27 * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM BE LIABLE FOR ANY DIRECT, INDIRECT,
65 if (!(node->type & CD9660_TYPE_DOT) && in cd9660_susp_initialize()
66 !(node->type & CD9660_TYPE_DOTDOT)) in cd9660_susp_initialize()
67 TAILQ_INIT(&(node->head)); in cd9660_susp_initialize()
68 if (node->dot_record != 0) in cd9660_susp_initialize()
69 TAILQ_INIT(&(node->dot_record->head)); in cd9660_susp_initialize()
70 if (node->dot_dot_record != 0) in cd9660_susp_initialize()
71 TAILQ_INIT(&(node->dot_dot_record->head)); in cd9660_susp_initialize()
73 if (diskStructure->rr_inode_next == 0) { in cd9660_susp_initialize()
74 RB_INIT(&diskStructure->rr_inode_map); in cd9660_susp_initialize()
75 diskStructure->rr_inode_next = 1; in cd9660_susp_initialize()
98 TAILQ_FOREACH(cn, &node->cn_children, cn_next_child) { in cd9660_susp_initialize()
114 if (node == diskStructure->rootNode) in cd9660_susp_finalize()
115 diskStructure->susp_continuation_area_current_free = 0; in cd9660_susp_finalize()
122 TAILQ_FOREACH(temp, &node->cn_children, cn_next_child) { in cd9660_susp_finalize()
127 if (diskStructure->rr_inode_next != 0) { in cd9660_susp_finalize()
129 &(diskStructure->rr_inode_map), mapnodetmp) { in cd9660_susp_finalize()
131 &(diskStructure->rr_inode_map), mapnode); in cd9660_susp_finalize()
134 diskStructure->rr_inode_next = 0; in cd9660_susp_finalize()
145 * For the sake of simplicity and clarity, we won't be doing that for now.
155 struct ISO_SUSP_ATTRIBUTES *t; in cd9660_susp_finalize_node() local
158 if (node->susp_entry_ce_length > 0) { in cd9660_susp_finalize_node()
159 node->susp_entry_ce_start = in cd9660_susp_finalize_node()
160 diskStructure->susp_continuation_area_current_free; in cd9660_susp_finalize_node()
161 diskStructure->susp_continuation_area_current_free += in cd9660_susp_finalize_node()
162 node->susp_entry_ce_length; in cd9660_susp_finalize_node()
165 TAILQ_FOREACH(t, &node->head, rr_ll) { in cd9660_susp_finalize_node()
166 if (t->susp_type != SUSP_TYPE_SUSP || in cd9660_susp_finalize_node()
167 t->entry_type != SUSP_ENTRY_SUSP_CE) in cd9660_susp_finalize_node()
170 diskStructure-> in cd9660_susp_finalize_node()
172 t->attr.su_entry.CE.ca_sector); in cd9660_susp_finalize_node()
175 diskStructure-> in cd9660_susp_finalize_node()
177 t->attr.su_entry.CE.ca_sector); in cd9660_susp_finalize_node()
178 cd9660_bothendian_dword(node->susp_entry_ce_start, in cd9660_susp_finalize_node()
179 t->attr.su_entry.CE.offset); in cd9660_susp_finalize_node()
180 cd9660_bothendian_dword(node->susp_entry_ce_length, in cd9660_susp_finalize_node()
181 t->attr.su_entry.CE.length); in cd9660_susp_finalize_node()
189 struct ISO_SUSP_ATTRIBUTES *t; in cd9660_rrip_finalize_node() local
191 TAILQ_FOREACH(t, &node->head, rr_ll) { in cd9660_rrip_finalize_node()
192 if (t->susp_type != SUSP_TYPE_RRIP) in cd9660_rrip_finalize_node()
194 switch (t->entry_type) { in cd9660_rrip_finalize_node()
197 if (node->rr_relocated == NULL) in cd9660_rrip_finalize_node()
198 return -1; in cd9660_rrip_finalize_node()
200 node->rr_relocated->fileDataSector, in cd9660_rrip_finalize_node()
202 t->attr.rr_entry.CL.dir_loc); in cd9660_rrip_finalize_node()
206 if (node->parent == NULL || in cd9660_rrip_finalize_node()
207 node->parent->rr_real_parent == NULL) in cd9660_rrip_finalize_node()
208 return -1; in cd9660_rrip_finalize_node()
210 node->parent->rr_real_parent->fileDataSector, in cd9660_rrip_finalize_node()
212 t->attr.rr_entry.PL.dir_loc); in cd9660_rrip_finalize_node()
227 working = 254 - space; in cd9660_susp_handle_continuation_common()
228 if (node->su_tail_size > 0) in cd9660_susp_handle_continuation_common()
230 working -= node->su_tail_size + 4; in cd9660_susp_handle_continuation_common()
235 TAILQ_FOREACH(temp, &node->head, rr_ll) { in cd9660_susp_handle_continuation_common()
242 working -= CD9660_SUSP_ENTRY_SIZE(temp); in cd9660_susp_handle_continuation_common()
264 TAILQ_INSERT_AFTER(&node->head, pre_ce, CE, rr_ll); in cd9660_susp_handle_continuation_common()
266 TAILQ_INSERT_HEAD(&node->head, CE, rr_ll); in cd9660_susp_handle_continuation_common()
277 if (node->su_tail_size > 0) { in cd9660_susp_handle_continuation_common()
282 TAILQ_INSERT_AFTER(&node->head, last, ST, rr_ll); in cd9660_susp_handle_continuation_common()
284 TAILQ_INSERT_HEAD(&node->head, ST, rr_ll); in cd9660_susp_handle_continuation_common()
289 last->last_in_suf = 1; in cd9660_susp_handle_continuation_common()
291 node->susp_entry_size = susp_used; in cd9660_susp_handle_continuation_common()
292 node->susp_entry_ce_length = ca_used; in cd9660_susp_handle_continuation_common()
294 diskStructure->susp_continuation_area_size += ca_used; in cd9660_susp_handle_continuation_common()
306 node,(int)(node->isoDirRecord->length[0])) < 0) in cd9660_susp_handle_continuation()
322 * PD: isn't needed (though might be added for testing) in cd9660_susp_initialize_node()
328 if (node->type & CD9660_TYPE_DOT) { in cd9660_susp_initialize_node()
329 if (node->parent == diskStructure->rootNode) { in cd9660_susp_initialize_node()
335 TAILQ_INSERT_HEAD(&node->head, temp, rr_ll); in cd9660_susp_initialize_node()
347 * Inode dependent values - this may change, in cd9660_rrip_initialize_inode()
352 if ((node->node != NULL) && (node->node->inode != NULL)) { in cd9660_rrip_initialize_inode()
353 /* PX - POSIX attributes */ in cd9660_rrip_initialize_inode()
356 cd9660node_rrip_px(diskStructure, attr, node->node); in cd9660_rrip_initialize_inode()
358 TAILQ_INSERT_TAIL(&node->head, attr, rr_ll); in cd9660_rrip_initialize_inode()
360 /* TF - timestamp */ in cd9660_rrip_initialize_inode()
363 cd9660node_rrip_tf(attr, node->node); in cd9660_rrip_initialize_inode()
364 TAILQ_INSERT_TAIL(&node->head, attr, rr_ll); in cd9660_rrip_initialize_inode()
366 /* SL - Symbolic link */ in cd9660_rrip_initialize_inode()
367 /* ?????????? Dan - why is this here? */ in cd9660_rrip_initialize_inode()
368 if (TAILQ_EMPTY(&node->cn_children) && in cd9660_rrip_initialize_inode()
369 node->node->inode != NULL && in cd9660_rrip_initialize_inode()
370 S_ISLNK(node->node->inode->st.st_mode)) in cd9660_rrip_initialize_inode()
373 /* PN - device number */ in cd9660_rrip_initialize_inode()
374 if (node->node->inode != NULL && in cd9660_rrip_initialize_inode()
375 ((S_ISCHR(node->node->inode->st.st_mode) || in cd9660_rrip_initialize_inode()
376 S_ISBLK(node->node->inode->st.st_mode)))) { in cd9660_rrip_initialize_inode()
381 cd9660node_rrip_pn(attr, node->node); in cd9660_rrip_initialize_inode()
382 TAILQ_INSERT_TAIL(&node->head, attr, rr_ll); in cd9660_rrip_initialize_inode()
395 if (node->type & CD9660_TYPE_DOT) { in cd9660_rrip_initialize_node()
397 * Handle ER - should be the only entry to appear on in cd9660_rrip_initialize_node()
400 if (node->parent == diskStructure->rootNode) { in cd9660_rrip_initialize_node()
404 if (parent != NULL && parent->node != NULL && in cd9660_rrip_initialize_node()
405 parent->node->inode != NULL) { in cd9660_rrip_initialize_node()
406 /* PX - POSIX attributes */ in cd9660_rrip_initialize_node()
410 parent->node); in cd9660_rrip_initialize_node()
411 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
413 /* TF - timestamp */ in cd9660_rrip_initialize_node()
416 cd9660node_rrip_tf(current, parent->node); in cd9660_rrip_initialize_node()
417 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
419 } else if (node->type & CD9660_TYPE_DOTDOT) { in cd9660_rrip_initialize_node()
420 if (grandparent != NULL && grandparent->node != NULL && in cd9660_rrip_initialize_node()
421 grandparent->node->inode != NULL) { in cd9660_rrip_initialize_node()
422 /* PX - POSIX attributes */ in cd9660_rrip_initialize_node()
426 grandparent->node); in cd9660_rrip_initialize_node()
427 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
429 /* TF - timestamp */ in cd9660_rrip_initialize_node()
432 cd9660node_rrip_tf(current, grandparent->node); in cd9660_rrip_initialize_node()
433 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
436 if (parent != NULL && parent->rr_real_parent != NULL) { in cd9660_rrip_initialize_node()
440 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
445 if (node == diskStructure->rr_moved_dir) { in cd9660_rrip_initialize_node()
447 } else if (node->node != NULL) { in cd9660_rrip_initialize_node()
454 if (node->rr_relocated != NULL) { in cd9660_rrip_initialize_node()
458 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
462 if (node->rr_real_parent != NULL) { in cd9660_rrip_initialize_node()
466 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_rrip_initialize_node()
479 temp->susp_type = susp_type; in cd9660node_susp_create_node()
480 temp->entry_type = entry_type; in cd9660node_susp_create_node()
481 temp->last_in_suf = 0; in cd9660node_susp_create_node()
483 temp->type_of[0] = type_id[0]; in cd9660node_susp_create_node()
484 temp->type_of[1] = type_id[1]; in cd9660node_susp_create_node()
485 temp->write_location = write_loc; in cd9660node_susp_create_node()
492 temp->attr.su_entry.SP.h.type[0] = type_id[0]; in cd9660node_susp_create_node()
493 temp->attr.su_entry.SP.h.type[1] = type_id[1]; in cd9660node_susp_create_node()
500 p->attr.rr_entry.PL.h.length[0] = 12; in cd9660_rrip_PL()
501 p->attr.rr_entry.PL.h.version[0] = 1; in cd9660_rrip_PL()
508 p->attr.rr_entry.CL.h.length[0] = 12; in cd9660_rrip_CL()
509 p->attr.rr_entry.CL.h.version[0] = 1; in cd9660_rrip_CL()
516 p->attr.rr_entry.RE.h.length[0] = 4; in cd9660_rrip_RE()
517 p->attr.rr_entry.RE.h.version[0] = 1; in cd9660_rrip_RE()
530 sl_ptr = node->node->symlink; in cd9660_createSL()
539 current->attr.rr_entry.SL.h.version[0] = 1; in cd9660_createSL()
540 current->attr.rr_entry.SL.flags[0] = SL_FLAGS_NONE; in cd9660_createSL()
545 memcpy(current->attr.rr_entry.SL.component + path_count, in cd9660_createSL()
581 current->attr.rr_entry.SL.flags[0] |= SL_FLAGS_CONTINUE; in cd9660_createSL()
586 while(j != (249 - path_count)) { in cd9660_createSL()
591 temp_sl[1] = j - 2; in cd9660_createSL()
593 current->attr.rr_entry.SL.component + in cd9660_createSL()
599 current->attr.rr_entry.SL.h.length[0] = path_count + 5; in cd9660_createSL()
600 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_createSL()
603 current->attr.rr_entry.SL.h.version[0] = 1; in cd9660_createSL()
604 current->attr.rr_entry.SL.flags[0] = SL_FLAGS_NONE; in cd9660_createSL()
610 current->attr.rr_entry.SL.component[ in cd9660_createSL()
615 current->attr.rr_entry.SL.component[1] in cd9660_createSL()
620 current->attr.rr_entry.SL.component[ in cd9660_createSL()
629 memcpy(current->attr.rr_entry.SL.component + in cd9660_createSL()
638 current->attr.rr_entry.SL.h.length[0] = path_count + 5; in cd9660_createSL()
639 TAILQ_INSERT_TAIL(&node->head, current, rr_ll); in cd9660_createSL()
654 if (a->key < b->key) in inode_map_node_cmp()
655 return (-1); in inode_map_node_cmp()
656 if (a->key > b->key) in inode_map_node_cmp()
674 node = RB_FIND(inode_map_tree, &(diskStructure->rr_inode_map), in inode_map()
677 return (node->value); in inode_map()
681 node->key = in; in inode_map()
682 node->value = diskStructure->rr_inode_next++; in inode_map()
683 RB_INSERT(inode_map_tree, &(diskStructure->rr_inode_map), node); in inode_map()
684 return (node->value); in inode_map()
691 v->attr.rr_entry.PX.h.length[0] = 44; in cd9660node_rrip_px()
692 v->attr.rr_entry.PX.h.version[0] = 1; in cd9660node_rrip_px()
693 cd9660_bothendian_dword(pxinfo->inode->st.st_mode, in cd9660node_rrip_px()
694 v->attr.rr_entry.PX.mode); in cd9660node_rrip_px()
695 cd9660_bothendian_dword(pxinfo->inode->st.st_nlink, in cd9660node_rrip_px()
696 v->attr.rr_entry.PX.links); in cd9660node_rrip_px()
697 cd9660_bothendian_dword(pxinfo->inode->st.st_uid, in cd9660node_rrip_px()
698 v->attr.rr_entry.PX.uid); in cd9660node_rrip_px()
699 cd9660_bothendian_dword(pxinfo->inode->st.st_gid, in cd9660node_rrip_px()
700 v->attr.rr_entry.PX.gid); in cd9660node_rrip_px()
702 pxinfo->inode->st.st_ino), v->attr.rr_entry.PX.serial); in cd9660node_rrip_px()
710 pn_field->attr.rr_entry.PN.h.length[0] = 20; in cd9660node_rrip_pn()
711 pn_field->attr.rr_entry.PN.h.version[0] = 1; in cd9660node_rrip_pn()
713 if (sizeof (fnode->inode->st.st_rdev) > 4) in cd9660node_rrip_pn()
715 (uint64_t)fnode->inode->st.st_rdev >> 32, in cd9660node_rrip_pn()
716 pn_field->attr.rr_entry.PN.high); in cd9660node_rrip_pn()
718 cd9660_bothendian_dword(0, pn_field->attr.rr_entry.PN.high); in cd9660node_rrip_pn()
720 cd9660_bothendian_dword(fnode->inode->st.st_rdev & 0xffffffff, in cd9660node_rrip_pn()
721 pn_field->attr.rr_entry.PN.low); in cd9660node_rrip_pn()
729 int nm_length = strlen(file_node->isoDirRecord->name) + 5;
730 p->attr.rr_entry.NM.h.type[0] = 'N';
731 p->attr.rr_entry.NM.h.type[1] = 'M';
732 sprintf(p->attr.rr_entry.NM.altname, "%s", file_node->isoDirRecord->name);
733 p->attr.rr_entry.NM.h.length[0] = (unsigned char)nm_length;
734 p->attr.rr_entry.NM.h.version[0] = (unsigned char)1;
735 p->attr.rr_entry.NM.flags[0] = (unsigned char) NM_PARENT;
743 p->attr.rr_entry.TF.flags[0] = TF_MODIFY | TF_ACCESS | TF_ATTRIBUTES; in cd9660node_rrip_tf()
744 p->attr.rr_entry.TF.h.length[0] = 5; in cd9660node_rrip_tf()
745 p->attr.rr_entry.TF.h.version[0] = 1; in cd9660node_rrip_tf()
752 cd9660_time_915(p->attr.rr_entry.TF.timestamp, in cd9660node_rrip_tf()
753 _node->inode->st.st_mtime); in cd9660node_rrip_tf()
754 p->attr.rr_entry.TF.h.length[0] += 7; in cd9660node_rrip_tf()
756 cd9660_time_915(p->attr.rr_entry.TF.timestamp + 7, in cd9660node_rrip_tf()
757 _node->inode->st.st_atime); in cd9660node_rrip_tf()
758 p->attr.rr_entry.TF.h.length[0] += 7; in cd9660node_rrip_tf()
760 cd9660_time_915(p->attr.rr_entry.TF.timestamp + 14, in cd9660node_rrip_tf()
761 _node->inode->st.st_ctime); in cd9660node_rrip_tf()
762 p->attr.rr_entry.TF.h.length[0] += 7; in cd9660node_rrip_tf()
769 p->attr.su_entry.SP.h.length[0] = 7; in cd9660_susp_sp()
770 p->attr.su_entry.SP.h.version[0] = 1; in cd9660_susp_sp()
771 p->attr.su_entry.SP.check[0] = 0xBE; in cd9660_susp_sp()
772 p->attr.su_entry.SP.check[1] = 0xEF; in cd9660_susp_sp()
773 p->attr.su_entry.SP.len_skp[0] = 0; in cd9660_susp_sp()
780 p->attr.su_entry.ST.h.type[0] = 'S'; in cd9660_susp_st()
781 p->attr.su_entry.ST.h.type[1] = 'T'; in cd9660_susp_st()
782 p->attr.su_entry.ST.h.length[0] = 4; in cd9660_susp_st()
783 p->attr.su_entry.ST.h.version[0] = 1; in cd9660_susp_st()
790 p->attr.su_entry.CE.h.length[0] = 28; in cd9660_susp_ce()
791 p->attr.su_entry.CE.h.version[0] = 1; in cd9660_susp_ce()
819 r->attr.rr_entry.NM.h.version[0] = 1; in cd9660_rrip_add_NM()
820 r->attr.rr_entry.NM.flags[0] = RRIP_NM_FLAGS_NONE; in cd9660_rrip_add_NM()
825 r->attr.rr_entry.NM.flags[0] = RRIP_NM_FLAGS_CONTINUE; in cd9660_rrip_add_NM()
829 memcpy(r->attr.rr_entry.NM.altname, p, len); in cd9660_rrip_add_NM()
830 r->attr.rr_entry.NM.h.length[0] = 5 + len; in cd9660_rrip_add_NM()
832 TAILQ_INSERT_TAIL(&node->head, r, rr_ll); in cd9660_rrip_add_NM()
841 cd9660_rrip_add_NM(node, node->node->name); in cd9660_rrip_NM()
856 r->attr.su_entry.ER.h.length[0] = 8; in cd9660_susp_ER()
857 r->attr.su_entry.ER.h.version[0] = 1; in cd9660_susp_ER()
859 r->attr.su_entry.ER.len_id[0] = (u_char)strlen(ext_id); in cd9660_susp_ER()
860 r->attr.su_entry.ER.len_des[0] = (u_char)strlen(ext_des); in cd9660_susp_ER()
861 r->attr.su_entry.ER.len_src[0] = (u_char)strlen(ext_src); in cd9660_susp_ER()
863 l = r->attr.su_entry.ER.len_id[0] + in cd9660_susp_ER()
864 r->attr.su_entry.ER.len_src[0] + in cd9660_susp_ER()
865 r->attr.su_entry.ER.len_des[0]; in cd9660_susp_ER()
868 assert(l + r->attr.su_entry.ER.h.length[0] <= 254); in cd9660_susp_ER()
870 r->attr.su_entry.ER.h.length[0] += (u_char)l; in cd9660_susp_ER()
873 r->attr.su_entry.ER.ext_ver[0] = ext_version; in cd9660_susp_ER()
874 memcpy(r->attr.su_entry.ER.ext_data, ext_id, in cd9660_susp_ER()
875 (int)r->attr.su_entry.ER.len_id[0]); in cd9660_susp_ER()
876 l = (int) r->attr.su_entry.ER.len_id[0]; in cd9660_susp_ER()
877 memcpy(r->attr.su_entry.ER.ext_data + l,ext_des, in cd9660_susp_ER()
878 (int)r->attr.su_entry.ER.len_des[0]); in cd9660_susp_ER()
880 l += (int)r->attr.su_entry.ER.len_des[0]; in cd9660_susp_ER()
881 memcpy(r->attr.su_entry.ER.ext_data + l,ext_src, in cd9660_susp_ER()
882 (int)r->attr.su_entry.ER.len_src[0]); in cd9660_susp_ER()
884 TAILQ_INSERT_TAIL(&node->head, r, rr_ll); in cd9660_susp_ER()