/* Tests single open and close of a file * Returns 1 if successful, 0 if not or -1 on error */ int lnk_test_single_open_close_file( libcstring_system_character_t *filename, int access_flags, int expected_result ) { libcerror_error_t *error = NULL; liblnk_file_t *file = NULL; static char *function = "lnk_test_single_open_close_file"; char *access_string = NULL; int result = 0; if( access_flags == LIBLNK_OPEN_READ ) { access_string = "read"; } else if( access_flags == LIBLNK_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( liblnk_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 = liblnk_file_open_wide( file, filename, access_flags, &error ); #else result = liblnk_file_open( file, filename, access_flags, &error ); #endif if( result == 1 ) { if( liblnk_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( liblnk_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 ) { liblnk_file_free( &file, NULL); } return( -1 ); }
int main( int argc, char * const argv[] ) #endif { libcerror_error_t *error = NULL; liblnk_file_t *file = NULL; size_t string_length = 0; uint32_t feature_flags = 0; int ascii_codepage = 0; int result = 0; if( argc != 2 ) { fprintf( stderr, "Unsupported number of arguments.\n" ); return( EXIT_FAILURE ); } feature_flags = LIBCLOCALE_CODEPAGE_FEATURE_FLAG_HAVE_ISO_8859 | LIBCLOCALE_CODEPAGE_FEATURE_FLAG_HAVE_KOI8 | LIBCLOCALE_CODEPAGE_FEATURE_FLAG_HAVE_WINDOWS; string_length = libcstring_system_string_length( argv[ 1 ] ); #if defined( LIBCSTRING_HAVE_WIDE_SYSTEM_CHARACTER ) result = libclocale_codepage_copy_from_string_wide( &ascii_codepage, argv[ 1 ], string_length, feature_flags, &error ); #else result = libclocale_codepage_copy_from_string( &ascii_codepage, argv[ 1 ], string_length, feature_flags, &error ); #endif if( result == -1 ) { fprintf( stderr, "Unable to determine ASCII codepage from: %" PRIs_LIBCSTRING_SYSTEM ".\n", argv[ 1 ] ); goto on_error; } if( liblnk_file_initialize( &file, &error ) != 1 ) { fprintf( stderr, "Unable to create file.\n" ); goto on_error; } if( liblnk_file_set_ascii_codepage( file, ascii_codepage, &error ) != 1 ) { fprintf( stderr, "Unable to set codepage: %" PRIs_LIBCSTRING_SYSTEM ".\n", argv[ 1 ] ); goto on_error; } if( liblnk_file_free( &file, &error ) != 1 ) { fprintf( stderr, "Unable to free file.\n" ); goto on_error; } return( EXIT_SUCCESS ); on_error: if( error != NULL ) { libcerror_error_backtrace_fprint( error, stdout ); libcerror_error_free( &error ); } if( file != NULL ) { liblnk_file_free( &file, NULL ); } return( -1 ); }