Signed-off-by: Johannes Schindelin <Johannes.Schindelin@xxxxxx> --- This is extremely paranoic, I know. config.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config.c b/config.c index 05d4d8c..6765186 100644 --- a/config.c +++ b/config.c @@ -13,6 +13,7 @@ #define MAXNAME (256) static const char *contents = NULL; static int config_length = 0, config_offset = 0; static const char *config_file_name; +static time_t config_file_mtime = 0; static int config_linenr; static int get_next_char(void) { @@ -255,23 +256,26 @@ int git_default_config(const char *var, int git_config_from_file(config_fn_t fn, const char *filename) { int ret, in_fd; + struct stat st; config_offset = 0; + in_fd = open(filename, O_RDONLY); + fstat(in_fd, &st); + if (contents) { - if (!strcmp(config_file_name, filename)) + if (!strcmp(config_file_name, filename) + && config_file_mtime == st.st_mtime + && config_length == st.st_size) { + close(in_fd); return git_parse_file(fn); + } munmap((char*)contents, config_length); free((char*)config_file_name); } - in_fd = open(filename, O_RDONLY); - ret = -1; if (in_fd > 0) { - struct stat st; - - fstat(in_fd, &st); config_length = st.st_size; contents = mmap(NULL, config_length, PROT_READ, MAP_PRIVATE, in_fd, 0); -- 1.3.1.g5545a - : 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