From 083b5a0e40e7eb56469ac1705ae437f4353d15ee Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 21 May 2006 23:32:55 +0000 Subject: [PATCH] setmalloctag --- kern/devcons.c | 5 +++++ kern/fns.h | 3 ++- kern/posix.c | 6 ++++++ kern/win32.c | 24 ++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/kern/devcons.c b/kern/devcons.c index 4525397..3b1a282 100644 --- a/kern/devcons.c +++ b/kern/devcons.c @@ -464,6 +464,7 @@ enum{ Qrandom, Qreboot, Qsecstore, + Qshowfile, Qsnarf, Qswap, Qsysname, @@ -497,6 +498,7 @@ static Dirtab consdir[]={ "random", {Qrandom}, 0, 0444, "reboot", {Qreboot}, 0, 0664, "secstore", {Qsecstore}, 0, 0666, + "showfile", {Qshowfile}, 0, 0220, "snarf", {Qsnarf}, 0, 0666, "swap", {Qswap}, 0, 0664, "sysname", {Qsysname}, 0, 0664, @@ -915,6 +917,9 @@ conswrite(Chan *c, void *va, long n, vlong off) memmove(secstorebuf+offset, va, n); return n; + case Qshowfile: + return showfilewrite(a, n); + case Qsnarf: if(offset >= SnarfSize || offset+n >= SnarfSize) error(Etoobig); diff --git a/kern/fns.h b/kern/fns.h index cc4bfce..97a9359 100644 --- a/kern/fns.h +++ b/kern/fns.h @@ -305,10 +305,11 @@ void segclock(ulong); void segpage(Segment*, Page*); void setkernur(Ureg*, Proc*); int setlabel(Label*); -void setmalloctag(void*, ulong); +void setmalloctag(void*, uintptr); void setrealloctag(void*, ulong); void setregisters(Ureg*, char*, char*, int); void setswapchan(Chan*); +long showfilewrite(char*, int); char* skipslash(char*); void sleep(Rendez*, int(*)(void*), void*); void* smalloc(ulong); diff --git a/kern/posix.c b/kern/posix.c index 6069987..22f3f8b 100644 --- a/kern/posix.c +++ b/kern/posix.c @@ -213,3 +213,9 @@ ticks(void) return (t.tv_sec-sec0)*1000+(t.tv_usec-usec0+500)/1000; } +long +showfilewrite(char *a, int n) +{ + error("not implemented"); + return -1; +} diff --git a/kern/win32.c b/kern/win32.c index 8c19ac8..fa79c1d 100644 --- a/kern/win32.c +++ b/kern/win32.c @@ -444,3 +444,27 @@ oserrstr(void) { osrerrstr(up->errstr, ERRMAX); } + +long +showfilewrite(char *a, int n) +{ + Rune *action, *arg, *cmd; + static Rune Lopen[] = { 'o', 'p', 'e', 'n', 0 }; + + cmd = runesmprint("%.*s", n, a); + if(cmd == nil) + error("out of memory"); + if(cmd[runestrlen(cmd)-1] == '\n') + cmd[runestrlen(cmd)] = 0; + p = runestrchr(cmd, ' '); + if(p){ + action = cmd; + *p++ = 0; + arg = p; + }else{ + action = Lopen; + arg = cmd; + } + ShellExecute(0, 0, action, arg, 0, SW_SHOWNORMAL); + return n; +}