diff options
author | Junio C Hamano <junkio@cox.net> | 2006-01-05 20:54:42 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-01-05 20:54:42 -0800 |
commit | 5df466c507ee2dd81c2e9002c3fedf3536cde0dc (patch) | |
tree | 92fff315690007bbbdaa9116570a8a49b01f5420 /config.c | |
parent | 58e3fb40f7ca1c28f9105c15166884f80bb22e55 (diff) | |
parent | 92e802c6ccb96d1b5e8561b0a136d43d82253293 (diff) | |
download | git-5df466c507ee2dd81c2e9002c3fedf3536cde0dc.tar.gz git-5df466c507ee2dd81c2e9002c3fedf3536cde0dc.tar.xz |
Merge fixes up to GIT 1.0.7
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -409,8 +409,7 @@ int git_config_set_multivar(const char* key, const char* value, const char* value_regex, int multi_replace) { int i; - struct stat st; - int fd; + int fd, in_fd; char* config_filename = strdup(git_path("config")); char* lock_file = strdup(git_path("config.lock")); const char* last_dot = strrchr(key, '.'); @@ -457,9 +456,17 @@ int git_config_set_multivar(const char* key, const char* value, /* * If .git/config does not exist yet, write a minimal version. */ - if (stat(config_filename, &st)) { + in_fd = open(config_filename, O_RDONLY); + if ( in_fd < 0 ) { free(store.key); + if ( ENOENT != errno ) { + error("opening %s: %s", config_filename, + strerror(errno)); + close(fd); + unlink(lock_file); + return 3; /* same as "invalid config file" */ + } /* if nothing to unset, error out */ if (value == NULL) { close(fd); @@ -471,7 +478,7 @@ int git_config_set_multivar(const char* key, const char* value, store_write_section(fd, key); store_write_pair(fd, key, value); } else{ - int in_fd; + struct stat st; char* contents; int i, copy_begin, copy_end, new_line = 0; @@ -528,7 +535,7 @@ int git_config_set_multivar(const char* key, const char* value, return 5; } - in_fd = open(config_filename, O_RDONLY, 0666); + fstat(in_fd, &st); contents = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, in_fd, 0); close(in_fd); |