--- /dev/null
+--- busybox-1.14.0/include/libbb.h Tue Apr 14 02:50:20 2009
++++ busybox-1.14.0-libbb/include/libbb.h Fri May 15 23:22:02 2009
+@@ -965,6 +965,12 @@
+ /* How long the longest ESC sequence we know? */
+ KEYCODE_BUFFER_SIZE = 4
+ };
++/* Note: fd may be in blocking or non-blocking mode, both make sense.
++ * For one, less uses non-blocking mode.
++ * Only the first read syscall inside read_key may block indefinitely
++ * (unless fd is in non-blocking mode),
++ * subsequent reads will time out after a few milliseconds.
++ */
+ int read_key(int fd, smalluint *nbuffered, char *buffer) FAST_FUNC;
+
+
+--- busybox-1.14.0/libbb/read.c Tue Apr 14 01:43:00 2009
++++ busybox-1.14.0-libbb/libbb/read.c Fri May 15 23:22:02 2009
+@@ -229,7 +229,7 @@
+ if (size > 64*1024)
+ size = 64*1024;
+ }
+- xrealloc(buf, total + 1);
++ buf = xrealloc(buf, total + 1);
+ buf[total] = '\0';
+
+ if (maxsz_p)
+@@ -273,7 +273,7 @@
+ free(buf);
+ return NULL;
+ }
+- xrealloc(buf, size + 1);
++ buf = xrealloc(buf, size + 1);
+ buf[size] = '\0';
+
+ if (maxsz_p)