From: Victoria Dye <vdye@xxxxxxxxxx> Update 'read_index_info()' to return INDEX_INFO_EMPTY_LINE (value 1), rather than the default error code (value -1) when the function encounters an empty line in stdin. This grants the caller the flexibility to handle such scenarios differently than a typical error. In the case of 'update-index', we'll still exit with a "malformed input line" error. However, when 'read_index_info()' is used to process the input to 'mktree' in a later patch, the empty line return value will signal a new tree in --batch mode. Signed-off-by: Victoria Dye <vdye@xxxxxxxxxx> --- builtin/update-index.c | 4 +++- index-info.c | 5 +++++ index-info.h | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/builtin/update-index.c b/builtin/update-index.c index 77df380cb54..b1b334807f8 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -788,7 +788,9 @@ static enum parse_opt_result stdin_cacheinfo_callback( return error("option '%s' must be the last argument", opt->long_name); allow_add = allow_replace = allow_remove = 1; ret = read_index_info(*nul_term_line, apply_index_info, NULL); - if (ret) + if (ret == INDEX_INFO_EMPTY_LINE) + return error("malformed input line ''"); + else if (ret < 0) return -1; return 0; diff --git a/index-info.c b/index-info.c index 0b68e34c361..735cbf1f476 100644 --- a/index-info.c +++ b/index-info.c @@ -22,6 +22,11 @@ int read_index_info(int nul_term_line, each_index_info_fn fn, void *cbdata) unsigned long ul; int stage; + if (!buf.len) { + ret = INDEX_INFO_EMPTY_LINE; + break; + } + /* This reads lines formatted in one of three formats: * * (1) mode SP sha1 TAB path diff --git a/index-info.h b/index-info.h index d650498325a..1884972021d 100644 --- a/index-info.h +++ b/index-info.h @@ -5,6 +5,8 @@ typedef int (*each_index_info_fn)(unsigned int, struct object_id *, int, const char *, void *); +#define INDEX_INFO_EMPTY_LINE 1 + /* Iterate over parsed index info from stdin */ int read_index_info(int nul_term_line, each_index_info_fn fn, void *cbdata); -- gitgitgadget