From 679cd1627021daf96ddc4c1dd8f71a2067dbaa99 Mon Sep 17 00:00:00 2001 From: Aurélien Aptel Date: Tue, 16 Jul 2013 19:15:48 +0200 Subject: clitar.c: implement interactive command + respective test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Aurélien Aptel [ddiss@samba.org: split from test changes already upstream] Reviewed-by: David Disseldorp Reviewed-by: Andreas Schneider --- source3/client/clitar.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/source3/client/clitar.c b/source3/client/clitar.c index c27689429e..b3cfc741eb 100644 --- a/source3/client/clitar.c +++ b/source3/client/clitar.c @@ -909,6 +909,33 @@ static int tar_create(struct tar* t) return err; } +/** + * Return upper limit for the number of token in @str. + * + * The result is not exact, the actual number of token might be less + * than what is returned. + */ +static int max_token (const char *str) +{ + const char *s = str; + int nb = 0; + + if (!str) { + return 0; + } + + while (*s) { + if (isspace(*s)) { + nb++; + } + s++; + } + + nb++; + + return nb; +} + /** * cmd_tar - interactive command to start a tar backup/restoration * @@ -916,7 +943,41 @@ static int tar_create(struct tar* t) */ int cmd_tar(void) { - return 0; + TALLOC_CTX *ctx = talloc_tos(); + const extern char *cmd_ptr; + const char *flag; + const char **val; + char *buf; + int maxtok = max_token(cmd_ptr); + int i = 0; + int err = 0; + + if (!next_token_talloc(ctx, &cmd_ptr, &buf, NULL)) { + DBG(0, ("tar [IXFbganN] [options] [path list]\n")); + return 1; + } + + flag = buf; + val = talloc_array(ctx, const char*, maxtok); + + while (next_token_talloc(ctx, &cmd_ptr, &buf, NULL)) { + val[i++] = buf; + } + + if (!tar_parse_args(&tar_ctx, flag, val, i)) { + DBG(0, ("parse_args failed\n")); + err = 1; + goto out; + } + + if (tar_process(&tar_ctx)) { + DBG(0, ("tar_process failed\n")); + err = 1; + goto out; + } + + out: + return err; } static int tar_extract(struct tar *t) -- cgit