Merge branch 'kb/config-unmap-before-renaming'
authorJunio C Hamano <gitster@pobox.com>
Mon, 13 Jul 2015 21:00:27 +0000 (14:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Jul 2015 21:00:27 +0000 (14:00 -0700)
"git config" failed to update the configuration file when the
underlying filesystem is incapable of renaming a file that is still
open.

* kb/config-unmap-before-renaming:
config.c: fix writing config files on Windows network shares

1  2 
config.c
diff --combined config.c
index 29fa0121d583d3a77fcc2e8319cc484c317dcca3,69824ebddbdf46660fa6f1ef481add949820d52c..9fd275f2c2a46a0f8f5a78db49ba2c6f5635f32f
+++ b/config.c
@@@ -50,7 -50,7 +50,7 @@@ static struct config_set the_config_set
  
  static int config_file_fgetc(struct config_source *conf)
  {
 -      return fgetc(conf->u.file);
 +      return getc_unlocked(conf->u.file);
  }
  
  static int config_file_ungetc(int c, struct config_source *conf)
@@@ -1088,9 -1088,7 +1088,9 @@@ int git_config_from_file(config_fn_t fn
  
        f = fopen(filename, "r");
        if (f) {
 +              flockfile(f);
                ret = do_config_from_file(fn, filename, filename, f, data);
 +              funlockfile(f);
                fclose(f);
        }
        return ret;
@@@ -2118,6 -2116,9 +2118,9 @@@ int git_config_set_multivar_in_file(con
                                          contents_sz - copy_begin) <
                            contents_sz - copy_begin)
                                goto write_err_out;
+               munmap(contents, contents_sz);
+               contents = NULL;
        }
  
        if (commit_lock_file(lock) < 0) {