From: Alexey Nezhdanov Date: Thu, 14 Jul 2005 07:31:33 GMT Subject: [PATCH] add inetd mode to git daemon Message-ID: <20050714075726.9004.qmail@penza-gsm.ru> Adds --inetd command line argument that makes server run in inetd mode. Signed-off-by: Alexey Nezhdanov --- diff --git a/daemon.c b/daemon.c --- a/daemon.c +++ b/daemon.c @@ -3,7 +3,7 @@ #include #include -static const char daemon_usage[] = "git-daemon [--port=n]"; +static const char daemon_usage[] = "git-daemon [--inetd | --port=n]"; static int upload(char *dir, int dirlen) { @@ -37,11 +37,21 @@ static int execute(char *line, int len) return -1; } -static void handle(int incoming, struct sockaddr_in *addr, int addrlen) +static int handle_stdio() { static char line[1000]; int len; + len = packet_read_line(0, line, sizeof(line)); + + if (len && line[len-1] == '\n') + line[--len] = 0; + + return execute(line, len); +} + +static void handle(int incoming, struct sockaddr_in *addr, int addrlen) +{ if (fork()) { close(incoming); return; @@ -50,12 +60,8 @@ static void handle(int incoming, struct dup2(incoming, 0); dup2(incoming, 1); close(incoming); - len = packet_read_line(0, line, sizeof(line)); - - if (len && line[len-1] == '\n') - line[--len] = 0; - exit(execute(line, len)); + exit(handle_stdio()); } static int serve(int port) @@ -97,6 +103,7 @@ int main(int argc, char **argv) { int port = DEFAULT_GIT_PORT; int i; + int inetd_mode = 0; for (i = 1; i < argc; i++) { char *arg = argv[i]; @@ -110,8 +117,17 @@ int main(int argc, char **argv) continue; } } + + if (!strncmp(arg, "--inetd", 7)) { + inetd_mode = 1; + continue; + } + usage(daemon_usage); } - return serve(port); + if (inetd_mode) + return handle_stdio(); + else + return serve(port); }