shithub: riscv

Download patch

ref: de19776b2f793de7fdf1111d84d96eb29f9a22fd
parent: b878450725de85dc874f42bc9de4ce1d5087f900
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Wed Jun 1 20:12:36 EDT 2016

mk: remove buggy and useless symtab functions (thanks qrstuv)

neither symdel nor symstat were used anywhere. syminit was used but
had no effect. both syminit and symdel dereference pointers after
freeing them. symstat can be tricked into writing beyond the bounds of
its array

--- a/sys/src/cmd/mk/fns.h
+++ b/sys/src/cmd/mk/fns.h
@@ -64,9 +64,7 @@
 void	shprint(char*, Envy*, Bufblock*);
 Word	*stow(char*);
 void	subst(char*, char*, char*, int);
-void	symdel(char*, int);
 Symtab	*symlook(char*, int, void*);
-void	symstat(void);
 void	symtraverse(int, void(*)(Symtab*));
 void	timeinit(char*);
 long	timeof(char*, int);
--- a/sys/src/cmd/mk/symtab.c
+++ b/sys/src/cmd/mk/symtab.c
@@ -31,30 +31,6 @@
 }
 
 void
-symdel(char *sym, int space)
-{
-	long h;
-	char *p;
-	Symtab *s, *ls;
-
-	/* multiple memory leaks */
-
-	for(p = sym, h = space; *p; h += *p++)
-		h *= HASHMUL;
-	if(h < 0)
-		h = ~h;
-	h %= NHASH;
-	for(s = hash[h], ls = 0; s; ls = s, s = s->next)
-		if((s->space == space) && (strcmp(s->name, sym) == 0)){
-			if(ls)
-				ls->next = s->next;
-			else
-				hash[h] = s->next;
-			free((char *)s);
-		}
-}
-
-void
 symtraverse(int space, void (*fn)(Symtab*))
 {
 	Symtab **s, *ss;
@@ -63,21 +39,4 @@
 		for(ss = *s; ss; ss = ss->next)
 			if(ss->space == space)
 				(*fn)(ss);
-}
-
-void
-symstat(void)
-{
-	Symtab **s, *ss;
-	int n;
-	int l[1000];
-
-	memset((char *)l, 0, sizeof(l));
-	for(s = hash; s < &hash[NHASH]; s++){
-		for(ss = *s, n = 0; ss; ss = ss->next)
-			n++;
-		l[n]++;
-	}
-	for(n = 0; n < 1000; n++)
-		if(l[n]) Bprint(&bout, "%d of length %d\n", l[n], n);
 }