Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2006-01-05 14:43:34 +0300
committerJunio C Hamano <junkio@cox.net>2006-01-06 04:22:51 +0300
commit88fb958baa1066af23348c44a78b812be2344088 (patch)
treecf5d0eb59166f8cdac1d80c55365aff72030d28d
parentd9e08be9d5b632aed84d4ee870543babafe6614b (diff)
use result of open(2) to check for presence
Not that the stat against open race would matter much in this context, but that simplifies the code a bit. Also some diagnostics added (why the open failed) Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--config.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/config.c b/config.c
index 992e988407..8355224bb1 100644
--- a/config.c
+++ b/config.c
@@ -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);