/* Sets the maximum number of (concurrent) open file handles * Returns 1 if successful or -1 on error */ int mount_handle_set_maximum_number_of_open_handles( mount_handle_t *mount_handle, int maximum_number_of_open_handles, libcerror_error_t **error ) { static char *function = "mount_handle_set_maximum_number_of_open_handles"; 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( libewf_handle_set_maximum_number_of_open_handles( mount_handle->input_handle, maximum_number_of_open_handles, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_SET_FAILED, "%s: unable to set maximum number of open handles in input handle.", function ); return( -1 ); } return( 1 ); }
/* Opens the mount handle * Returns 1 if successful or -1 on error */ int mount_handle_open( mount_handle_t *mount_handle, system_character_t * const * filenames, int number_of_filenames, libcerror_error_t **error ) { libewf_handle_t *ewf_handle = NULL; system_character_t **globbed_filenames = NULL; static char *function = "mount_handle_open"; size_t filename_length = 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( filenames == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid filenames.", function ); return( -1 ); } if( number_of_filenames <= 0 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_VALUE_ZERO_OR_LESS, "%s: invalid number of filenames.", function ); return( -1 ); } if( number_of_filenames == 1 ) { filename_length = system_string_length( filenames[ 0 ] ); #if defined( HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_glob_wide( filenames[ 0 ], filename_length, LIBEWF_FORMAT_UNKNOWN, &globbed_filenames, &number_of_filenames, error ) != 1 ) #else if( libewf_glob( filenames[ 0 ], filename_length, LIBEWF_FORMAT_UNKNOWN, &globbed_filenames, &number_of_filenames, error ) != 1 ) #endif { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_GET_FAILED, "%s: unable to resolve filename(s).", function ); goto on_error; } filenames = (system_character_t * const *) globbed_filenames; } if( libewf_handle_initialize( &ewf_handle, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED, "%s: unable to initialize handle.", function ); goto on_error; } if( libewf_handle_set_maximum_number_of_open_handles( ewf_handle, mount_handle->maximum_number_of_open_handles, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_SET_FAILED, "%s: unable to set maximum number of open handles in handle.", function ); goto on_error; } #if defined( HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_handle_open_wide( ewf_handle, filenames, number_of_filenames, LIBEWF_OPEN_READ, error ) != 1 ) #else if( libewf_handle_open( ewf_handle, filenames, number_of_filenames, LIBEWF_OPEN_READ, error ) != 1 ) #endif { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_IO, LIBCERROR_IO_ERROR_OPEN_FAILED, "%s: unable to open file(s).", function ); goto on_error; } if( mount_file_system_set_handle( mount_handle->file_system, ewf_handle, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_SET_FAILED, "%s: unable to set handle in file system.", function ); goto on_error; } if( globbed_filenames != NULL ) { #if defined( HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_glob_wide_free( globbed_filenames, number_of_filenames, error ) != 1 ) #else if( libewf_glob_free( globbed_filenames, number_of_filenames, error ) != 1 ) #endif { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_FINALIZE_FAILED, "%s: unable to free globbed filenames.", function ); goto on_error; } } return( 1 ); on_error: if( ewf_handle != NULL ) { libewf_handle_free( &ewf_handle, NULL ); } if( globbed_filenames != NULL ) { #if defined( HAVE_WIDE_SYSTEM_CHARACTER ) libewf_glob_wide_free( globbed_filenames, number_of_filenames, NULL ); #else libewf_glob_free( globbed_filenames, number_of_filenames, NULL ); #endif } return( -1 ); }