Adds --inetd command line argument that makes server run in inetd mode. Signed-off-by: Alexey Nezhdanov <[EMAIL PROTECTED]> ---
diff --git a/daemon.c b/daemon.c --- a/daemon.c +++ b/daemon.c @@ -3,7 +3,7 @@ #include <sys/socket.h> #include <netinet/in.h> -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); } - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html