From 5530b035262b635bcb6b2dae9af455f47dd47052 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 20 Jan 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-01-20 --- port/alloc.c | 20 ++++++-------------- port/devcons.c | 9 +++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/port/alloc.c b/port/alloc.c index def0ed5ccc69b38b7e847df1c0cee72dfe73cfd2..c2dede5456964cd8c03a8b4649754ff26011a334 100644 --- a/port/alloc.c +++ b/port/alloc.c @@ -14,7 +14,7 @@ static void punlock(Pool*); typedef struct Private Private; struct Private { Lock lk; - char msg[128]; /* a rock for messages to be printed at unlock */ + char msg[256]; /* a rock for messages to be printed at unlock */ }; static Private pmainpriv; @@ -69,13 +69,8 @@ poolprint(Pool *p, char *fmt, ...) pv = p->private; va_start(v, fmt); - n = doprint(pv->msg, pv->msg+sizeof pv->msg, fmt, v)-pv->msg; + doprint(pv->msg+strlen(pv->msg), pv->msg+sizeof pv->msg, fmt, v); va_end(v); - if(n >= sizeof pv->msg); - n = sizeof(pv->msg)-1; - if(n < 0) - n = 0; - pv->msg[n] = 0; } static void @@ -84,18 +79,15 @@ ppanic(Pool *p, char *fmt, ...) va_list v; int n; Private *pv; + char msg[sizeof pv->msg]; pv = p->private; va_start(v, fmt); - n = doprint(pv->msg, pv->msg+sizeof pv->msg, fmt, v)-pv->msg; + doprint(pv->msg+strlen(pv->msg), pv->msg+sizeof pv->msg, fmt, v); va_end(v); - if(n >= sizeof pv->msg); - n = sizeof(pv->msg)-1; - if(n < 0) - n = 0; - pv->msg[n] = 0; + memmove(msg, pv->msg, sizeof msg); iunlock(&pv->lk); - panic("%s", pv->msg); + panic("%s", msg); } static void diff --git a/port/devcons.c b/port/devcons.c index 71387a9e07351c081656308fd3a38c6f1c481795..18e68ebcc90ff5b6bf56852aa1262d3dc0bb0961 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -819,6 +819,15 @@ conswrite(Chan *c, void *va, long n, vlong off) print("conswrite: reboot\n"); exit(0); } + if(strncmp(a, "malloc", 6) == 0){ /* rsc bug */ + a = malloc(2); + strcpy(a, "hi"); + free(a); + a = malloc(2); + strcpy(a, "helo"); + free(a); + panic("not reached conswrite"); + } if(strncmp(a, "panic", 5) == 0) panic("/dev/reboot"); break;