/* Retrieves the root file entry * Returns a Python object if successful or NULL on error */ PyObject *pyewf_handle_get_root_file_entry( pyewf_handle_t *pyewf_handle ) { char error_string[ PYEWF_ERROR_STRING_SIZE ]; libcerror_error_t *error = NULL; libewf_file_entry_t *root_file_entry = NULL; PyObject *file_entry_object = NULL; static char *function = "pyewf_handle_get_root_file_entry"; int result = 0; if( pyewf_handle == NULL ) { PyErr_Format( PyExc_TypeError, "%s: invalid handle.", function ); return( NULL ); } Py_BEGIN_ALLOW_THREADS result = libewf_handle_get_root_file_entry( pyewf_handle->handle, &root_file_entry, &error ); Py_END_ALLOW_THREADS if( result != 1 ) { if( libcerror_error_backtrace_sprint( error, error_string, PYEWF_ERROR_STRING_SIZE ) == -1 ) { PyErr_Format( PyExc_IOError, "%s: unable to retrieve root file entry.", function ); } else { PyErr_Format( PyExc_IOError, "%s: unable to retrieve root file entry.\n%s", function, error_string ); } libcerror_error_free( &error ); goto on_error; } file_entry_object = pyewf_file_entry_new( root_file_entry, pyewf_handle ); if( file_entry_object == NULL ) { PyErr_Format( PyExc_MemoryError, "%s: unable to create file entry object.", function ); goto on_error; } return( file_entry_object ); on_error: if( root_file_entry != NULL ) { libewf_file_entry_free( &root_file_entry, NULL ); } return( NULL ); }
/* Opens the input of the mount handle * Returns 1 if successful or -1 on error */ int mount_handle_open_input( mount_handle_t *mount_handle, libcstring_system_character_t * const * filenames, int number_of_filenames, libcerror_error_t **error ) { libcstring_system_character_t **libewf_filenames = NULL; static char *function = "mount_handle_open_input"; size_t first_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 ) { first_filename_length = libcstring_system_string_length( filenames[ 0 ] ); #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_glob_wide( filenames[ 0 ], first_filename_length, LIBEWF_FORMAT_UNKNOWN, &libewf_filenames, &number_of_filenames, error ) != 1 ) #else if( libewf_glob( filenames[ 0 ], first_filename_length, LIBEWF_FORMAT_UNKNOWN, &libewf_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 ); return( -1 ); } filenames = (libcstring_system_character_t * const *) libewf_filenames; } #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_handle_open_wide( mount_handle->input_handle, filenames, number_of_filenames, LIBEWF_OPEN_READ, error ) != 1 ) #else if( libewf_handle_open( mount_handle->input_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 ); if( libewf_filenames != NULL ) { #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) libewf_glob_wide_free( libewf_filenames, number_of_filenames, NULL ); #else libewf_glob_free( libewf_filenames, number_of_filenames, NULL ); #endif } return( -1 ); } if( libewf_filenames != NULL ) { #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) if( libewf_glob_wide_free( libewf_filenames, number_of_filenames, error ) != 1 ) #else if( libewf_glob_free( libewf_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 ); return( -1 ); } } if( mount_handle->input_format == MOUNT_HANDLE_INPUT_FORMAT_FILES ) { if( libewf_handle_get_root_file_entry( mount_handle->input_handle, &( mount_handle->root_file_entry ), error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_GET_FAILED, "%s: unable to retrieve root file entry.", function ); return( -1 ); } } return( 1 ); }