From 2a2c1ad806fb590c78493848ffb2eddedd7487d0 Mon Sep 17 00:00:00 2001 From: Gavin Hayes Date: Fri, 12 Apr 2024 01:59:54 -0400 Subject: [PATCH] start on improving __paginate --- libc/{proc => x}/paginate.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) rename libc/{proc => x}/paginate.c (87%) diff --git a/libc/proc/paginate.c b/libc/x/paginate.c similarity index 87% rename from libc/proc/paginate.c rename to libc/x/paginate.c index f5d4b8355..3d5a58dbf 100644 --- a/libc/proc/paginate.c +++ b/libc/x/paginate.c @@ -16,7 +16,9 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/dce.h" #include "libc/calls/calls.h" +#include "libc/calls/syscall_support-nt.internal.h" #include "libc/intrin/safemacros.internal.h" #include "libc/limits.h" #include "libc/runtime/runtime.h" @@ -29,16 +31,22 @@ void __paginate(int fd, const char *s) { int tfd, pid; char *args[3] = {0}; - char tmppath[] = "/tmp/paginate.XXXXXX"; + char tmppath[PATH_MAX-32] = "/tmp/paginate.XXXXXX"; char progpath[PATH_MAX]; if (strcmp(nulltoempty(getenv("TERM")), "dumb") && isatty(0) && isatty(1) && ((args[0] = commandv("less", progpath, sizeof(progpath))) || (args[0] = commandv("more", progpath, sizeof(progpath))) || - (args[0] = commandv("more.exe", progpath, sizeof(progpath))))) { + (args[0] = commandv("more.exe", progpath, sizeof(progpath))) || + (args[0] = commandv("more.com", progpath, sizeof(progpath))))) { if ((tfd = mkstemp(tmppath)) != -1) { write(tfd, s, strlen(s)); close(tfd); args[1] = tmppath; + if (IsWindows() && strcmp(args[0], "/C/Windows/System32/more.com") == 0) { + char16_t widepath[PATH_MAX]; + __mkntpath(tmppath, widepath); + tprecode16to8(tmppath, sizeof(tmppath), widepath); + } if ((pid = fork()) != -1) { putenv("LC_ALL=C.UTF-8"); putenv("LESSCHARSET=utf-8");