Hi Ram, On Saturday 09 July 2011 17:41:58 Ramkumar Ramachandra wrote: > Save the replay_opts struct in .git/sequencer/opts using a simple "key > = value" format. Parse it and populate the options structure before > replaying. [...] > static void format_todo(struct strbuf *buf, struct commit_list *todo_list, > struct replay_opts *opts) > { > @@ -733,6 +759,102 @@ error: > die(_("Malformed instruction sheet: %s"), git_path(SEQ_TODO_FILE)); > } > > +static char *parse_opt_value(char *p, void *key, enum seq_opt_type type, > + parse_opt_cb *cb_function) { > + struct option opt; > + char *val, *cur, *end; > + > + if (!(val = strchr(p, '='))) > + goto error; > + if (!*(val + 1)) > + goto error; > + if (!(end = strchr(p, '\n'))) > + goto error; > + val += 2; It looks like you rely on all lines ending with \n and having a space after the '='. It may be a little bit too fragile. > + *end = '\0'; /* Remove trailing '\n' */ > + > + switch (type) { > + case SEQ_OPTION_BOOLEAN: > + if (!strncmp(val, "true", strlen("true"))) > + *(int *)key = 1; > + else if (!strncmp(val, "false", strlen("false"))) > + *(int *)key = 0; > + else > + goto error; > + break; > + case SEQ_OPTION_INTEGER: > + *(int *)key = strtol(val, NULL, 10); > + break; > + case SEQ_OPTION_STRING: > + *(char **)key = xstrdup(val); > + break; > + case SEQ_OPTION_CALLBACK: > + opt.value = (struct replay_opts **)key; > + while (val) { > + if ((cur = strchr(val, '|'))) { > + *(cur - 1) = '\0'; > + (*cb_function)(&opt, val, 0); > + val = cur + 2; > + } else { > + (*cb_function)(&opt, val, 0); > + break; > + } > + } > + break; > + default: > + die(_("program error")); > + } > + return end + 1; > +error: > + die(_("Malformed options sheet: %s"), git_path(SEQ_OPTS_FILE)); > +} Otherwise it looks good to me. Thanks, Christian. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html