#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "rdd.h"
#include "rdd_internals.h"
#include "numparser.h"
#include "reader.h"
#include "commandline.h"
#include "error.h"
#include "hashcontainer.h"
#include "writer.h"
#include "filter.h"
#include "filterset.h"
#include "copier.h"
#include "netio.h"
#include "progress.h"
#include "msgprinter.h"
Go to the source code of this file.
Data Structures | |
struct | _rdd_copy_opts |
struct | _rdd_output_opt_t |
Defines | |
#define | ALL_MODES (RDD_LOCAL|RDD_CLIENT|RDD_SERVER) |
#define | bool2str(b) ((b) ? "yes" : "no") |
#define | DEFAULT_BLOCK_LEN 262144 |
#define | DEFAULT_BLOCKMD5_SIZE 4096 |
#define | DEFAULT_CHKSUM_BLOCK_SIZE 32768 |
#define | DEFAULT_HIST_BLOCK_SIZE 262144 |
#define | DEFAULT_MAX_READ_ERR 0 |
#define | DEFAULT_MIN_BLOCK_SIZE 32768 |
#define | DEFAULT_NRETRY 1 |
#define | DEFAULT_RDD_SERVER_PORT 4832 |
#define | DEFAULT_RECOVERY_LEN 4 |
#define | RDD_MAX_OUTPUT_OPTS 16 |
#define | RDD_OUTPUT_OPTTAB_OPTION_COUNT sizeof(output_opttab)/sizeof(RDD_OPTION) |
#define | str2str(s) ((s) == 0? "<none>" : (s)) |
Typedefs | |
typedef enum _rdd_copy_mode_t | rdd_copy_mode_t |
typedef struct _rdd_copy_opts | rdd_copy_opts |
typedef struct _rdd_output_opt_t | rdd_output_opt_t |
Enumerations | |
enum | _rdd_copy_mode_t { RDD_LOCAL = 0x1, RDD_CLIENT = 0x2, RDD_SERVER = 0x4 } |
Functions | |
static void | add_filter (RDD_FILTERSET *fset, const char *name, RDD_FILTER *f) |
static int | check_compress_option (char *arg) |
static void | close_printer (void) |
static void | command_line (int argc, char **argv) |
static RDD_WRITER * | connection_exists (RDD_WRITER *writer_list[], int output_number, struct addrinfo *address) |
static RDD_COPIER * | create_copier (rdd_count_t input_size, RDD_PROGRESS *progress) |
static void | fatal_rdd_error (int rdd_errno, char *fmt,...) |
static int | handle_progress (rdd_count_t pos, rdd_count_t nsubst, void *env) |
static void | handle_read_error (rdd_count_t offset, unsigned nbyte, void *env) |
static void | handle_substitution (rdd_count_t offset, unsigned nbyte, void *env) |
static void | init_options (void) |
static void | install_filters (RDD_FILTERSET *fset, RDD_WRITER *writers[]) |
static void | log_header (char **argv, int argc) |
static void | log_params (rdd_copy_opts *opts) |
static void | logmsg (const char *fmt,...) |
int | main (int argc, char **argv) |
static RDD_READER * | open_disk_input (rdd_count_t *inputlen) |
static RDD_WRITER * | open_disk_output (rdd_count_t outputsize, RDD_HASH_CONTAINER *hashcontainer, int output_number) |
static RDD_READER * | open_input (rdd_count_t *inputlen) |
static void | open_logfile (void) |
static RDD_READER * | open_net_input (rdd_count_t *inputlen) |
static RDD_WRITER * | open_net_output (rdd_count_t outputsize, RDD_WRITER *tcp_writer_list[], int *num_tcp_writers, int output_number) |
Open network output. | |
static RDD_WRITER * | open_output (rdd_count_t outputsize, RDD_HASH_CONTAINER *hashcontainer, RDD_WRITER *tcp_writer_list[], int *num_tcp_writers, int output_number) |
static char * | print_ewf_compress_option () |
static void | process_hash_result (RDD_FILTERSET *fset, const char *hash_name, const char *filter_name, unsigned mdsize, RDD_HASH_CONTAINER *hashcontainer) |
static void | process_options () |
static rdd_count_t | scan_size (char *str, unsigned flags) |
static unsigned | scan_tcp_port (char *str) |
static unsigned | scan_uint (char *str) |
static int | send_end_of_output_opts_marker (RDD_WRITER *tcp_writer_list[]) |
static void | split_host_file (const char *host_file, char **host, char **file) |
Variables | |
static RDD_OPTION | all_output_opttabs [RDD_OUTPUT_OPTTAB_OPTION_COUNT *RDD_MAX_OUTPUT_OPTS] |
static char * | compression_types [] = { "no ewf", "none", "fast", "best", "empty-block", NULL} |
static char | copyright [] |
static rdd_copy_opts | opts |
static RDD_OPTION | opttab [] |
static RDD_OPTION | output_opttab [] |
static RDD_MSGPRINTER * | the_printer |
static char * | usage_message |
#define RDD_OUTPUT_OPTTAB_OPTION_COUNT sizeof(output_opttab)/sizeof(RDD_OPTION) |
typedef enum _rdd_copy_mode_t rdd_copy_mode_t |
typedef struct _rdd_copy_opts rdd_copy_opts |
typedef struct _rdd_output_opt_t rdd_output_opt_t |
enum _rdd_copy_mode_t |
static void add_filter | ( | RDD_FILTERSET * | fset, | |
const char * | name, | |||
RDD_FILTER * | f | |||
) | [static] |
Definition at line 1226 of file rddcopy.c.
References fatal_rdd_error(), rdd_fset_add(), and RDD_OK.
static int check_compress_option | ( | char * | arg | ) | [static] |
Definition at line 268 of file rddcopy.c.
References compression_types, fatal_rdd_error(), and RDD_BADARG.
static void close_printer | ( | void | ) | [static] |
Definition at line 1036 of file rddcopy.c.
References rdd_mp_close(), RDD_MP_READONLY, RDD_MP_RECURSE, and RDD_OK.
static void command_line | ( | int | argc, | |
char ** | argv | |||
) | [static] |
Definition at line 555 of file rddcopy.c.
References _rdd_copy_opts::blocklen, compare_paths(), _RDD_OPTION::count, error(), _rdd_output_opt_t::ewf, flag_set, _rdd_copy_opts::infile, _RDD_OPTION::long_name, _rdd_copy_opts::minblocklen, _rdd_copy_opts::mode, _rdd_output_opt_t::outpath, _rdd_copy_opts::output, _rdd_copy_opts::output_count, process_options(), RDD_CLIENT, RDD_EWF_MIN_SPLITLEN, rdd_get_opt_with_arg(), RDD_LOCAL, RDD_MAX_OUTPUT_OPTS, rdd_opt_set(), rdd_opt_usage(), RDD_OUTPUT_OPTTAB_OPTION_COUNT, RDD_SERVER, _rdd_output_opt_t::splitlen, streq, and _RDD_OPTION::valid_modes.
static RDD_WRITER* connection_exists | ( | RDD_WRITER * | writer_list[], | |
int | output_number, | |||
struct addrinfo * | address | |||
) | [static] |
Definition at line 853 of file rddcopy.c.
References fatal_rdd_error(), rdd_compare_address(), and RDD_OK.
static RDD_COPIER* create_copier | ( | rdd_count_t | input_size, | |
RDD_PROGRESS * | progress | |||
) | [static] |
Definition at line 1343 of file rddcopy.c.
References _rdd_copy_opts::blocklen, _rdd_copy_opts::count, error(), fatal_rdd_error(), handle_progress(), handle_read_error(), handle_substitution(), logmsg(), _rdd_copy_opts::max_read_err, _RDD_ROBUST_PARAMS::maxblocklen, _RDD_ROBUST_PARAMS::maxsubst, _rdd_copy_opts::minblocklen, _RDD_ROBUST_PARAMS::minblocklen, _rdd_copy_opts::mode, _rdd_copy_opts::nretry, _RDD_ROBUST_PARAMS::nretry, _rdd_copy_opts::offset, _RDD_ROBUST_PARAMS::progressenv, _RDD_SIMPLE_PARAMS::progressenv, _RDD_ROBUST_PARAMS::progressfun, _RDD_SIMPLE_PARAMS::progressfun, rdd_new_robust_copier(), rdd_new_simple_copier(), RDD_OK, RDD_SERVER, rdd_strsize(), RDD_WHOLE_FILE, _RDD_ROBUST_PARAMS::readerrfun, _RDD_ROBUST_PARAMS::substfun, and _rdd_copy_opts::verbose.
static void fatal_rdd_error | ( | int | rdd_errno, | |
char * | fmt, | |||
... | ||||
) | [static] |
Definition at line 233 of file rddcopy.c.
References rdd_mp_vrddmsg(), and RDD_MSG_ERROR.
static int handle_progress | ( | rdd_count_t | pos, | |
rdd_count_t | nsubst, | |||
void * | env | |||
) | [static] |
Definition at line 1157 of file rddcopy.c.
References fatal_rdd_error(), _RDD_PROGRESS_INFO::fraction, _RDD_PROGRESS::input_size, _RDD_PROGRESS_INFO::nsubst, _RDD_PROGRESS_INFO::pos, RDD_EAGAIN, RDD_OK, rdd_progress_poll(), rdd_progress_update(), _RDD_PROGRESS_INFO::speed, and timeUnits().
static void handle_read_error | ( | rdd_count_t | offset, | |
unsigned | nbyte, | |||
void * | env | |||
) | [static] |
static void handle_substitution | ( | rdd_count_t | offset, | |
unsigned | nbyte, | |||
void * | env | |||
) | [static] |
static void init_options | ( | void | ) | [static] |
Definition at line 319 of file rddcopy.c.
References _rdd_copy_opts::adler32len, _rdd_copy_opts::blocklen, _rdd_copy_opts::blockmd5len, _rdd_copy_opts::crc32len, DEFAULT_BLOCK_LEN, DEFAULT_BLOCKMD5_SIZE, DEFAULT_CHKSUM_BLOCK_SIZE, DEFAULT_HIST_BLOCK_SIZE, DEFAULT_MAX_READ_ERR, DEFAULT_MIN_BLOCK_SIZE, DEFAULT_NRETRY, DEFAULT_RDD_SERVER_PORT, _rdd_output_opt_t::ewf, _rdd_copy_opts::histblocklen, _rdd_copy_opts::max_read_err, _rdd_copy_opts::minblocklen, _rdd_copy_opts::mode, _rdd_copy_opts::nretry, _rdd_output_opt_t::outpath, _rdd_copy_opts::output, _rdd_copy_opts::output_count, RDD_LOCAL, RDD_MAX_OUTPUT_OPTS, _rdd_output_opt_t::server_host, _rdd_output_opt_t::server_port, _rdd_copy_opts::server_port, and _rdd_output_opt_t::splitlen.
static void install_filters | ( | RDD_FILTERSET * | fset, | |
RDD_WRITER * | writers[] | |||
) | [static] |
Definition at line 1236 of file rddcopy.c.
References add_filter(), _rdd_copy_opts::adler32file, _rdd_copy_opts::adler32len, _rdd_copy_opts::blockmd5file, _rdd_copy_opts::blockmd5len, _rdd_copy_opts::crc32file, _rdd_copy_opts::crc32len, error(), fatal_rdd_error(), _rdd_copy_opts::force_overwrite, _rdd_copy_opts::histblocklen, _rdd_copy_opts::histfile, _rdd_copy_opts::md5, _rdd_copy_opts::output_count, rdd_fset_init(), rdd_new_adler32_blockfilter(), rdd_new_crc32_blockfilter(), rdd_new_md5_blockfilter(), rdd_new_md5_streamfilter(), rdd_new_sha1_streamfilter(), rdd_new_sha256_streamfilter(), rdd_new_sha384_streamfilter(), rdd_new_sha512_streamfilter(), rdd_new_stats_blockfilter(), rdd_new_write_streamfilter(), RDD_OK, _rdd_copy_opts::sha1, _rdd_copy_opts::sha256, _rdd_copy_opts::sha384, and _rdd_copy_opts::sha512.
static void log_header | ( | char ** | argv, | |
int | argc | |||
) | [static] |
Definition at line 1056 of file rddcopy.c.
References logmsg(), and rdd_ctime().
static void log_params | ( | rdd_copy_opts * | opts | ) | [static] |
Definition at line 1093 of file rddcopy.c.
References _rdd_copy_opts::adler32file, _rdd_copy_opts::adler32len, _rdd_copy_opts::blocklen, _rdd_copy_opts::blockmd5file, _rdd_copy_opts::blockmd5len, bool2str, _rdd_copy_opts::compress, _rdd_copy_opts::count, _rdd_copy_opts::crc32file, _rdd_copy_opts::crc32len, _rdd_copy_opts::force_overwrite, _rdd_copy_opts::histblocklen, _rdd_copy_opts::histfile, _rdd_copy_opts::inetd, _rdd_copy_opts::infile, _rdd_copy_opts::logfile, logmsg(), _rdd_copy_opts::max_read_err, _rdd_copy_opts::md5, _rdd_copy_opts::minblocklen, _rdd_copy_opts::mode, _rdd_copy_opts::nretry, _rdd_copy_opts::offset, _rdd_output_opt_t::outpath, _rdd_copy_opts::output, _rdd_copy_opts::output_count, print_ewf_compress_option(), _rdd_copy_opts::progresslen, _rdd_copy_opts::quiet, _rdd_copy_opts::raw, RDD_CLIENT, RDD_LOCAL, _rdd_output_opt_t::server_host, _rdd_output_opt_t::server_port, _rdd_copy_opts::server_port, _rdd_copy_opts::sha1, _rdd_copy_opts::sha256, _rdd_copy_opts::sha384, _rdd_copy_opts::sha512, _rdd_output_opt_t::splitlen, str2str, and _rdd_copy_opts::verbose.
static void logmsg | ( | const char * | fmt, | |
... | ||||
) | [static] |
Definition at line 244 of file rddcopy.c.
References rdd_mp_vmessage(), and RDD_MSG_INFO.
int main | ( | int | argc, | |
char ** | argv | |||
) |
Definition at line 1454 of file rddcopy.c.
References close_printer(), command_line(), create_copier(), fatal_rdd_error(), init_options(), install_filters(), log_header(), log_params(), _rdd_copy_opts::logfile, logmsg(), _rdd_copy_opts::md5, _RDD_COPIER_RETURN::nbyte, _RDD_COPIER_RETURN::nlost, _RDD_COPIER_RETURN::nread_err, _RDD_COPIER_RETURN::nsubst, open_input(), open_logfile(), open_output(), _rdd_copy_opts::output_count, process_hash_result(), _rdd_copy_opts::progresslen, rdd_catch_signals(), rdd_cons_close(), rdd_cons_open(), rdd_copy_exec(), rdd_copy_free(), rdd_fset_clear(), rdd_gettime(), rdd_init(), RDD_MAX_OUTPUT_OPTS, RDD_MD5, rdd_mp_message(), rdd_mp_open_log_printer(), rdd_mp_open_stdio_printer(), RDD_MSG_INFO, rdd_new_hashcontainer(), RDD_NO, RDD_OK, rdd_opt_init(), rdd_progress_init(), rdd_quit_if(), rdd_reader_close(), RDD_SHA1, RDD_SHA256, RDD_SHA384, RDD_SHA512, RDD_WHOLE_FILE, rdd_writer_close(), send_end_of_output_opts_marker(), set_progname(), _rdd_copy_opts::sha1, _rdd_copy_opts::sha256, _rdd_copy_opts::sha384, _rdd_copy_opts::sha512, and usage_message.
static RDD_READER* open_disk_input | ( | rdd_count_t * | inputlen | ) | [static] |
Definition at line 666 of file rddcopy.c.
References fatal_rdd_error(), _rdd_copy_opts::infile, _rdd_copy_opts::raw, rdd_device_size(), RDD_OK, rdd_open_aligned_reader(), rdd_open_faulty_reader(), rdd_open_file_reader(), rdd_reader_seek(), RDD_SECTOR_SIZE, RDD_WHOLE_FILE, and _rdd_copy_opts::simfile.
static RDD_WRITER* open_disk_output | ( | rdd_count_t | outputsize, | |
RDD_HASH_CONTAINER * | hashcontainer, | |||
int | output_number | |||
) | [static] |
Definition at line 798 of file rddcopy.c.
References error(), _rdd_output_opt_t::ewf, fatal_rdd_error(), _rdd_copy_opts::force_overwrite, logmsg(), _rdd_output_opt_t::outpath, _rdd_copy_opts::output, RDD_NO_OVERWRITE, RDD_OK, rdd_open_ewf_writer(), rdd_open_fd_writer(), rdd_open_part_writer(), rdd_open_safe_writer(), RDD_OVERWRITE_ASK, _rdd_copy_opts::sha256, _rdd_copy_opts::sha384, _rdd_copy_opts::sha512, and _rdd_output_opt_t::splitlen.
static RDD_READER* open_input | ( | rdd_count_t * | inputlen | ) | [static] |
Definition at line 788 of file rddcopy.c.
References _rdd_copy_opts::mode, open_disk_input(), open_net_input(), and RDD_SERVER.
static void open_logfile | ( | void | ) | [static] |
Definition at line 992 of file rddcopy.c.
References fatal_rdd_error(), _rdd_copy_opts::force_overwrite, _rdd_copy_opts::logfile, rdd_mp_open_bcastprinter(), rdd_mp_open_file_printer(), rdd_mp_open_log_printer(), RDD_OK, and _rdd_copy_opts::verbose.
static RDD_READER* open_net_input | ( | rdd_count_t * | inputlen | ) | [static] |
For each output file, receive parameters. Do this until an empty file name is received.
Definition at line 703 of file rddcopy.c.
References _rdd_copy_opts::blocklen, error(), _rdd_output_opt_t::ewf, fatal_rdd_error(), _rdd_copy_opts::inetd, logmsg(), _rdd_output_opt_t::outpath, _rdd_copy_opts::output, _rdd_copy_opts::output_count, print_ewf_compress_option(), rdd_await_connection(), rdd_init_server(), RDD_MAX_OUTPUT_OPTS, RDD_NET_COMPRESS, RDD_OK, rdd_open_fd_reader(), rdd_open_zlib_reader(), rdd_recv_info(), rdd_strsize(), RDD_WHOLE_FILE, _rdd_copy_opts::server_port, _rdd_output_opt_t::splitlen, and _rdd_copy_opts::verbose.
static RDD_WRITER* open_net_output | ( | rdd_count_t | outputsize, | |
RDD_WRITER * | tcp_writer_list[], | |||
int * | num_tcp_writers, | |||
int | output_number | |||
) | [static] |
Open network output.
outputsize | the size of the output | |
tcp_writer_list | (in/out) the list of current tcp writers | |
num_tcp_writers | (in/out) the size of the tcp_writer_list | |
output_number | the index of the output parameter set on the command line for which we have to create a writer |
Find out if the connection has already been created by another writer.
Send output parameters.
Definition at line 912 of file rddcopy.c.
References _rdd_copy_opts::blocklen, _rdd_copy_opts::compress, connection_exists(), _rdd_output_opt_t::ewf, fatal_rdd_error(), _rdd_output_opt_t::outpath, _rdd_copy_opts::output, rdd_get_address(), RDD_NET_COMPRESS, RDD_OK, rdd_open_tcp_writer(), rdd_open_zlib_writer(), rdd_send_info(), _rdd_output_opt_t::server_host, _rdd_output_opt_t::server_port, and _rdd_output_opt_t::splitlen.
static RDD_WRITER* open_output | ( | rdd_count_t | outputsize, | |
RDD_HASH_CONTAINER * | hashcontainer, | |||
RDD_WRITER * | tcp_writer_list[], | |||
int * | num_tcp_writers, | |||
int | output_number | |||
) | [static] |
Creates a writer stack that corresponds to the user's options. The outputsize argument contains the size of the output in bytes if that size is known or RDD_WHOLE_FILE if is not known.
Definition at line 982 of file rddcopy.c.
References _rdd_copy_opts::mode, open_disk_output(), open_net_output(), and RDD_CLIENT.
static char* print_ewf_compress_option | ( | ) | [static] |
Definition at line 284 of file rddcopy.c.
References compression_types, _rdd_output_opt_t::ewf, fatal_rdd_error(), _rdd_copy_opts::output, and RDD_BADARG.
static void process_hash_result | ( | RDD_FILTERSET * | fset, | |
const char * | hash_name, | |||
const char * | filter_name, | |||
unsigned | mdsize, | |||
RDD_HASH_CONTAINER * | hashcontainer | |||
) | [static] |
Definition at line 1415 of file rddcopy.c.
References fatal_rdd_error(), logmsg(), rdd_buf2hex(), RDD_ESPACE, rdd_filter_get_result(), rdd_fset_get(), RDD_MAX_DIGEST_LENGTH, RDD_OK, and rdd_set_hash().
static void process_options | ( | void | ) | [static] |
Definition at line 387 of file rddcopy.c.
References _rdd_copy_opts::adler32file, _rdd_copy_opts::adler32len, _rdd_copy_opts::blocklen, _rdd_copy_opts::blockmd5file, _rdd_copy_opts::blockmd5len, check_compress_option(), _rdd_copy_opts::compress, _rdd_copy_opts::count, _RDD_OPTION::count, _rdd_copy_opts::crc32file, _rdd_copy_opts::crc32len, error(), _rdd_output_opt_t::ewf, _rdd_copy_opts::force_overwrite, _rdd_copy_opts::histblocklen, _rdd_copy_opts::histfile, _rdd_copy_opts::inetd, _rdd_copy_opts::infile, _rdd_copy_opts::logfile, _rdd_copy_opts::max_read_err, _rdd_copy_opts::md5, _rdd_copy_opts::minblocklen, _rdd_copy_opts::mode, _rdd_copy_opts::nretry, _rdd_copy_opts::offset, _rdd_output_opt_t::outpath, _rdd_copy_opts::output, _rdd_copy_opts::output_count, _rdd_copy_opts::progresslen, _rdd_copy_opts::quiet, _rdd_copy_opts::raw, RDD_CLIENT, rdd_opt_set(), rdd_opt_set_arg(), rdd_opt_usage(), RDD_OUTPUT_OPTTAB_OPTION_COUNT, RDD_POSITIVE, RDD_SERVER, rdd_set_quiet(), scan_size(), scan_tcp_port(), scan_uint(), _rdd_output_opt_t::server_host, _rdd_copy_opts::server_port, _rdd_output_opt_t::server_port, _rdd_copy_opts::sha1, _rdd_copy_opts::sha256, _rdd_copy_opts::sha384, _rdd_copy_opts::sha512, _rdd_copy_opts::simfile, split_host_file(), _rdd_output_opt_t::splitlen, and _rdd_copy_opts::verbose.
static rdd_count_t scan_size | ( | char * | str, | |
unsigned | flags | |||
) | [static] |
Definition at line 256 of file rddcopy.c.
References fatal_rdd_error(), RDD_OK, and rdd_parse_bignum().
static unsigned scan_tcp_port | ( | char * | str | ) | [static] |
Definition at line 307 of file rddcopy.c.
References fatal_rdd_error(), RDD_OK, and rdd_parse_tcp_port().
static unsigned scan_uint | ( | char * | str | ) | [static] |
Definition at line 295 of file rddcopy.c.
References fatal_rdd_error(), RDD_OK, and rdd_parse_uint().
static int send_end_of_output_opts_marker | ( | RDD_WRITER * | tcp_writer_list[] | ) | [static] |
Definition at line 873 of file rddcopy.c.
References fatal_rdd_error(), _rdd_copy_opts::output_count, rdd_compare_address(), RDD_OK, and rdd_send_info().
static void split_host_file | ( | const char * | host_file, | |
char ** | host, | |||
char ** | file | |||
) | [static] |
Definition at line 348 of file rddcopy.c.
References error(), and rdd_malloc().
RDD_OPTION all_output_opttabs[RDD_OUTPUT_OPTTAB_OPTION_COUNT *RDD_MAX_OUTPUT_OPTS] [static] |
char* compression_types[] = { "no ewf", "none", "fast", "best", "empty-block", NULL} [static] |
char copyright[] [static] |
rdd_copy_opts opts [static] |
RDD_OPTION opttab[] [static] |
RDD_OPTION output_opttab[] [static] |
Initial value:
{ {"-e", "--ewf", "<compression>",RDD_LOCAL|RDD_CLIENT, "Output as Expert Witness Compression Format (EnCase), compression: none, fast, best, empty-block", 0, 0}, {"-s", "--split", "<count>[kKmMgG]", RDD_LOCAL|RDD_CLIENT, "Split output, all files < <count> [KMG]bytes", 0, 0}, {"-N", "--name", "<file>", RDD_LOCAL|RDD_CLIENT, "The output file name", 0, 0}, {"-p", "--port", "<portnum>", RDD_CLIENT, "Set server port to <port>", 0, 0}, {0, 0, 0, 0, 0, 0, 0} }
RDD_MSGPRINTER* the_printer [static] |
char* usage_message [static] |