  		ln -s "git-remote-http$X" "$$execdir/$$p" 2>/dev/null || \
  		cp "$$execdir/git-remote-http$X" "$$execdir/$$p" || exit; \
  	done && \
-diff -ru source/progress.c source-new/progress.c
+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-02 16:07:24.788757117 -0700
++++ 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,7 @@
+@@ -74,8 +76,12 @@
  
  static int is_foreground_fd(int fd)
  {
--	int tpgrp = tcgetpgrp(fd);
--	return tpgrp < 0 || tpgrp == getpgid(0);
-+	return 1;
++#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 -ru source/rerere.c source-new/rerere.c
---- source/rerere.c	2017-06-04 19:08:11.000000000 -0600
-+++ source-new/rerere.c	2018-12-02 16:07:24.788757117 -0700
-@@ -682,7 +682,7 @@
- 	 * A successful replay of recorded resolution.
- 	 * Mark that "postimage" was used to help gc.
- 	 */
--	if (utime(rerere_path(id, "postimage"), NULL) < 0)
-+	if (1)
- 		warning_errno("failed utime() on %s",
- 			      rerere_path(id, "postimage"));
- 
-diff -ru source/run-command.c source-new/run-command.c
+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-02 16:07:55.100993213 -0700
++++ 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("null:", O_RDWR);
++	int fd = open(DEV_NULL, O_RDWR);
  	if (fd < 0)
 -		die_errno(_("open /dev/null failed"));
-+		die_errno(_("open null: failed"));
++		die_errno(_("open %s failed"), DEV_NULL);
  	if (dup2(fd, to) < 0)
  		die_errno(_("dup2(%d,%d) failed"), fd, to);
  	close(fd);

 
 	while (1) {
-		const char *end = strchrnul(p, ':');
+		const char *end = strchrnul(p, ';');
 
 		strbuf_reset(&buf);
 
diff -ru source/send-pack.c source-new/send-pack.c
--- source/send-pack.c	2017-06-04 19:08:11.000000000 -0600
+++ source-new/send-pack.c	2018-12-02 16:07:24.788757117 -0700
@@ -570,7 +570,7 @@
 			if (args->stateless_rpc)
 				close(out);
 			if (git_connection_is_socket(conn))
-				shutdown(fd[0], SHUT_WR);
+				; // XXX
 
 			/*
 			 * Do not even bother with the return value; we know we
diff -ru source/setup.c source-new/setup.c
--- source/setup.c	2017-06-04 19:08:11.000000000 -0600
+++ source-new/setup.c	2018-12-02 16:07:24.788757117 -0700
@@ -1143,21 +1143,21 @@
 	return read_gitfile_gently(suspect, return_error_code);
 }
 
-/* if any standard file descriptor is missing open it to /dev/null */
+/* if any standard file descriptor is missing open it to null: */
 void sanitize_stdfds(void)
 {
-	int fd = open("/dev/null", O_RDWR, 0);
+	int fd = open("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 null: or dup failed");
 	if (fd > 2)
 		close(fd);
 }
 
 int daemonize(void)
 {
-#ifdef NO_POSIX_GOODIES
+#if 1
 	errno = ENOSYS;
 	return -1;
 #else
diff -ru source/sha1_file.c source-new/sha1_file.c
--- source/sha1_file.c	2017-06-04 19:08:11.000000000 -0600
+++ source-new/sha1_file.c	2018-12-02 16:07:24.792757146 -0700
@@ -723,7 +723,7 @@
 		"pack_report: getpagesize()            = %10" SZ_FMT "\n"
 		"pack_report: core.packedGitWindowSize = %10" SZ_FMT "\n"
 		"pack_report: core.packedGitLimit      = %10" SZ_FMT "\n",
-		sz_fmt(getpagesize()),
+		sz_fmt(4096),
 		sz_fmt(packed_git_window_size),
 		sz_fmt(packed_git_limit));
 	fprintf(stderr,
diff -ru source/strbuf.c source-new/strbuf.c
--- source/strbuf.c	2017-06-04 19:08:11.000000000 -0600
+++ source-new/strbuf.c	2018-12-02 16:07:24.792757146 -0700
@@ -446,6 +446,11 @@
 	for (;; guessed_len *= 2) {
 		strbuf_grow(sb, guessed_len);
 		if (getcwd(sb->buf, sb->alloc)) {
+			if (strncmp(sb->buf, "file:", 5) == 0) {
+			    char *x = strdup(sb->buf);
+			    strcpy(sb->buf, x+5);
+			    free(x);
+			}
 			strbuf_setlen(sb, strlen(sb->buf));
 			return 0;
 		}
diff -ru source/wrapper.c source-new/wrapper.c
--- source/wrapper.c	2017-06-04 19:08:11.000000000 -0600
+++ source-new/wrapper.c	2018-12-02 16:07:24.792757146 -0700
@@ -227,6 +227,7 @@
 	}
 }
 
+#if 0
 static int handle_nonblock(int fd, short poll_events, int err)
 {
 	struct pollfd pfd;
@@ -244,6 +245,7 @@
 	poll(&pfd, 1, -1);
 	return 1;
 }
+#endif
 
 /*
  * xread() is the same a read(), but it automatically restarts read()
@@ -260,8 +262,6 @@
 		if (nr < 0) {
 			if (errno == EINTR)
 				continue;
-			if (handle_nonblock(fd, POLLIN, errno))
-				continue;
 		}
 		return nr;
 	}
@@ -282,8 +282,6 @@
 		if (nr < 0) {
 			if (errno == EINTR)
 				continue;
-			if (handle_nonblock(fd, POLLOUT, errno))
-				continue;
 		}
 
 		return nr;
@@ -653,7 +651,7 @@
 
 void sleep_millisec(int millisec)
 {
-	poll(NULL, 0, millisec);
+	//poll(NULL, 0, millisec);
 }
 
 int xgethostname(char *buf, size_t len)

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;
 
 	/*
