/* Closes the info handle * Returns the 0 if succesful or -1 on error */ int info_handle_close( info_handle_t *info_handle, libcerror_error_t **error ) { static char *function = "info_handle_close"; if( info_handle == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid info handle.", function ); return( -1 ); } if( info_handle->input_file == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_VALUE_MISSING, "%s: invalid info handle - missing input file.", function ); return( -1 ); } if( libvhdi_file_close( info_handle->input_file, error ) != 0 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_IO, LIBCERROR_IO_ERROR_CLOSE_FAILED, "%s: unable to close input file.", function ); return( -1 ); } return( 0 ); }
/* Closes the mount handle * Returns the 0 if succesful or -1 on error */ int mount_handle_close( mount_handle_t *mount_handle, libcerror_error_t **error ) { libvhdi_file_t *input_file = NULL; static char *function = "mount_handle_close"; int input_file_index = 0; int number_of_input_files = 0; if( mount_handle == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid mount handle.", function ); return( -1 ); } if( libcdata_array_get_number_of_entries( mount_handle->input_files_array, &number_of_input_files, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_GET_FAILED, "%s: unable to retrieve number of input files.", function ); return( -1 ); } for( input_file_index = number_of_input_files - 1; input_file_index > 0; input_file_index-- ) { if( libcdata_array_get_entry_by_index( mount_handle->input_files_array, input_file_index, (intptr_t **) &input_file, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_GET_FAILED, "%s: unable to retrieve input file: %d.", function, input_file_index ); return( -1 ); } if( libvhdi_file_close( input_file, error ) != 0 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_IO, LIBCERROR_IO_ERROR_CLOSE_FAILED, "%s: unable to close input file: %d.", function, input_file_index ); return( -1 ); } } return( 0 ); }
/* Tests single open and close of a file * Returns 1 if successful, 0 if not or -1 on error */ int vhdi_test_single_open_close_file( libcstring_system_character_t *filename, int access_flags, int expected_result ) { libcerror_error_t *error = NULL; libvhdi_file_t *file = NULL; static char *function = "vhdi_test_single_open_close_file"; char *access_string = NULL; int result = 0; if( access_flags == LIBVHDI_OPEN_READ ) { access_string = "read"; } else if( access_flags == LIBVHDI_OPEN_WRITE ) { access_string = "write"; } else { access_string = "UNKNOWN"; } fprintf( stdout, "Testing single open close of: " ); if( filename != NULL ) { fprintf( stdout, "%" PRIs_LIBCSTRING_SYSTEM "", filename ); } else { fprintf( stdout, "NULL" ); } fprintf( stdout, " with access: %s\t", access_string ); if( libvhdi_file_initialize( &file, &error ) != 1 ) { libcerror_error_set( &error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED, "%s: unable to create file.", function ); goto on_error; } #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) result = libvhdi_file_open_wide( file, filename, access_flags, &error ); #else result = libvhdi_file_open( file, filename, access_flags, &error ); #endif if( result == 1 ) { if( libvhdi_file_close( file, &error ) != 0 ) { libcerror_error_set( &error, LIBCERROR_ERROR_DOMAIN_IO, LIBCERROR_IO_ERROR_CLOSE_FAILED, "%s: unable to close file.", function ); goto on_error; } } if( libvhdi_file_free( &file, &error ) != 1 ) { libcerror_error_set( &error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_FINALIZE_FAILED, "%s: unable to free file.", function ); goto on_error; } result = ( expected_result == result ); if( result == 1 ) { fprintf( stdout, "(PASS)" ); } else { fprintf( stdout, "(FAIL)" ); } fprintf( stdout, "\n" ); if( error != NULL ) { libcerror_error_backtrace_fprint( error, stderr ); libcerror_error_free( &error ); } return( result ); on_error: if( error != NULL ) { libcerror_error_backtrace_fprint( error, stderr ); libcerror_error_free( &error ); } if( file != NULL ) { libvhdi_file_free( &file, NULL); } return( -1 ); }
/* Tests reading a file * Returns 1 if successful, 0 if not or -1 on error */ int vhdi_test_read( libcstring_system_character_t *source, libcerror_error_t **error ) { libvhdi_file_t *file = NULL; libvhdi_file_t *parent_file = NULL; size64_t media_size = 0; int result = 0; if( libvhdi_file_initialize( &file, error ) != 1 ) { fprintf( stderr, "Unable to create file.\n" ); goto on_error; } #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) if( libvhdi_file_open_wide( file, source, LIBVHDI_OPEN_READ, error ) != 1 ) #else if( libvhdi_file_open( file, source, LIBVHDI_OPEN_READ, error ) != 1 ) #endif { fprintf( stderr, "Unable to open file.\n" ); goto on_error; } if( vhdi_test_read_open_parent( source, file, &parent_file, error ) == -1 ) { fprintf( stderr, "Unable to open parent file.\n" ); goto on_error; } if( libvhdi_file_get_media_size( file, &media_size, error ) != 1 ) { fprintf( stderr, "Unable to retrieve media size.\n" ); goto on_error; } fprintf( stdout, "Media size: %" PRIu64 " bytes\n", media_size ); result = vhdi_test_read_from_file( file, media_size ); if( result == -1 ) { fprintf( stderr, "Unable to read from file.\n" ); goto on_error; } if( libvhdi_file_close( file, error ) != 0 ) { fprintf( stderr, "Unable to close file.\n" ); goto on_error; } if( libvhdi_file_free( &file, error ) != 1 ) { fprintf( stderr, "Unable to free file.\n" ); goto on_error; } if( parent_file != NULL ) { if( libvhdi_file_close( parent_file, error ) != 0 ) { fprintf( stderr, "Unable to close parent file.\n" ); goto on_error; } if( libvhdi_file_free( &parent_file, error ) != 1 ) { fprintf( stderr, "Unable to free parent file.\n" ); goto on_error; } } return( result ); on_error: if( file != NULL ) { libvhdi_file_close( file, NULL ); libvhdi_file_free( &file, NULL ); } if( parent_file != NULL ) { libvhdi_file_close( parent_file, NULL ); libvhdi_file_free( &parent_file, NULL ); } return( -1 ); }