Skip to content

Commit 07d2ae1

Browse files
committed
Fixed another bug with symlinks
1 parent b8deec8 commit 07d2ae1

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

extract-xiso.c

+24-18
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)