mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
convert: refactor code to clarify ownership of check_roundtrip_encoding
The `check_roundtrip_encoding` variable is tracked in a `const char *` even though it may contain allocated strings at times. The result is that those strings may be leaking because we never free them. Refactor the code to always store allocated strings in this variable. The default value is handled in `check_roundtrip()` now, which is the only user of the variable. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f9c1989674
commit
a6cb0cc610
4 changed files with 19 additions and 15 deletions
6
config.c
6
config.c
|
@ -1564,8 +1564,10 @@ static int git_default_core_config(const char *var, const char *value,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.checkroundtripencoding"))
|
if (!strcmp(var, "core.checkroundtripencoding")) {
|
||||||
return git_config_string(&check_roundtrip_encoding, var, value);
|
FREE_AND_NULL(check_roundtrip_encoding);
|
||||||
|
return git_config_string((const char **) &check_roundtrip_encoding, var, value);
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.notesref")) {
|
if (!strcmp(var, "core.notesref")) {
|
||||||
if (!value)
|
if (!value)
|
||||||
|
|
24
convert.c
24
convert.c
|
@ -345,30 +345,32 @@ static int check_roundtrip(const char *enc_name)
|
||||||
* space separated encodings (eg. "UTF-16, ASCII, CP1125").
|
* space separated encodings (eg. "UTF-16, ASCII, CP1125").
|
||||||
* Search for the given encoding in that string.
|
* Search for the given encoding in that string.
|
||||||
*/
|
*/
|
||||||
const char *found = strcasestr(check_roundtrip_encoding, enc_name);
|
const char *encoding = check_roundtrip_encoding ?
|
||||||
|
check_roundtrip_encoding : "SHIFT-JIS";
|
||||||
|
const char *found = strcasestr(encoding, enc_name);
|
||||||
const char *next;
|
const char *next;
|
||||||
int len;
|
int len;
|
||||||
if (!found)
|
if (!found)
|
||||||
return 0;
|
return 0;
|
||||||
next = found + strlen(enc_name);
|
next = found + strlen(enc_name);
|
||||||
len = strlen(check_roundtrip_encoding);
|
len = strlen(encoding);
|
||||||
return (found && (
|
return (found && (
|
||||||
/*
|
/*
|
||||||
* check that the found encoding is at the
|
* Check that the found encoding is at the beginning of
|
||||||
* beginning of check_roundtrip_encoding or
|
* encoding or that it is prefixed with a space or
|
||||||
* that it is prefixed with a space or comma
|
* comma.
|
||||||
*/
|
*/
|
||||||
found == check_roundtrip_encoding || (
|
found == encoding || (
|
||||||
(isspace(found[-1]) || found[-1] == ',')
|
(isspace(found[-1]) || found[-1] == ',')
|
||||||
)
|
)
|
||||||
) && (
|
) && (
|
||||||
/*
|
/*
|
||||||
* check that the found encoding is at the
|
* Check that the found encoding is at the end of
|
||||||
* end of check_roundtrip_encoding or
|
* encoding or that it is suffixed with a space
|
||||||
* that it is suffixed with a space or comma
|
* or comma.
|
||||||
*/
|
*/
|
||||||
next == check_roundtrip_encoding + len || (
|
next == encoding + len || (
|
||||||
next < check_roundtrip_encoding + len &&
|
next < encoding + len &&
|
||||||
(isspace(next[0]) || next[0] == ',')
|
(isspace(next[0]) || next[0] == ',')
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
|
@ -92,7 +92,7 @@ void convert_attrs(struct index_state *istate,
|
||||||
struct conv_attrs *ca, const char *path);
|
struct conv_attrs *ca, const char *path);
|
||||||
|
|
||||||
extern enum eol core_eol;
|
extern enum eol core_eol;
|
||||||
extern const char *check_roundtrip_encoding;
|
extern char *check_roundtrip_encoding;
|
||||||
const char *get_cached_convert_stats_ascii(struct index_state *istate,
|
const char *get_cached_convert_stats_ascii(struct index_state *istate,
|
||||||
const char *path);
|
const char *path);
|
||||||
const char *get_wt_convert_stats_ascii(const char *path);
|
const char *get_wt_convert_stats_ascii(const char *path);
|
||||||
|
|
|
@ -64,7 +64,7 @@ char *excludes_file;
|
||||||
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
|
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
|
||||||
enum eol core_eol = EOL_UNSET;
|
enum eol core_eol = EOL_UNSET;
|
||||||
int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN;
|
int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN;
|
||||||
const char *check_roundtrip_encoding = "SHIFT-JIS";
|
char *check_roundtrip_encoding;
|
||||||
enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
|
enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
|
||||||
enum rebase_setup_type autorebase = AUTOREBASE_NEVER;
|
enum rebase_setup_type autorebase = AUTOREBASE_NEVER;
|
||||||
enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
|
enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
|
||||||
|
|
Loading…
Reference in a new issue