/* Sets the target path * Returns 1 if successful or -1 on error */ int export_handle_set_target_path( export_handle_t *export_handle, const system_character_t *target_path, libcerror_error_t **error ) { static char *function = "export_handle_set_target_path"; size_t target_path_length = 0; #if defined( WINAPI ) system_character_t *full_target_path = NULL; size_t full_target_path_size = 0; int result = 0; #endif if( export_handle == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid export handle.", function ); return( -1 ); } if( target_path == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid target path.", function ); return( -1 ); } if( export_handle->target_path != NULL ) { memory_free( export_handle->target_path ); export_handle->target_path = NULL; export_handle->target_path_size = 0; } target_path_length = system_string_length( target_path ); #if defined( WINAPI ) #if defined( HAVE_WIDE_SYSTEM_CHARACTER ) result = libcpath_path_get_full_path_wide( target_path, target_path_length, &full_target_path, &full_target_path_size, error ); #else result = libcpath_path_get_full_path( target_path, target_path_length, &full_target_path, &full_target_path_size, error ); #endif if( result == -1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED, "%s: unable to create full target path.", function ); goto on_error; } else if( result != 0 ) { target_path = full_target_path; target_path_length = full_target_path_size - 1; } #endif if( target_path_length > 0 ) { export_handle->target_path = system_string_allocate( target_path_length + 1 ); if( export_handle->target_path == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_MEMORY, LIBCERROR_MEMORY_ERROR_INSUFFICIENT, "%s: unable to create target path.", function ); goto on_error; } if( system_string_copy( export_handle->target_path, target_path, target_path_length ) == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_COPY_FAILED, "%s: unable to copy target path.", function ); goto on_error; } ( export_handle->target_path )[ target_path_length ] = 0; export_handle->target_path_size = target_path_length + 1; } #if defined( WINAPI ) memory_free( full_target_path ); full_target_path = NULL; #endif return( 1 ); on_error: #if defined( WINAPI ) if( full_target_path != NULL ) { memory_free( full_target_path ); } #endif if( export_handle->target_path != NULL ) { memory_free( export_handle->target_path ); export_handle->target_path = NULL; } export_handle->target_path_size = 0; return( -1 ); }
int main( int argc, char * const argv[] ) #endif { #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) wchar_t *full_path = NULL; #else char *full_path = NULL; #endif libcerror_error_t *error = NULL; size_t full_path_size = 0; if( argc < 2 ) { fprintf( stderr, "Missing filename.\n" ); return( EXIT_FAILURE ); } #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) if( libcpath_path_get_full_path_wide( argv[ 1 ], libcstring_wide_string_length( argv[ 1 ] ), &full_path, &full_path_size, &error ) != 1 ) #else if( libcpath_path_get_full_path( argv[ 1 ], libcstring_narrow_string_length( argv[ 1 ] ), &full_path, &full_path_size, &error ) != 1 ) #endif { fprintf( stderr, "Unable to determine full path.\n" ); goto on_error; } #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) fprintf( stdout, "%ls", full_path ); #else fprintf( stdout, "%s", full_path ); #endif memory_free( full_path ); return( EXIT_SUCCESS ); on_error: if( error != NULL ) { libcerror_error_backtrace_fprint( error, stderr ); libcerror_error_free( &error ); } if( full_path != NULL ) { memory_free( full_path ); } return( EXIT_FAILURE ); }