/* Seeks a specific offset in a specific input file * Returns the offset if successful or -1 on error */ off64_t mount_handle_seek_offset( mount_handle_t *mount_handle, int input_file_index, off64_t offset, int whence, libcerror_error_t **error ) { libvhdi_file_t *input_file = NULL; static char *function = "mount_handle_seek_offset"; 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_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 ); } offset = libvhdi_file_seek_offset( input_file, offset, whence, error ); if( offset == -1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_IO, LIBCERROR_IO_ERROR_SEEK_FAILED, "%s: unable to seek offset in input file: %d.", function, input_file_index ); return( -1 ); } return( offset ); }
/* Tests libvhdi_file_seek_offset * Returns 1 if successful, 0 if not or -1 on error */ int vhdi_test_seek_offset( libvhdi_file_t *file, off64_t input_offset, int input_whence, off64_t expected_offset ) { libvhdi_error_t *error = NULL; off64_t result_offset = 0; int result = 0; if( file == NULL ) { return( -1 ); } result_offset = libvhdi_file_seek_offset( file, input_offset, input_whence, &error ); if( expected_offset != result_offset ) { fprintf( stderr, "Unexpected result offset: %" PRIi64 "\n", result_offset ); } else { result = 1; } if( error != NULL ) { if( result != 1 ) { libvhdi_error_backtrace_fprint( error, stderr ); } libvhdi_error_free( &error ); } return( result ); }