tLong-standing bug in syminit, tickled by placing initshell before syminit. Don't understand why syminit exists at all. - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 3300f9cd89202e417dee8f1799e88f955d75ac89
(DIR) parent 5ad21e86207dd42295733010dd448b51a614b611
(HTM) Author: rsc <devnull@localhost>
Date: Sat, 15 Jan 2005 20:54:41 +0000
Long-standing bug in syminit, tickled by placing
initshell before syminit. Don't understand why syminit
exists at all.
Diffstat:
M src/cmd/mk/main.c | 2 +-
M src/cmd/mk/symtab.c | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
---
(DIR) diff --git a/src/cmd/mk/main.c b/src/cmd/mk/main.c
t@@ -39,7 +39,6 @@ main(int argc, char **argv)
* instead of sharing them
*/
- initshell();
Binit(&bout, 1, OWRITE);
buf = newbuf();
whatif = 0;
t@@ -120,6 +119,7 @@ main(int argc, char **argv)
iflag = 1;
usage();
syminit();
+ initshell();
initenv();
usage();
(DIR) diff --git a/src/cmd/mk/symtab.c b/src/cmd/mk/symtab.c
t@@ -7,11 +7,13 @@ static Symtab *hash[NHASH];
void
syminit(void)
{
- Symtab **s, *ss;
+ Symtab **s, *ss, *next;
for(s = hash; s < &hash[NHASH]; s++){
- for(ss = *s; ss; ss = ss->next)
+ for(ss = *s; ss; ss = next){
+ next = ss->next;
free((char *)ss);
+ }
*s = 0;
}
}