@@ -1724,24 +1724,30 @@ int write_tree( dir_node_avl *in_avl, write_tree_context *in_context, int in_dep
17241724 context .progress = in_context -> progress ;
17251725 context .final_bytes = in_context -> final_bytes ;
17261726
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 );
17451751
17461752 if ( context .path ) free ( context .path );
17471753 } else {
0 commit comments