/* Sets the volume offset * Returns 1 if successful or -1 on error */ int info_handle_set_volume_offset( info_handle_t *info_handle, const libcstring_system_character_t *string, libcerror_error_t **error ) { static char *function = "info_handle_set_volume_offset"; size_t string_length = 0; uint64_t value_64bit = 0; if( info_handle == NULL ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_ARGUMENTS, LIBCERROR_ARGUMENT_ERROR_INVALID_VALUE, "%s: invalid info handle.", function ); return( -1 ); } string_length = libcstring_system_string_length( string ); if( libcsystem_string_decimal_copy_to_64_bit( string, string_length + 1, &value_64bit, error ) != 1 ) { libcerror_error_set( error, LIBCERROR_ERROR_DOMAIN_RUNTIME, LIBCERROR_RUNTIME_ERROR_COPY_FAILED, "%s: unable to copy string to 64-bit decimal.", function ); return( -1 ); } info_handle->volume_offset = (off64_t) value_64bit; return( 1 ); }
int main( int argc, char * const argv[] ) #endif { libcstring_system_character_t *option_offset = NULL; libcstring_system_character_t *option_size = NULL; libcstring_system_character_t *target_filename = NULL; libcerror_error_t *error = NULL; libcstring_system_integer_t option = 0; off64_t write_offset = 0; size64_t write_size = 0; size_t string_length = 0; while( ( option = libcsystem_getopt( argc, argv, _LIBCSTRING_SYSTEM_STRING( "B:o:t:" ) ) ) != (libcstring_system_integer_t) -1 ) { switch( option ) { case (libcstring_system_integer_t) '?': default: fprintf( stderr, "Invalid argument: %" PRIs_LIBCSTRING_SYSTEM ".\n", argv[ optind - 1 ] ); return( EXIT_FAILURE ); case (libcstring_system_integer_t) 'B': option_size = optarg; break; case (libcstring_system_integer_t) 'o': option_offset = optarg; break; case (libcstring_system_integer_t) 't': target_filename = optarg; break; } } if( optind == argc ) { fprintf( stderr, "Missing EWF image filename(s).\n" ); return( EXIT_FAILURE ); } if( option_offset != NULL ) { string_length = libcstring_system_string_length( option_offset ); if( libcsystem_string_decimal_copy_to_64_bit( option_offset, string_length + 1, (uint64_t *) &write_offset, &error ) != 1 ) { fprintf( stderr, "Unsupported write offset.\n" ); goto on_error; } } if( option_size != NULL ) { string_length = libcstring_system_string_length( option_size ); if( libcsystem_string_decimal_copy_to_64_bit( option_size, string_length + 1, &write_size, &error ) != 1 ) { fprintf( stderr, "Unsupported write size.\n" ); goto on_error; } } if( ewf_test_read_write_delta( &( argv[ optind ] ), argc - optind, target_filename, write_offset, write_size, &error ) != 1 ) { fprintf( stderr, "Unable to test read/write.\n" ); goto on_error; } return( EXIT_SUCCESS ); on_error: if( error != NULL ) { libewf_error_backtrace_fprint( error, stderr ); libewf_error_free( &error ); } return( EXIT_FAILURE ); }
int main( int argc, char * const argv[] ) #endif { libcstring_system_character_t *option_chunk_size = NULL; libcstring_system_character_t *option_compression_level = NULL; libcstring_system_character_t *option_maximum_segment_size = NULL; libcstring_system_character_t *option_media_size = NULL; libcerror_error_t *error = NULL; libcstring_system_integer_t option = 0; size64_t chunk_size = 0; size64_t maximum_segment_size = 0; size64_t media_size = 0; size_t string_length = 0; uint8_t compression_flags = 0; int8_t compression_level = LIBEWF_COMPRESSION_NONE; while( ( option = libcsystem_getopt( argc, argv, _LIBCSTRING_SYSTEM_STRING( "b:B:c:S:" ) ) ) != (libcstring_system_integer_t) -1 ) { switch( option ) { case (libcstring_system_integer_t) '?': default: fprintf( stderr, "Invalid argument: %" PRIs_LIBCSTRING_SYSTEM ".\n", argv[ optind - 1 ] ); return( EXIT_FAILURE ); case (libcstring_system_integer_t) 'b': option_chunk_size = optarg; break; case (libcstring_system_integer_t) 'c': option_compression_level = optarg; break; case (libcstring_system_integer_t) 'B': option_media_size = optarg; break; case (libcstring_system_integer_t) 'S': option_maximum_segment_size = optarg; break; } } if( optind == argc ) { fprintf( stderr, "Missing EWF image filename.\n" ); return( EXIT_FAILURE ); } if( option_chunk_size != NULL ) { string_length = libcstring_system_string_length( option_chunk_size ); if( libcsystem_string_decimal_copy_to_64_bit( option_chunk_size, string_length + 1, &chunk_size, &error ) != 1 ) { fprintf( stderr, "Unsupported chunk size.\n" ); goto on_error; } } if( option_compression_level != NULL ) { string_length = libcstring_system_string_length( option_compression_level ); if( string_length != 1 ) { fprintf( stderr, "Unsupported compression level.\n" ); goto on_error; } if( option_compression_level[ 0 ] == (libcstring_system_character_t) 'n' ) { compression_level = LIBEWF_COMPRESSION_NONE; compression_flags = 0; } else if( option_compression_level[ 0 ] == (libcstring_system_character_t) 'e' ) { compression_level = LIBEWF_COMPRESSION_NONE; compression_flags = LIBEWF_COMPRESS_FLAG_USE_EMPTY_BLOCK_COMPRESSION; } else if( option_compression_level[ 0 ] == (libcstring_system_character_t) 'f' ) { compression_level = LIBEWF_COMPRESSION_FAST; compression_flags = 0; } else if( option_compression_level[ 0 ] == (libcstring_system_character_t) 'b' ) { compression_level = LIBEWF_COMPRESSION_BEST; compression_flags = 0; } else { fprintf( stderr, "Unsupported compression level.\n" ); goto on_error; } } if( option_maximum_segment_size != NULL ) { string_length = libcstring_system_string_length( option_maximum_segment_size ); if( libcsystem_string_decimal_copy_to_64_bit( option_maximum_segment_size, string_length + 1, &maximum_segment_size, &error ) != 1 ) { fprintf( stderr, "Unsupported maximum segment size.\n" ); goto on_error; } } if( option_media_size != NULL ) { string_length = libcstring_system_string_length( option_media_size ); if( libcsystem_string_decimal_copy_to_64_bit( option_media_size, string_length + 1, &media_size, &error ) != 1 ) { fprintf( stderr, "Unsupported media size.\n" ); goto on_error; } } if( ewf_test_write_chunk( argv[ optind ], media_size, maximum_segment_size, compression_level, compression_flags, &error ) != 1 ) { fprintf( stderr, "Unable to test write.\n" ); goto on_error; } return( EXIT_SUCCESS ); on_error: if( error != NULL ) { libewf_error_backtrace_fprint( error, stderr ); libewf_error_free( &error ); } return( EXIT_FAILURE ); }
int main( int argc, char * const argv[] ) #endif { libfsntfs_error_t *error = NULL; libcstring_system_character_t *option_mft_entry_index = NULL; libcstring_system_character_t *option_volume_offset = NULL; libcstring_system_character_t *source = NULL; char *program = "fsntfsinfo"; libcstring_system_integer_t option = 0; size_t string_length = 0; uint64_t mft_entry_index = 0; int option_mode = FSNTFSINFO_MODE_VOLUME; int verbose = 0; libcnotify_stream_set( stderr, NULL ); libcnotify_verbose_set( 1 ); if( libclocale_initialize( "fsntfstools", &error ) != 1 ) { fprintf( stderr, "Unable to initialize locale values.\n" ); goto on_error; } if( libcsystem_initialize( _IONBF, &error ) != 1 ) { fprintf( stderr, "Unable to initialize system values.\n" ); goto on_error; } fsntfsoutput_version_fprint( stdout, program ); while( ( option = libcsystem_getopt( argc, argv, _LIBCSTRING_SYSTEM_STRING( "E:hHo:UvV" ) ) ) != (libcstring_system_integer_t) -1 ) { switch( option ) { case (libcstring_system_integer_t) '?': default: fprintf( stderr, "Invalid argument: %" PRIs_LIBCSTRING_SYSTEM "\n", argv[ optind - 1 ] ); usage_fprint( stdout ); return( EXIT_FAILURE ); case (libcstring_system_integer_t) 'E': option_mode = FSNTFSINFO_MODE_MFT_ENTRY; option_mft_entry_index = optarg; break; case (libcstring_system_integer_t) 'h': usage_fprint( stdout ); return( EXIT_SUCCESS ); case (libcstring_system_integer_t) 'H': option_mode = FSNTFSINFO_MODE_FILE_SYSTEM_HIERARCHY; break; case (libcstring_system_integer_t) 'o': option_volume_offset = optarg; break; case (libcstring_system_integer_t) 'U': option_mode = FSNTFSINFO_MODE_USER_JOURNAL; break; case (libcstring_system_integer_t) 'v': verbose = 1; break; case (libcstring_system_integer_t) 'V': fsntfsoutput_copyright_fprint( stdout ); return( EXIT_SUCCESS ); } } if( optind == argc ) { fprintf( stderr, "Missing source file or device.\n" ); usage_fprint( stdout ); return( EXIT_FAILURE ); } source = argv[ optind ]; libcnotify_verbose_set( verbose ); libfsntfs_notify_set_stream( stderr, NULL ); libfsntfs_notify_set_verbose( verbose ); if( info_handle_initialize( &fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to initialize info handle.\n" ); goto on_error; } if( option_volume_offset != NULL ) { if( info_handle_set_volume_offset( fsntfsinfo_info_handle, option_volume_offset, &error ) != 1 ) { libcnotify_print_error_backtrace( error ); libcerror_error_free( &error ); fprintf( stderr, "Unsupported volume offset defaulting to: %" PRIi64 ".\n", fsntfsinfo_info_handle->volume_offset ); } } if( info_handle_open_input( fsntfsinfo_info_handle, source, &error ) != 1 ) { fprintf( stderr, "Unable to open: %" PRIs_LIBCSTRING_SYSTEM ".\n", source ); goto on_error; } switch( option_mode ) { case FSNTFSINFO_MODE_FILE_SYSTEM_HIERARCHY: if( info_handle_file_system_hierarchy_fprint( fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to print file system hierarchy.\n" ); goto on_error; } break; case FSNTFSINFO_MODE_MFT_ENTRY: if( option_mft_entry_index == NULL ) { fprintf( stderr, "Mising MFT entry index string.\n" ); goto on_error; } string_length = libcstring_system_string_length( option_mft_entry_index ); if( ( string_length == 3 ) && ( libcstring_system_string_compare( option_mft_entry_index, _LIBCSTRING_SYSTEM_STRING( "all" ), 3 ) == 0 ) ) { if( info_handle_mft_entries_fprint( fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to print MFT entries.\n" ); goto on_error; } } else if( libcsystem_string_decimal_copy_to_64_bit( option_mft_entry_index, string_length + 1, &mft_entry_index, &error ) == 1 ) { if( info_handle_mft_entry_fprint( fsntfsinfo_info_handle, mft_entry_index, &error ) != 1 ) { fprintf( stderr, "Unable to print MFT entry: %" PRIu64 ".\n", mft_entry_index ); goto on_error; } } else { fprintf( stderr, "Unable to copy MFT entry index string to 64-bit decimal.\n" ); goto on_error; } break; case FSNTFSINFO_MODE_USER_JOURNAL: if( fsntfsinfo_info_handle->input_volume == NULL ) { fprintf( stderr, "Unable to print user journal ($UsnJrnl) information.\n" ); goto on_error; } if( info_handle_user_journal_fprint( fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to print user journal ($UsnJrnl) information.\n" ); goto on_error; } break; case FSNTFSINFO_MODE_VOLUME: default: if( info_handle_volume_fprint( fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to print volume information.\n" ); goto on_error; } break; } if( info_handle_close_input( fsntfsinfo_info_handle, &error ) != 0 ) { fprintf( stderr, "Unable to close info handle.\n" ); goto on_error; } if( info_handle_free( &fsntfsinfo_info_handle, &error ) != 1 ) { fprintf( stderr, "Unable to free info handle.\n" ); goto on_error; } return( EXIT_SUCCESS ); on_error: if( error != NULL ) { libcnotify_print_error_backtrace( error ); libcerror_error_free( &error ); } if( fsntfsinfo_info_handle != NULL ) { info_handle_free( &fsntfsinfo_info_handle, NULL ); } return( EXIT_FAILURE ); }