[PATCH 05/16] index-info.c: identify empty input lines in read_index_info
- From
Victoria Dye via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jun 11, 2024, 18:24 UTC
- Message-ID
- <7e3bcc16e23c97d8a4efbb9e14b230ef9f44a1a7.1718130288.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1746.git.1718130288.gitgitgadget@gmail.com>
From: Victoria Dye <vdye@github.com>
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@github.com> --- 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