From de7fd585b11413113304334dd75ba6a207ec69eb Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 4 Dec 2007 16:56:18 -0800 Subject: The usual !pstring... Jeremy. (This used to be commit b676262a781363e7be49b21817668a53cca75c2d) --- source3/torture/vfstest.c | 80 +++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 44 deletions(-) (limited to 'source3/torture/vfstest.c') diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index daecf3c2d1d..5f673be6dfe 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -89,20 +89,20 @@ static char **completion_fn(const char *text, int start, int end) return matches; } -static char* next_command(char** cmdstr) +static char *next_command(TALLOC_CTX *ctx, char **cmdstr) { - static pstring command; - char *p; - + char *command; + char *p; + if (!cmdstr || !(*cmdstr)) return NULL; - + p = strchr_m(*cmdstr, ';'); if (p) *p = '\0'; - pstrcpy(command, *cmdstr); + command = talloc_strdup(ctx, *cmdstr); *cmdstr = p; - + return command; } @@ -266,24 +266,22 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c const char *p = cmd; char **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - pstring buf; - TALLOC_CTX *mem_ctx = NULL; + char *buf; + TALLOC_CTX *mem_ctx = talloc_stackframe(); int argc = 0, i; /* Count number of arguments first time through the loop then allocate memory and strdup them. */ again: - while(next_token(&p, buf, " ", sizeof(buf))) { + while(next_token_talloc(mem_ctx, &p, &buf, " ")) { if (argv) { argv[argc] = SMB_STRDUP(buf); } - argc++; } - - if (!argv) { + if (!argv) { /* Create argument list */ argv = SMB_MALLOC_ARRAY(char *, argc); @@ -294,44 +292,35 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c result = NT_STATUS_NO_MEMORY; goto done; } - + p = cmd; argc = 0; - + goto again; } /* Call the function */ if (cmd_entry->fn) { - - if (mem_ctx == NULL) { - /* Create mem_ctx */ - if (!(mem_ctx = talloc_init("do_cmd"))) { - DEBUG(0, ("talloc_init() failed\n")); - goto done; - } - } - /* Run command */ result = cmd_entry->fn(vfs, mem_ctx, argc, (const char **)argv); - } else { fprintf (stderr, "Invalid command\n"); goto done; } done: - + /* Cleanup */ if (argv) { for (i = 0; i < argc; i++) SAFE_FREE(argv[i]); - + SAFE_FREE(argv); } - + + TALLOC_FREE(mem_ctx); return result; } @@ -340,19 +329,21 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd) { struct cmd_list *temp_list; bool found = False; - pstring buf; + char *buf; const char *p = cmd; NTSTATUS result = NT_STATUS_OK; + TALLOC_CTX *mem_ctx = talloc_stackframe(); int len = 0; if (cmd[strlen(cmd) - 1] == '\n') cmd[strlen(cmd) - 1] = '\0'; - if (!next_token(&p, buf, " ", sizeof(buf))) { + if (!next_token_talloc(mem_ctx, &p, &buf, " ")) { + TALLOC_FREE(mem_ctx); return NT_STATUS_OK; } - /* strip the trainly \n if it exsists */ + /* Strip the trailing \n if it exists */ len = strlen(buf); if (buf[len-1] == '\n') buf[len-1] = '\0'; @@ -376,6 +367,7 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd) done: if (!found && buf[0]) { printf("command not found: %s\n", buf); + TALLOC_FREE(mem_ctx); return NT_STATUS_OK; } @@ -383,6 +375,7 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd) printf("result was %s\n", nt_errstr(result)); } + TALLOC_FREE(mem_ctx); return result; } @@ -437,13 +430,12 @@ void reload_printers(void) bool reload_services(bool test) { bool ret; - + if (lp_loaded()) { - pstring fname; - pstrcpy(fname,lp_configfile()); + const char *fname = lp_configfile(); if (file_exist(fname, NULL) && !strcsequal(fname, dyn_CONFIGFILE)) { - pstrcpy(dyn_CONFIGFILE, fname); + strlcpy(dyn_CONFIGFILE, fname, sizeof(dyn_CONFIGFILE)); test = False; } } @@ -454,7 +446,7 @@ bool reload_services(bool test) return(True); lp_killunused(conn_snum_used); - + ret = lp_load(dyn_CONFIGFILE, False, False, True, True); /* perhaps the config filename is now set */ @@ -512,6 +504,7 @@ int main(int argc, char *argv[]) static struct vfs_state vfs; int i; static char *filename = NULL; + TALLOC_CTX *frame = talloc_stackframe(); /* make sure the vars that get altered (4th field) are in a fixed location or certain compilers complain */ @@ -574,23 +567,21 @@ int main(int argc, char *argv[]) if (cmdstr && cmdstr[0]) { char *cmd; char *p = cmdstr; - - while((cmd=next_command(&p)) != NULL) { + + while((cmd=next_command(frame, &p)) != NULL) { process_cmd(&vfs, cmd); } - + + TALLOC_FREE(cmd); return 0; } /* Loop around accepting commands */ while(1) { - pstring prompt; char *line; - slprintf(prompt, sizeof(prompt) - 1, "vfstest $> "); - - line = smb_readline(prompt, NULL, completion_fn); + line = smb_readline("vfstest $> ", NULL, completion_fn); if (line == NULL) break; @@ -598,7 +589,8 @@ int main(int argc, char *argv[]) if (line[0] != '\n') process_cmd(&vfs, line); } - + conn_free(vfs.conn); + TALLOC_FREE(frame); return 0; } -- cgit v1.2.1