git_config_parse_key(): return baselen as size_t
As with the recent change to parse_config_key(), the best type to return a string length is a size_t, as it won't cause integer truncation for a gigantic key. And as with that change, this is mostly a clarity / hygiene issue for now, as our config parser would choke on such a large key anyway. There are a few ripple effects within the config code, as callers switch to using size_t. I also adjusted a few related variables that iterate over strings. The most unexpected change is that a call to strbuf_addf() had to switch to strbuf_add(). We can't use a size_t with "%.*s", because printf precisions must have type "int" (we could cast, of course, but that would miss the point of using size_t in the first place). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6c7e6963c1
commit
f011a9654d
17
config.c
17
config.c
@ -358,12 +358,13 @@ static inline int iskeychar(int c)
|
||||
*
|
||||
* store_key - pointer to char* which will hold a copy of the key with
|
||||
* lowercase section and variable name
|
||||
* baselen - pointer to int which will hold the length of the
|
||||
* baselen - pointer to size_t which will hold the length of the
|
||||
* section + subsection part, can be NULL
|
||||
*/
|
||||
static int git_config_parse_key_1(const char *key, char **store_key, int *baselen_, int quiet)
|
||||
static int git_config_parse_key_1(const char *key, char **store_key, size_t *baselen_, int quiet)
|
||||
{
|
||||
int i, dot, baselen;
|
||||
size_t i, baselen;
|
||||
int dot;
|
||||
const char *last_dot = strrchr(key, '.');
|
||||
|
||||
/*
|
||||
@ -425,7 +426,7 @@ out_free_ret_1:
|
||||
return -CONFIG_INVALID_KEY;
|
||||
}
|
||||
|
||||
int git_config_parse_key(const char *key, char **store_key, int *baselen)
|
||||
int git_config_parse_key(const char *key, char **store_key, size_t *baselen)
|
||||
{
|
||||
return git_config_parse_key_1(key, store_key, baselen, 0);
|
||||
}
|
||||
@ -2383,7 +2384,7 @@ void git_die_config(const char *key, const char *err, ...)
|
||||
*/
|
||||
|
||||
struct config_store_data {
|
||||
int baselen;
|
||||
size_t baselen;
|
||||
char *key;
|
||||
int do_not_match;
|
||||
regex_t *value_regex;
|
||||
@ -2509,7 +2510,7 @@ static struct strbuf store_create_section(const char *key,
|
||||
const struct config_store_data *store)
|
||||
{
|
||||
const char *dot;
|
||||
int i;
|
||||
size_t i;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
dot = memchr(key, '.', store->baselen);
|
||||
@ -2522,7 +2523,9 @@ static struct strbuf store_create_section(const char *key,
|
||||
}
|
||||
strbuf_addstr(&sb, "\"]\n");
|
||||
} else {
|
||||
strbuf_addf(&sb, "[%.*s]\n", store->baselen, key);
|
||||
strbuf_addch(&sb, '[');
|
||||
strbuf_add(&sb, key, store->baselen);
|
||||
strbuf_addstr(&sb, "]\n");
|
||||
}
|
||||
|
||||
return sb;
|
||||
|
2
config.h
2
config.h
@ -254,7 +254,7 @@ int git_config_set_gently(const char *, const char *);
|
||||
*/
|
||||
void git_config_set(const char *, const char *);
|
||||
|
||||
int git_config_parse_key(const char *, char **, int *);
|
||||
int git_config_parse_key(const char *, char **, size_t *);
|
||||
int git_config_key_is_valid(const char *key);
|
||||
int git_config_set_multivar_gently(const char *, const char *, const char *, int);
|
||||
void git_config_set_multivar(const char *, const char *, const char *, int);
|
||||
|
Loading…
Reference in New Issue
Block a user