On Wednesday 18 September 2013 20:22:41 Jozsef Kadlecsik wrote: > On Tue, 17 Sep 2013, Oliver wrote: <snip> > > - newargv[newargc++] = ptr; > > + newargv[newargc] = calloc(strlen(ptr) + 1, sizeof(*ptr)); > > + ipset_strlcpy(newargv[newargc++], ptr, strlen(ptr) + 1); > > > > while ((ptr = strtok(NULL, " \t\r\n")) != NULL) { > > > > - if ((newargc + 1) < (int)(sizeof(newargv)/sizeof(char *))) > > - newargv[newargc++] = ptr; > > - else { > > + if ((newargc + 1) < (int)(sizeof(newargv)/sizeof(char *))) { > > + tmp = newargv[newargc] = calloc(strlen(ptr) + 1, > > + sizeof(*ptr)); > > + if(*ptr == '"') { > > + ipset_strlcpy(tmp, ptr + 1, (strlen(ptr) + 1) * > > + sizeof(*ptr)); > > + ipset_strlcat(tmp, " ", (strlen(ptr) + 1) * > > + sizeof(*ptr)); > > + while((ptr = strtok(NULL, "\"")) != NULL) { > > + if(*ptr == '\n' || *ptr == '\r') > > + continue; > > + tmp = realloc(tmp, (strlen(tmp) + > > + strlen(ptr) + 1) * > > + sizeof(*ptr)); > > + ipset_strlcat(tmp, ptr, (strlen(tmp) + > > + strlen(ptr) + 1) * > > + sizeof(*ptr)); > > + } > > Why is there the inside while loop? We look for a single closing quote. > Also, I'd better like to see an error reported if the closing quote is > missing instead of silently accepting it. So, I've come to the conclusion that is is all horribly ugly and strtok is more of a hinderance than a help here, so... I've redone it in a very similar vein to that of the iptables_restore code. Kind Regards, Oliver -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html