projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
include header to define uint32_t, necessary on Mac OS X
[git.git]
/
config.c
diff --git
a/config.c
b/config.c
index
95ec349
..
adb5ce4
100644
(file)
--- a/
config.c
+++ b/
config.c
@@
-60,6
+60,12
@@
static char *parse_value(void)
space = 1;
continue;
}
space = 1;
continue;
}
+ if (!quote) {
+ if (c == ';' || c == '#') {
+ comment = 1;
+ continue;
+ }
+ }
if (space) {
if (len)
value[len++] = ' ';
if (space) {
if (len)
value[len++] = ' ';
@@
-93,12
+99,6
@@
static char *parse_value(void)
quote = 1-quote;
continue;
}
quote = 1-quote;
continue;
}
- if (!quote) {
- if (c == ';' || c == '#') {
- comment = 1;
- continue;
- }
- }
value[len++] = c;
}
}
value[len++] = c;
}
}
@@
-227,8
+227,8
@@
int git_default_config(const char *var, const char *value)
return 0;
}
return 0;
}
- if (!strcmp(var, "core.
symrefsonly
")) {
-
only_use_sym
refs = git_config_bool(var, value);
+ if (!strcmp(var, "core.
prefersymlinkrefs
")) {
+
prefer_symlink_
refs = git_config_bool(var, value);
return 0;
}
return 0;
}
@@
-252,7
+252,7
@@
int git_default_config(const char *var, const char *value)
return 0;
}
return 0;
}
- /* Add other config variables here
.
. */
+ /* Add other config variables here
and to Documentation/config.txt
. */
return 0;
}
return 0;
}
@@
-335,8
+335,9
@@
static int store_aux(const char* key, const char* value)
store.offset[store.seen] = ftell(config_file);
store.state = KEY_SEEN;
store.seen++;
store.offset[store.seen] = ftell(config_file);
store.state = KEY_SEEN;
store.seen++;
- } else if(!strncmp(key, store.key, store.baselen))
- store.state = SECTION_SEEN;
+ } else if (strrchr(key, '.') - key == store.baselen &&
+ !strncmp(key, store.key, store.baselen))
+ store.state = SECTION_SEEN;
}
return 0;
}
}
return 0;
}
@@
-419,7
+420,8
@@
int git_config_set_multivar(const char* key, const char* value,
const char* value_regex, int multi_replace)
{
int i;
const char* value_regex, int multi_replace)
{
int i;
- int fd, in_fd;
+ int fd = -1, in_fd;
+ int ret;
char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock"));
const char* last_dot = strrchr(key, '.');
char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock"));
const char* last_dot = strrchr(key, '.');
@@
-429,9
+431,10
@@
int git_config_set_multivar(const char* key, const char* value,
* key name separated by a dot, we have to know where the dot is.
*/
* key name separated by a dot, we have to know where the dot is.
*/
- if (last_dot == NULL) {
+ if (last_dot == NULL) {
fprintf(stderr, "key does not contain a section: %s\n", key);
fprintf(stderr, "key does not contain a section: %s\n", key);
- return 2;
+ ret = 2;
+ goto out_free;
}
store.baselen = last_dot - key;
}
store.baselen = last_dot - key;
@@
-447,7
+450,8
@@
int git_config_set_multivar(const char* key, const char* value,
(i == store.baselen+1 && !isalpha(key[i])))) {
fprintf(stderr, "invalid key: %s\n", key);
free(store.key);
(i == store.baselen+1 && !isalpha(key[i])))) {
fprintf(stderr, "invalid key: %s\n", key);
free(store.key);
- return 1;
+ ret = 1;
+ goto out_free;
} else
store.key[i] = tolower(key[i]);
store.key[i] = 0;
} else
store.key[i] = tolower(key[i]);
store.key[i] = 0;
@@
-460,7
+464,8
@@
int git_config_set_multivar(const char* key, const char* value,
if (fd < 0) {
fprintf(stderr, "could not lock config file\n");
free(store.key);
if (fd < 0) {
fprintf(stderr, "could not lock config file\n");
free(store.key);
- return -1;
+ ret = -1;
+ goto out_free;
}
/*
}
/*
@@
-473,15
+478,13
@@
int git_config_set_multivar(const char* key, const char* value,
if ( ENOENT != errno ) {
error("opening %s: %s", config_filename,
strerror(errno));
if ( ENOENT != errno ) {
error("opening %s: %s", config_filename,
strerror(errno));
- close(fd);
- unlink(lock_file);
- return 3; /* same as "invalid config file" */
+ ret = 3; /* same as "invalid config file" */
+ goto out_free;
}
/* if nothing to unset, error out */
if (value == NULL) {
}
/* if nothing to unset, error out */
if (value == NULL) {
- close(fd);
- unlink(lock_file);
- return 5;
+ ret = 5;
+ goto out_free;
}
store.key = (char*)key;
}
store.key = (char*)key;
@@
-507,7
+510,8
@@
int git_config_set_multivar(const char* key, const char* value,
fprintf(stderr, "Invalid pattern: %s\n",
value_regex);
free(store.value_regex);
fprintf(stderr, "Invalid pattern: %s\n",
value_regex);
free(store.value_regex);
- return 6;
+ ret = 6;
+ goto out_free;
}
}
}
}
@@
-528,7
+532,8
@@
int git_config_set_multivar(const char* key, const char* value,
regfree(store.value_regex);
free(store.value_regex);
}
regfree(store.value_regex);
free(store.value_regex);
}
- return 3;
+ ret = 3;
+ goto out_free;
}
free(store.key);
}
free(store.key);
@@
-540,9
+545,8
@@
int git_config_set_multivar(const char* key, const char* value,
/* if nothing to unset, or too many matches, error out */
if ((store.seen == 0 && value == NULL) ||
(store.seen > 1 && multi_replace == 0)) {
/* if nothing to unset, or too many matches, error out */
if ((store.seen == 0 && value == NULL) ||
(store.seen > 1 && multi_replace == 0)) {
- close(fd);
- unlink(lock_file);
- return 5;
+ ret = 5;
+ goto out_free;
}
fstat(in_fd, &st);
}
fstat(in_fd, &st);
@@
-589,14
+593,24
@@
int git_config_set_multivar(const char* key, const char* value,
unlink(config_filename);
}
unlink(config_filename);
}
- close(fd);
-
if (rename(lock_file, config_filename) < 0) {
fprintf(stderr, "Could not rename the lock file?\n");
if (rename(lock_file, config_filename) < 0) {
fprintf(stderr, "Could not rename the lock file?\n");
- return 4;
+ ret = 4;
+ goto out_free;
}
}
- return 0;
+ ret = 0;
+
+out_free:
+ if (0 <= fd)
+ close(fd);
+ if (config_filename)
+ free(config_filename);
+ if (lock_file) {
+ unlink(lock_file);
+ free(lock_file);
+ }
+ return ret;
}
}