mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
clitar: get tar context handle via helper function
Add and use tar_get_ctx() to get the tarmode context handle in client.c, rather than declaring an extern. Also, add checks for NULL context pointer arguments. Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
14c6e9b6b8
commit
8dc6f0fb39
@ -5318,7 +5318,7 @@ static int do_host_query(const char *query_host)
|
||||
|
||||
static int do_tar_op(const char *base_directory)
|
||||
{
|
||||
extern struct tar tar_ctx;
|
||||
struct tar *tar_ctx = tar_get_ctx();
|
||||
int ret = 0;
|
||||
|
||||
/* do we already have a connection? */
|
||||
@ -5345,7 +5345,7 @@ static int do_tar_op(const char *base_directory)
|
||||
}
|
||||
}
|
||||
|
||||
ret = tar_process(&tar_ctx);
|
||||
ret = tar_process(tar_ctx);
|
||||
|
||||
out_cli:
|
||||
cli_shutdown(cli);
|
||||
@ -5393,7 +5393,7 @@ int main(int argc,char *argv[])
|
||||
int rc = 0;
|
||||
bool tar_opt = false;
|
||||
bool service_opt = false;
|
||||
extern struct tar tar_ctx;
|
||||
struct tar *tar_ctx = tar_get_ctx();
|
||||
|
||||
struct poptOption long_options[] = {
|
||||
POPT_AUTOHELP
|
||||
@ -5517,7 +5517,7 @@ int main(int argc,char *argv[])
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
if (tar_parse_args(&tar_ctx, poptGetOptArg(pc),
|
||||
if (tar_parse_args(tar_ctx, poptGetOptArg(pc),
|
||||
const_argv + i, argc - i)) {
|
||||
poptPrintUsage(pc, stderr, 0);
|
||||
exit(1);
|
||||
@ -5611,7 +5611,7 @@ int main(int argc,char *argv[])
|
||||
if(new_name_resolve_order)
|
||||
lp_set_cmdline("name resolve order", new_name_resolve_order);
|
||||
|
||||
if (!tar_to_process(&tar_ctx) && !query_host && !service && !message) {
|
||||
if (!tar_to_process(tar_ctx) && !query_host && !service && !message) {
|
||||
poptPrintUsage(pc, stderr, 0);
|
||||
exit(1);
|
||||
}
|
||||
@ -5626,7 +5626,7 @@ int main(int argc,char *argv[])
|
||||
|
||||
max_protocol = lp_client_max_protocol();
|
||||
|
||||
if (tar_to_process(&tar_ctx)) {
|
||||
if (tar_to_process(tar_ctx)) {
|
||||
if (cmdstr)
|
||||
process_command_string(cmdstr);
|
||||
rc = do_tar_op(base_directory);
|
||||
|
@ -24,8 +24,8 @@
|
||||
* the context of the backup process.
|
||||
*
|
||||
* The current tar context can be accessed via the global variable
|
||||
* `tar_ctx`. It's not static but you should avoid accessing it
|
||||
* directly.
|
||||
* `tar_ctx`. It's publicly exported as an opaque handle via
|
||||
* tar_get_ctx().
|
||||
*
|
||||
* A tar context is first configured through tar_parse_args() which
|
||||
* can be called from either the CLI (in client.c) or the interactive
|
||||
@ -232,6 +232,13 @@ static int max_token (const char *str);
|
||||
static bool is_subpath(const char *sub, const char *full);
|
||||
static int set_remote_attr(const char *filename, uint16 new_attr, int mode);
|
||||
|
||||
/**
|
||||
* tar_get_ctx - retrieve global tar context handle
|
||||
*/
|
||||
struct tar *tar_get_ctx()
|
||||
{
|
||||
return &tar_ctx;
|
||||
}
|
||||
|
||||
/**
|
||||
* cmd_block - interactive command to change tar blocksize
|
||||
@ -475,12 +482,17 @@ int cmd_setmode(void)
|
||||
int tar_parse_args(struct tar* t, const char *flag,
|
||||
const char **val, int valsize)
|
||||
{
|
||||
TALLOC_CTX *ctx = tar_reset_mem_context(t);
|
||||
TALLOC_CTX *ctx;
|
||||
bool list = false;
|
||||
|
||||
/* index of next value to use */
|
||||
int ival = 0;
|
||||
|
||||
if (t == NULL) {
|
||||
DBG(0, ("Invalid tar context\n"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
ctx = tar_reset_mem_context(t);
|
||||
/*
|
||||
* Reset back some options - could be from interactive version
|
||||
* all other modes are left as they are
|
||||
@ -659,6 +671,11 @@ int tar_process(struct tar *t)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (t == NULL) {
|
||||
DBG(0, ("Invalid tar context\n"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch(t->mode.operation) {
|
||||
case TAR_EXTRACT:
|
||||
rc = tar_extract(t);
|
||||
@ -1353,6 +1370,10 @@ static bool tar_create_skip_path(struct tar *t,
|
||||
*/
|
||||
bool tar_to_process (struct tar *t)
|
||||
{
|
||||
if (t == NULL) {
|
||||
DBG(0, ("Invalid tar context\n"));
|
||||
return false;
|
||||
}
|
||||
return t->to_process;
|
||||
}
|
||||
|
||||
@ -1683,13 +1704,6 @@ static char *path_base_name (const char *path)
|
||||
|
||||
#define NOT_IMPLEMENTED DEBUG(0, ("tar mode not compiled. build with --with-libarchive\n"))
|
||||
|
||||
struct tar
|
||||
{
|
||||
int dummy;
|
||||
};
|
||||
|
||||
struct tar tar_ctx;
|
||||
|
||||
int cmd_block(void)
|
||||
{
|
||||
NOT_IMPLEMENTED;
|
||||
@ -1732,4 +1746,9 @@ bool tar_to_process(struct tar *tar)
|
||||
return false;
|
||||
}
|
||||
|
||||
struct tar *tar_get_ctx()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -29,5 +29,6 @@ int cmd_tar(void);
|
||||
int tar_process(struct tar* tar);
|
||||
int tar_parse_args(struct tar *tar, const char *flag, const char **val, int valsize);
|
||||
bool tar_to_process(struct tar *tar);
|
||||
struct tar *tar_get_ctx(void);
|
||||
|
||||
#endif /* _CLITAR_PROTO_H_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user