From ed41dd5b288d95dc11ff87e97bade9859bde6c07 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 16 Sep 2018 13:47:33 +0200 Subject: [PATCH] 9boot: don't let user erase the prompt (thanks mischief) --- sys/src/boot/efi/sub.c | 6 ++++-- sys/src/boot/pc/sub.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/src/boot/efi/sub.c b/sys/src/boot/efi/sub.c index c4ab44512..1359b199c 100644 --- a/sys/src/boot/efi/sub.c +++ b/sys/src/boot/efi/sub.c @@ -110,13 +110,15 @@ readline(void *f, char buf[64]) if(f == nil){ while((*p = getc()) == 0) ; + if(p == buf && (*p == '\b' || strchr(white, *p) != nil)) + continue; putc(*p); if(*p == '\r') putc('\n'); - else if(*p == '\b' && p > buf){ + else if(*p == '\b'){ + p--; putc(' '); putc('\b'); - p--; continue; } }else if(read(f, p, 1) <= 0) diff --git a/sys/src/boot/pc/sub.c b/sys/src/boot/pc/sub.c index caa919d98..8d69ddc77 100644 --- a/sys/src/boot/pc/sub.c +++ b/sys/src/boot/pc/sub.c @@ -133,13 +133,15 @@ readline(void *f, char buf[64]) if(f == nil){ while((*p = getc()) == 0) ; + if(p == buf && (*p == '\b' || strchr(white, *p) != nil)) + continue; putc(*p); if(*p == '\r') putc('\n'); - else if(*p == '\b' && p > buf){ + else if(*p == '\b'){ + p--; putc(' '); putc('\b'); - p--; continue; } }else if(read(f, p, 1) <= 0)