diff -ruw source/builtin/log.c source-new/builtin/log.c --- source/builtin/log.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/builtin/log.c 2018-12-26 18:36:28.141445392 -0700 @@ -308,6 +308,7 @@ static void setup_early_output(struct rev_info *rev) { +#if !defined(__redox__) struct sigaction sa; /* @@ -333,6 +334,7 @@ early_output_timer.it_value.tv_sec = 0; early_output_timer.it_value.tv_usec = 100000; setitimer(ITIMER_REAL, &early_output_timer, NULL); +#endif } static void finish_early_output(struct rev_info *rev) diff -ruw source/common-main.c source-new/common-main.c --- source/common-main.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/common-main.c 2018-12-26 18:40:38.447229228 -0700 @@ -15,12 +15,14 @@ */ static void restore_sigpipe_to_default(void) { +#if !defined(__redox__) sigset_t unblock; sigemptyset(&unblock); sigaddset(&unblock, SIGPIPE); sigprocmask(SIG_UNBLOCK, &unblock, NULL); signal(SIGPIPE, SIG_DFL); +#endif } int main(int argc, const char **argv) diff -ruw source/compat/hstrerror.c source-new/compat/hstrerror.c --- source/compat/hstrerror.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/compat/hstrerror.c 2018-12-26 18:37:12.495372666 -0700 @@ -5,6 +5,7 @@ const char *githstrerror(int err) { static char buffer[48]; +#if !defined(__redox__) switch (err) { case HOST_NOT_FOUND: @@ -16,6 +17,7 @@ case TRY_AGAIN: return "Non-authoritative \"host not found\", or SERVERFAIL"; } +#endif snprintf(buffer, sizeof(buffer), "Name resolution error %d", err); return buffer; } diff -ruw source/compat/terminal.c source-new/compat/terminal.c --- source/compat/terminal.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/compat/terminal.c 2018-12-26 18:39:47.177777683 -0700 @@ -137,6 +137,18 @@ return buf.buf; } +#elif defined(__redox__) + +ssize_t __getline(char **lptr, size_t *n, FILE *fp); + +char *git_terminal_prompt(const char *prompt, int echo) +{ + char *line = NULL; + size_t n = 0; + __getline(&line, &n, stdin); + return line; // XXX leak +} + #else char *git_terminal_prompt(const char *prompt, int echo) diff -ruw source/connect.c source-new/connect.c --- source/connect.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/connect.c 2018-12-26 18:56:40.601235949 -0700 @@ -450,7 +450,7 @@ he = gethostbyname(host); if (!he) - die("Unable to look up %s (%s)", host, hstrerror(h_errno)); + die("Unable to look up %s (%s)", host, strerror(errno)); nport = strtoul(port, &ep, 10); if ( ep == port || *ep ) { /* Not numeric */ diff -ruw source/daemon.c source-new/daemon.c --- source/daemon.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/daemon.c 2018-12-26 19:15:52.002437841 -0700 @@ -71,13 +71,21 @@ return hi->ip_address.buf; } +#if defined(__redox__) +#define LOG_ERR 0 +#define LOG_INFO 1 +#endif + static void logreport(int priority, const char *err, va_list params) { +#if !defined(__redox__) if (log_syslog) { char buf[1024]; vsnprintf(buf, sizeof(buf), err, params); syslog(priority, "%s", buf); - } else { + } else +#endif + { /* * Since stderr is set to buffered mode, the * logging of different processes will not overlap @@ -888,8 +896,12 @@ if (!reuseaddr) return 0; +#if defined(__redox__) + return 0; +#else return setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); +#endif } struct socketlist { @@ -1174,11 +1186,7 @@ if (!group_name) c.gid = c.pass->pw_gid; else { - struct group *group = getgrnam(group_name); - if (!group) die("group not found - %s", group_name); - - c.gid = group->gr_gid; } return &c; @@ -1348,10 +1356,12 @@ usage(daemon_usage); } +#if !defined(__redox__) if (log_syslog) { openlog("git-daemon", LOG_PID, LOG_DAEMON); set_die_routine(daemon_die); } else +#endif /* avoid splitting a message in the middle */ setvbuf(stderr, NULL, _IOFBF, 4096); diff -ruw source/fast-import.c source-new/fast-import.c --- source/fast-import.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/fast-import.c 2018-12-26 18:46:02.396322633 -0700 @@ -531,6 +531,7 @@ static void set_checkpoint_signal(void) { +#if !defined(__redox__) struct sigaction sa; memset(&sa, 0, sizeof(sa)); @@ -538,6 +539,7 @@ sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGUSR1, &sa, NULL); +#endif } #endif diff -ruw source/git-compat-util.h source-new/git-compat-util.h --- source/git-compat-util.h 2017-06-04 19:08:11.000000000 -0600 +++ source-new/git-compat-util.h 2018-12-26 19:11:00.598201504 -0700 @@ -179,7 +179,9 @@ #include #include #include +#if !defined(__redox__) #include +#endif #ifndef NO_SYS_POLL_H #include #else @@ -199,13 +201,17 @@ #include #include #include +#if !defined(__redox__) #include +#endif #include #ifndef NO_SYS_SELECT_H #include #endif #include +#if !defined(__redox__) #include +#endif #include #include #include @@ -320,8 +326,20 @@ #endif #ifndef PATH_SEP +#if defined(__redox__) +#define PATH_SEP ';' +#else #define PATH_SEP ':' #endif +#endif + +#ifndef DEV_NULL +#if defined(__redox__) +#define DEV_NULL "null:" +#else +#define DEV_NULL "/dev/null" +#endif +#endif #ifdef HAVE_PATHS_H #include diff -ruw source/Makefile source-new/Makefile --- source/Makefile 2017-06-04 19:08:11.000000000 -0600 +++ source-new/Makefile 2018-12-26 18:35:54.096906095 -0700 @@ -1802,7 +1802,6 @@ $(BUILT_INS): git$X $(QUIET_BUILT_IN)$(RM) $@ && \ - ln $< $@ 2>/dev/null || \ ln -s $< $@ 2>/dev/null || \ cp $< $@ @@ -2096,7 +2095,6 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY) $(QUIET_LNCP)$(RM) $@ && \ - ln $< $@ 2>/dev/null || \ ln -s $< $@ 2>/dev/null || \ cp $< $@ @@ -2449,14 +2447,12 @@ for p in $(filter $(install_bindir_programs),$(BUILT_INS)); do \ $(RM) "$$bindir/$$p" && \ test -z "$(NO_INSTALL_HARDLINKS)" && \ - ln "$$bindir/git$X" "$$bindir/$$p" 2>/dev/null || \ ln -s "git$X" "$$bindir/$$p" 2>/dev/null || \ cp "$$bindir/git$X" "$$bindir/$$p" || exit; \ done && \ for p in $(BUILT_INS); do \ $(RM) "$$execdir/$$p" && \ test -z "$(NO_INSTALL_HARDLINKS)" && \ - ln "$$execdir/git$X" "$$execdir/$$p" 2>/dev/null || \ ln -s "git$X" "$$execdir/$$p" 2>/dev/null || \ cp "$$execdir/git$X" "$$execdir/$$p" || exit; \ done && \ @@ -2464,7 +2460,6 @@ for p in $$remote_curl_aliases; do \ $(RM) "$$execdir/$$p" && \ test -z "$(NO_INSTALL_HARDLINKS)" && \ - ln "$$execdir/git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \ ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \ cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \ done && \ diff -ruw source/progress.c source-new/progress.c --- source/progress.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/progress.c 2018-12-26 19:13:24.522688882 -0700 @@ -52,11 +52,13 @@ progress_update = 0; +#if !defined(__redox__) memset(&sa, 0, sizeof(sa)); sa.sa_handler = progress_interval; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGALRM, &sa, NULL); +#endif v.it_interval.tv_sec = 1; v.it_interval.tv_usec = 0; @@ -74,8 +76,12 @@ static int is_foreground_fd(int fd) { +#if defined(__redox__) + return 1; +#else int tpgrp = tcgetpgrp(fd); return tpgrp < 0 || tpgrp == getpgid(0); +#endif } static int display(struct progress *progress, unsigned n, const char *done) diff -ruw source/run-command.c source-new/run-command.c --- source/run-command.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/run-command.c 2018-12-26 19:19:21.042685078 -0700 @@ -120,9 +120,9 @@ #ifndef GIT_WINDOWS_NATIVE static inline void dup_devnull(int to) { - int fd = open("/dev/null", O_RDWR); + int fd = open(DEV_NULL, O_RDWR); if (fd < 0) - die_errno(_("open /dev/null failed")); + die_errno(_("open %s failed"), DEV_NULL); if (dup2(fd, to) < 0) die_errno(_("dup2(%d,%d) failed"), fd, to); close(fd); @@ -138,7 +138,7 @@ return NULL; while (1) { - const char *end = strchrnul(p, ':'); + const char *end = strchrnul(p, PATH_SEP); strbuf_reset(&buf); @@ -622,6 +622,7 @@ struct async *async = data; intptr_t ret; +#if !defined(__redox__) if (async->isolate_sigpipe) { sigset_t mask; sigemptyset(&mask); @@ -631,6 +632,7 @@ return (void *)ret; } } +#endif pthread_setspecific(async_key, async); ret = async->proc(async->proc_in, async->proc_out, async->data); diff -ruw source/setup.c source-new/setup.c --- source/setup.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/setup.c 2018-12-26 18:52:50.070479933 -0700 @@ -1146,11 +1146,11 @@ /* if any standard file descriptor is missing open it to /dev/null */ void sanitize_stdfds(void) { - int fd = open("/dev/null", O_RDWR, 0); + int fd = open(DEV_NULL, O_RDWR, 0); while (fd != -1 && fd < 2) fd = dup(fd); if (fd == -1) - die_errno("open /dev/null or dup failed"); + die_errno("open %s or dup failed", DEV_NULL); if (fd > 2) close(fd); } @@ -1169,8 +1169,10 @@ default: exit(0); } +#if !defined(__redox__) if (setsid() == -1) die_errno("setsid failed"); +#endif close(0); close(1); close(2); diff -ruw source/strbuf.c source-new/strbuf.c --- source/strbuf.c 2017-06-04 19:08:11.000000000 -0600 +++ source-new/strbuf.c 2018-12-26 18:53:39.586122270 -0700 @@ -446,6 +446,13 @@ for (;; guessed_len *= 2) { strbuf_grow(sb, guessed_len); if (getcwd(sb->buf, sb->alloc)) { +#if defined(__redox__) + if (strncmp(sb->buf, "file:", 5) == 0) { + char *x = strdup(sb->buf); + strcpy(sb->buf, x+5); + free(x); + } +#endif strbuf_setlen(sb, strlen(sb->buf)); return 0; }