$NetBSD: patch-ad,v 1.1 2006/03/14 02:21:46 joerg Exp $

--- hashf.c.orig	2006-03-14 02:10:26.000000000 +0000
+++ hashf.c
@@ -33,6 +33,7 @@ SOFTWARE.
 
 
 #include <sys/types.h>
+#include <limits.h>
 #include <stdlib.h>
 
 #ifndef USE_BFUNCS
@@ -168,10 +169,14 @@ hashf_Exists(hashtable, hashcode, compar
 	hash_datum *key;
 {
         FILE *fp;
+#if defined(NAME_MAX)
+        char name[NAME_MAX],buf[MAXELEMENTLEN];
+#else
         char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#endif
         int len,rc;
 
-        sprintf(name,"%s/%X",hashtable->dirname,hashcode % hashtable->size);
+        snprintf(name,sizeof(name),"%s/%X",hashtable->dirname,hashcode % hashtable->size);
         fp=fopen(name,"r");
         if(!fp)
                 return FALSE;
@@ -215,10 +220,14 @@ hashf_Insert(hashtable, hashcode, compar
 	unsigned long elen;
 {
 	FILE *fp;
+#if defined(NAME_MAX)
+	char name[NAME_MAX],buf[MAXELEMENTLEN];
+#else
 	char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#endif
 	int rc,len;
 	hashcode %= hashtable->size;
-	sprintf(name,"%s/%X",hashtable->dirname,hashcode);
+	snprintf(name,sizeof(name),"%s/%X",hashtable->dirname,hashcode);
 
 	fp=fopen(name,"a+");
 	if(!fp)
@@ -265,10 +274,14 @@ hashf_Delete(hashtable, hashcode, compar
 	hash_datum *key;
 {
 	FILE *fp,*tmp;
+#if defined(NAME_MAX)
+	char name[NAME_MAX],buf[MAXELEMENTLEN];
+#else
 	char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#endif
 	int rc,len;
 	hashcode %= hashtable->size;
-	sprintf(name,"%s/%X",hashtable->dirname,hashcode);
+	snprintf(name,sizeof(name),"%s/%X",hashtable->dirname,hashcode);
 
 	fp=fopen(name,"r");
 	if(!fp)
@@ -331,10 +344,14 @@ hashf_Replace(hashtable, hashcode, compa
 	unsigned long elen;
 {
 	FILE *fp,*tmp;
+#if defined(NAME_MAX)
+	char name[NAME_MAX],buf[MAXELEMENTLEN];
+#else
 	char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#endif
 	int rc,len;
 	char write,done;
-	sprintf(name,"%s/%X",hashtable->dirname,hashcode % hashtable->size);
+	snprintf(name,sizeof(name),"%s/%X",hashtable->dirname,hashcode % hashtable->size);
 
 	fp=fopen(name,"r");
 	if(!fp)
@@ -432,11 +449,15 @@ hashf_Lookup(hashtable, hashcode, compar
 	int *length;
 {
         FILE *fp;
-        char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#if defined(NAME_MAX)
+	char name[NAME_MAX],buf[MAXELEMENTLEN];
+#else
+	char name[MAXNAMLEN],buf[MAXELEMENTLEN];
+#endif
         int len,rc;
 		hash_datum *p;
 
-        sprintf(name,"%s/%X",hashtable->dirname,hashcode % hashtable->size);
+        snprintf(name,sizeof(name),"%s/%X",hashtable->dirname,hashcode % hashtable->size);
         fp=fopen(name,"r");
         if(!fp)
                 return NULL;
@@ -479,7 +500,11 @@ hashf_NextEntry(hashtable,length)
 	int *length;
 {
 	unsigned long len;
+#if defined(NAME_MAX)
+	char name[NAME_MAX];
+#else
 	char name[MAXNAMLEN];
+#endif
     int rc;
 	hash_datum *p;
 	struct dirent *direntry;
@@ -494,7 +519,7 @@ hashf_NextEntry(hashtable,length)
 		}while(direntry->d_name[0]=='.');
 		if(hashtable->next)
 			fclose(hashtable->next);
-        sprintf(name,"%s/%s",hashtable->dirname,direntry->d_name);
+        snprintf(name,sizeof(name),"%s/%s",hashtable->dirname,direntry->d_name);
 		hashtable->next=fopen(name,"r");
 		rc=fread(&len,4,1,hashtable->next);
 		if(rc==0)
