@@ -1724,24 +1724,30 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
1724
1724
context .progress = in_context -> progress ;
1725
1725
context .final_bytes = in_context -> final_bytes ;
1726
1726
1727
- if ( in_context -> from == -1 ) {
1728
- if ( chdir ( in_avl -> filename ) == -1 ) chdir_err ( in_avl -> filename );
1729
- }
1730
-
1731
- if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_file , & context , k_prefix , 0 );
1732
- if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_tree , & context , k_prefix , 0 );
1733
-
1734
- if (!err && lseek (in_context -> xiso , (xoff_t )in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1735
- if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , (void * )(uintptr_t )in_context -> xiso , k_prefix , 0 );
1736
- if (!err && (pos = lseek (in_context -> xiso , 0 , SEEK_CUR )) == -1 ) seek_err ();
1737
- if (!err && (pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ))) {
1738
- memset (sector , XISO_PAD_BYTE , pad );
1739
- if (write (in_context -> xiso , sector , pad ) != pad ) write_err ();
1740
- }
1741
-
1742
- if ( ! err && in_context -> from == -1 ) {
1743
- if ( chdir ( ".." ) == -1 ) chdir_err ( ".." );
1744
- }
1727
+ char * rpwd = realpath ( "." , NULL );
1728
+ if ( ! rpwd ) {
1729
+ read_err ();
1730
+ } else {
1731
+ if ( in_context -> from == -1 ) {
1732
+ if ( chdir ( in_avl -> filename ) == -1 ) chdir_err ( in_avl -> filename );
1733
+ }
1734
+
1735
+ if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_file , & context , k_prefix , 0 );
1736
+ if ( ! err ) err = avl_traverse_depth_first ( in_avl -> subdirectory , (traversal_callback ) write_tree , & context , k_prefix , 0 );
1737
+
1738
+ if (!err && lseek (in_context -> xiso , (xoff_t )in_avl -> start_sector * XISO_SECTOR_SIZE , SEEK_SET ) == -1 ) seek_err ();
1739
+ if (!err ) err = avl_traverse_depth_first (in_avl -> subdirectory , (traversal_callback )write_directory , (void * )(uintptr_t )in_context -> xiso , k_prefix , 0 );
1740
+ if (!err && (pos = lseek (in_context -> xiso , 0 , SEEK_CUR )) == -1 ) seek_err ();
1741
+ if (!err && (pad = (int )((XISO_SECTOR_SIZE - (pos % XISO_SECTOR_SIZE )) % XISO_SECTOR_SIZE ))) {
1742
+ memset (sector , XISO_PAD_BYTE , pad );
1743
+ if (write (in_context -> xiso , sector , pad ) != pad ) write_err ();
1744
+ }
1745
+
1746
+ if ( ! err && in_context -> from == -1 ) {
1747
+ if ( chdir ( rpwd ) == -1 ) chdir_err ( rpwd );
1748
+ }
1749
+ }
1750
+ free (rpwd );
1745
1751
1746
1752
if ( context .path ) free ( context .path );
1747
1753
} else {
0 commit comments