use skip_prefix to avoid magic numbers

It's a common idiom to match a prefix and then skip past it
with a magic number, like:

  if (starts_with(foo, "bar"))
	  foo += 3;

This is easy to get wrong, since you have to count the
prefix string yourself, and there's no compiler check if the
string changes.  We can use skip_prefix to avoid the magic
numbers here.

Note that some of these conversions could be much shorter.
For example:

  if (starts_with(arg, "--foo=")) {
	  bar = arg + 6;
	  continue;
  }

could become:

  if (skip_prefix(arg, "--foo=", &bar))
	  continue;

However, I have left it as:

  if (skip_prefix(arg, "--foo=", &v)) {
	  bar = v;
	  continue;
  }

to visually match nearby cases which need to actually
process the string. Like:

  if (skip_prefix(arg, "--foo=", &v)) {
	  bar = atoi(v);
	  continue;
  }

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2014-06-18 15:47:50 -04:00
committed by Junio C Hamano
parent 21a2d4ada5
commit ae021d8791
11 changed files with 149 additions and 131 deletions

View File

@ -235,8 +235,10 @@ static int service_enabled;
static int git_daemon_config(const char *var, const char *value, void *cb)
{
if (starts_with(var, "daemon.") &&
!strcmp(var + 7, service_looking_at->config_name)) {
const char *service;
if (skip_prefix(var, "daemon.", &service) &&
!strcmp(service, service_looking_at->config_name)) {
service_enabled = git_config_bool(var, value);
return 0;
}
@ -1133,16 +1135,17 @@ int main(int argc, char **argv)
for (i = 1; i < argc; i++) {
char *arg = argv[i];
const char *v;
if (starts_with(arg, "--listen=")) {
string_list_append(&listen_addr, xstrdup_tolower(arg + 9));
if (skip_prefix(arg, "--listen=", &v)) {
string_list_append(&listen_addr, xstrdup_tolower(v));
continue;
}
if (starts_with(arg, "--port=")) {
if (skip_prefix(arg, "--port=", &v)) {
char *end;
unsigned long n;
n = strtoul(arg+7, &end, 0);
if (arg[7] && !*end) {
n = strtoul(v, &end, 0);
if (*v && !*end) {
listen_port = n;
continue;
}
@ -1168,20 +1171,20 @@ int main(int argc, char **argv)
export_all_trees = 1;
continue;
}
if (starts_with(arg, "--access-hook=")) {
access_hook = arg + 14;
if (skip_prefix(arg, "--access-hook=", &v)) {
access_hook = v;
continue;
}
if (starts_with(arg, "--timeout=")) {
timeout = atoi(arg+10);
if (skip_prefix(arg, "--timeout=", &v)) {
timeout = atoi(v);
continue;
}
if (starts_with(arg, "--init-timeout=")) {
init_timeout = atoi(arg+15);
if (skip_prefix(arg, "--init-timeout=", &v)) {
init_timeout = atoi(v);
continue;
}
if (starts_with(arg, "--max-connections=")) {
max_connections = atoi(arg+18);
if (skip_prefix(arg, "--max-connections=", &v)) {
max_connections = atoi(v);
if (max_connections < 0)
max_connections = 0; /* unlimited */
continue;
@ -1190,16 +1193,16 @@ int main(int argc, char **argv)
strict_paths = 1;
continue;
}
if (starts_with(arg, "--base-path=")) {
base_path = arg+12;
if (skip_prefix(arg, "--base-path=", &v)) {
base_path = v;
continue;
}
if (!strcmp(arg, "--base-path-relaxed")) {
base_path_relaxed = 1;
continue;
}
if (starts_with(arg, "--interpolated-path=")) {
interpolated_path = arg+20;
if (skip_prefix(arg, "--interpolated-path=", &v)) {
interpolated_path = v;
continue;
}
if (!strcmp(arg, "--reuseaddr")) {
@ -1210,12 +1213,12 @@ int main(int argc, char **argv)
user_path = "";
continue;
}
if (starts_with(arg, "--user-path=")) {
user_path = arg + 12;
if (skip_prefix(arg, "--user-path=", &v)) {
user_path = v;
continue;
}
if (starts_with(arg, "--pid-file=")) {
pid_file = arg + 11;
if (skip_prefix(arg, "--pid-file=", &v)) {
pid_file = v;
continue;
}
if (!strcmp(arg, "--detach")) {
@ -1223,28 +1226,28 @@ int main(int argc, char **argv)
log_syslog = 1;
continue;
}
if (starts_with(arg, "--user=")) {
user_name = arg + 7;
if (skip_prefix(arg, "--user=", &v)) {
user_name = v;
continue;
}
if (starts_with(arg, "--group=")) {
group_name = arg + 8;
if (skip_prefix(arg, "--group=", &v)) {
group_name = v;
continue;
}
if (starts_with(arg, "--enable=")) {
enable_service(arg + 9, 1);
if (skip_prefix(arg, "--enable=", &v)) {
enable_service(v, 1);
continue;
}
if (starts_with(arg, "--disable=")) {
enable_service(arg + 10, 0);
if (skip_prefix(arg, "--disable=", &v)) {
enable_service(v, 0);
continue;
}
if (starts_with(arg, "--allow-override=")) {
make_service_overridable(arg + 17, 1);
if (skip_prefix(arg, "--allow-override=", &v)) {
make_service_overridable(v, 1);
continue;
}
if (starts_with(arg, "--forbid-override=")) {
make_service_overridable(arg + 18, 0);
if (skip_prefix(arg, "--forbid-override=", &v)) {
make_service_overridable(v, 0);
continue;
}
if (!strcmp(arg, "--informative-errors")) {