The branch main has been updated by emaste:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a18be39aafc1b55fd67603ee6a6d820d0fcd877f

commit a18be39aafc1b55fd67603ee6a6d820d0fcd877f
Author:     Ed Maste <ema...@freebsd.org>
AuthorDate: 2025-03-01 13:30:52 +0000
Commit:     Ed Maste <ema...@freebsd.org>
CommitDate: 2025-03-01 13:35:15 +0000

    makefs: Initialize cd9660 inode map only once
    
    Error introduced during a refactoring; cd9660_susp_initialize calls
    itself recursively.
    
    Sponsred by:    The FreeBSD Foundation
    Fixes: 35a2e286157a ("makefs: Record inode for all entries in mtree mode")
---
 usr.sbin/makefs/cd9660/iso9660_rrip.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/usr.sbin/makefs/cd9660/iso9660_rrip.c 
b/usr.sbin/makefs/cd9660/iso9660_rrip.c
index 1b8ce42da4c0..31c6e38a96fe 100644
--- a/usr.sbin/makefs/cd9660/iso9660_rrip.c
+++ b/usr.sbin/makefs/cd9660/iso9660_rrip.c
@@ -70,8 +70,10 @@ cd9660_susp_initialize(iso9660_disk *diskStructure, 
cd9660node *node,
        if (node->dot_dot_record != 0)
                TAILQ_INIT(&(node->dot_dot_record->head));
 
-       RB_INIT(&diskStructure->rr_inode_map);
-       diskStructure->rr_inode_next = 1;
+       if (diskStructure->rr_inode_next == 0) {
+               RB_INIT(&diskStructure->rr_inode_map);
+               diskStructure->rr_inode_next = 1;
+       }
 
         /* SUSP specific entries here */
        if ((r = cd9660_susp_initialize_node(diskStructure, node)) < 0)
@@ -121,11 +123,15 @@ cd9660_susp_finalize(iso9660_disk *diskStructure, 
cd9660node *node)
                if ((r = cd9660_susp_finalize(diskStructure, temp)) < 0)
                        return r;
        }
-       RB_FOREACH_SAFE(mapnode, inode_map_tree,
-           &(diskStructure->rr_inode_map), mapnodetmp) {
-               RB_REMOVE(inode_map_tree, &(diskStructure->rr_inode_map),
-                   mapnode);
-               free(mapnode);
+
+       if (diskStructure->rr_inode_next != 0) {
+               RB_FOREACH_SAFE(mapnode, inode_map_tree,
+                   &(diskStructure->rr_inode_map), mapnodetmp) {
+                       RB_REMOVE(inode_map_tree,
+                           &(diskStructure->rr_inode_map), mapnode);
+                       free(mapnode);
+               }
+               diskStructure->rr_inode_next = 0;
        }
        return 1;
 }

Reply via email to