From 3cb8dc7cd5dea66fdef86df639ac68f2bd69c239 Mon Sep 17 00:00:00 2001 From: Yaroslav Tykhiy Date: Mon, 30 Apr 2007 13:21:43 +0000 Subject: [PATCH] Fix a typo: argv -> argvp Rationale: We are interested in the current (last) element of the argv array there, not in its first element. The if construct is there because we want to avoid adding empty (zero-length) arguments to argv, so we just don't advance argvp if the current argument is empty, and it gets overwritten at the next iteration. Note that strsep(3) doesn't treat consecutive delim characters as a single separator, it returns empty fields between such characters, and it's up to the caller to handle them this or that way. Also add a comment that the argv array ends up null-terminated in any case (it's due to the design of the for loop) as an answer to a possible question why the whole argv isn't zero-filled. Submitted by: yongari Tested by: yongari MFC after: 3 days --- sbin/mdmfs/mdmfs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sbin/mdmfs/mdmfs.c b/sbin/mdmfs/mdmfs.c index acc6e00f208..59e194eca15 100644 --- a/sbin/mdmfs/mdmfs.c +++ b/sbin/mdmfs/mdmfs.c @@ -583,12 +583,13 @@ run(int *ofd, const char *cmdline, ...) argv = (char **)malloc(sizeof(*argv) * (argc + 1)); assert(argv != NULL); for (p = cmd, argvp = argv; (*argvp = strsep(&p, " ")) != NULL;) - if (**argv != '\0') + if (**argvp != '\0') if (++argvp >= &argv[argc]) { *argvp = NULL; break; } assert(*argv); + /* The argv array ends up NULL-terminated here. */ /* Make sure the above loop works as expected. */ if (debug) {