diff options
Diffstat (limited to 'source4/client/cifsdd.h')
-rw-r--r-- | source4/client/cifsdd.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/source4/client/cifsdd.h b/source4/client/cifsdd.h new file mode 100644 index 0000000000..21a4ad4882 --- /dev/null +++ b/source4/client/cifsdd.h @@ -0,0 +1,105 @@ +/* + CIFSDD - dd for SMB. + Declarations and administrivia. + + Copyright (C) James Peach 2005-2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +extern const char * const PROGNAME; + +enum argtype +{ + ARG_NUMERIC, + ARG_SIZE, + ARG_PATHNAME, + ARG_BOOL, +}; + +struct argdef +{ + const char * arg_name; + enum argtype arg_type; + const char * arg_help; + + union + { + bool bval; + uint64_t nval; + const char * pval; + } arg_val; +}; + +int set_arg_argv(const char * argv); +void set_arg_val(const char * name, ...); + +bool check_arg_bool(const char * name); +uint64_t check_arg_numeric(const char * name); +const char * check_arg_pathname(const char * name); + +typedef bool (*dd_seek_func)(void * handle, uint64_t offset); +typedef bool (*dd_read_func)(void * handle, uint8_t * buf, + uint64_t wanted, uint64_t * actual); +typedef bool (*dd_write_func)(void * handle, uint8_t * buf, + uint64_t wanted, uint64_t * actual); + +struct dd_stats_record +{ + struct + { + uint64_t fblocks; /* Full blocks. */ + uint64_t pblocks; /* Partial blocks. */ + uint64_t bytes; /* Total bytes read. */ + } in; + struct + { + uint64_t fblocks; /* Full blocks. */ + uint64_t pblocks; /* Partial blocks. */ + uint64_t bytes; /* Total bytes written. */ + } out; +}; + +extern struct dd_stats_record dd_stats; + +struct dd_iohandle +{ + dd_seek_func io_seek; + dd_read_func io_read; + dd_write_func io_write; + int io_flags; +}; + +#define DD_END_OF_FILE 0x10000000 + +#define DD_DIRECT_IO 0x00000001 +#define DD_SYNC_IO 0x00000002 +#define DD_WRITE 0x00000004 +#define DD_OPLOCK 0x00000008 + +struct smbcli_options; +struct event_context; + +struct dd_iohandle * dd_open_path(struct resolve_context *resolve_ctx, + struct event_context *ev, + const char * path, + const char **ports, + uint64_t io_size, int options, + struct smbcli_options *smb_options); +bool dd_fill_block(struct dd_iohandle * h, uint8_t * buf, + uint64_t * buf_size, uint64_t need_size, uint64_t block_size); +bool dd_flush_block(struct dd_iohandle * h, uint8_t * buf, + uint64_t * buf_size, uint64_t block_size); + +/* vim: set sw=8 sts=8 ts=8 tw=79 : */ |