Clean out the unused functions. Improve and const-ify, what remains.
--- lib/binsrch.c	Fri May  6 13:17:38 2005
+++ lib/binsrch.c	Sun Jan 15 11:43:36 2006
@@ -5,8 +5,9 @@
 */
 
+#include "wn.h"
 #include <stdio.h>
 #include <string.h>
 
-static char *Id = "$Id: binsrch.c,v 1.15 2005/02/01 16:46:43 wn Rel $";
+__FBSDID("$Id: binsrch.c,v 1.15 2005/02/01 16:46:43 wn Rel $");
 
 /* Binary search - looks for the key passed at the start of a line
@@ -14,5 +15,4 @@
    a buffer containing the line in the file. */
 
-#define KEY_LEN		(1024)
 #define LINE_LEN	(1024*25)
 
@@ -25,201 +25,61 @@
 #undef getc
 
-char *read_index(long offset, FILE *fp) {
-    char *linep;
+const char *
+read_index(long offset, FILE *fp) {
 
-    linep = line;
     line[0] = '0';
 
-    fseek( fp, offset, SEEK_SET );
-    fgets(linep, LINE_LEN, fp);
+    fseek(fp, offset, SEEK_SET);
+    fgets(line, LINE_LEN, fp);
     return(line);
 }
 
-char *bin_search(char *searchkey, FILE *fp)
+static int
+sign(int number)
 {
-    int c;
-    long top, mid, bot, diff;
-    char *linep, key[KEY_LEN];
-    int length;
-
-    diff=666;
-    linep = line;
-    line[0] = '\0';
-
-    fseek(fp, 0L, 2);
-    top = 0;
-    bot = ftell(fp);
-    mid = (bot - top) / 2;
-
-    do {
-	fseek(fp, mid - 1, 0);
-	if(mid != 1)
-	    while((c = getc(fp)) != '\n' && c != EOF);
-        last_bin_search_offset = ftell( fp );
-	fgets(linep, LINE_LEN, fp);
-	length = (int)(strchr(linep, ' ') - linep);
-	strncpy(key, linep, length);
-	key[length] = '\0';
-	if(strcmp(key, searchkey) < 0) {
-	    top = mid;
-	    diff = (bot - top) / 2;
-	    mid = top + diff;
-	}
-	if(strcmp(key, searchkey) > 0) {
-	    bot = mid;
-	    diff = (bot - top) / 2;
-	    mid = top + diff;
-	}
-    } while((strcmp(key, searchkey)) && (diff != 0));
-    
-    if(!strcmp(key, searchkey))
-	return(line);
-    else
-	return(NULL);
+	if (number > 0)
+		return 1;
+	if (number < 0)
+		return -1;
+	return 0;
 }
-
-static long offset;
 
-static int bin_search_key(char *searchkey, FILE *fp)
+const char *
+bin_search(const char *searchkey, FILE *fp)
 {
-    int c;
-    long top, mid, bot, diff;
-    char *linep, key[KEY_LEN];
-    int length, offset1, offset2;
-
-    /* do binary search to find correct place in file to insert line */
-
-    diff=666;
-    linep = line;
-    line[0] = '\0';
-
-    fseek(fp, 0L, 2);
-    top = 0;
-    bot = ftell(fp);
-    if (bot == 0) {
-	offset = 0;
-	return(0);		/* empty file */
-    }
-    mid = (bot - top) / 2;
-
-    /* If only one line in file, don't work through loop */
-
-    length = 0;
-    rewind(fp);
-    while((c = getc(fp)) != '\n' && c != EOF)
-	line[length++] =  c;
-    if (getc(fp) == EOF) {	/* only 1 line in file */
-	length = (int)(strchr(linep, ' ') - linep);
-	strncpy(key, linep, length);
-	key[length] = '\0';
-	if(strcmp(key, searchkey) > 0) {
-	    offset = 0;
-	    return(0);		/* line with key is not found */
-	} else if (strcmp(key, searchkey) < 0) {
-	    offset = ftell(fp);
-	    return(0);		/* line with key is not found */
-	} else {
-	    offset = 0;
-	    return(1);		/* line with key is found */
+	int	c;
+	long	top, mid, bot; /* should be off_t */
+	int	length, keylen;
+
+	fseek(fp, 0L, 2);
+	bot = ftell(fp);
+	mid = bot / 2;
+	keylen = strlen(searchkey);
+
+	for (top = 0; bot - top >= 2; mid = (top + bot) / 2) {
+		fseek(fp, mid - 1, 0);
+		if(mid != 1)
+			while((c = getc(fp)) != '\n' && c != EOF);
+		last_bin_search_offset = ftell(fp);
+		if (fgets(line, LINE_LEN, fp) == NULL)
+			return(NULL);
+		length = strchr(line, ' ') - line;
+		switch (sign(strncmp(line, searchkey, length))) {
+		case 0:
+			/* a match up to the length! */
+			if (length == keylen)
+				return(line);
+			if (length > keylen)
+				/* the word read is longer than ours */
+				goto up;
+			/* FALLTHROUGH */
+		case -1:
+			top = mid;
+			continue;
+		case 1:
+		up:
+			bot = mid;
+		}
 	}
-    }
-
-    do {
-	fseek(fp, mid - 1, 0);
-	if(mid != 1)
-	    while((c = getc(fp)) != '\n' && c != EOF);
-	offset1 = ftell(fp);	/* offset at start of line */
-	if (fgets(linep, LINE_LEN, fp) != NULL) {
-  	    offset2 = ftell(fp); /* offset at start of next line */
-	    length = (int)(strchr(linep, ' ') - linep);
-	    strncpy(key, linep, length);
-	    key[length] = '\0';
-	    if(strcmp(key, searchkey) < 0) {	/* further in file */
-		top = mid;
-		diff = (bot - top) / 2;
-		mid = top + diff;
-		offset = offset2;
-	    }
-	    if(strcmp(key, searchkey) > 0) {	/* earlier in file */
-		bot = mid;
-		diff = (bot - top) / 2;
-		mid = top + diff;
-		offset = offset1;
-	    }
-	} else {
-	    bot = mid;
-	    diff = (bot - top) / 2;
-	    mid = top + diff;
-	}
-    } while((strcmp(key, searchkey)) && (diff != 0));
-
-    if(!strcmp(key, searchkey)) {
-	offset = offset1;	/* get to start of current line */
-	return(1);		/* line with key is found */
-    } else
-	return(0);		/* line with key is not found */
-}
-
-/* Copy contents from one file to another. */
-
-void copyfile(FILE *fromfp, FILE *tofp)
-{
-    int c;
-
-    while ((c = getc(fromfp)) != EOF)
-	putc(c, tofp);
-}
-
-/* Function to replace a line in a file.  Returns the original line,
-   or NULL in case of error. */
-
-char *replace_line(char *new_line, char *searchkey, FILE *fp)
-{
-    FILE *tfp;			/* temporary file pointer */
-
-    if (!bin_search_key(searchkey, fp))
-	return(NULL);		/* line with key not found */
-
-    if ((tfp = tmpfile()) == NULL)
-	return(NULL);		/* could not create temp file */
-    fseek(fp, offset, 0);
-    fgets(line, LINE_LEN, fp);	/* read original */
-    copyfile(fp, tfp);
-    if (fseek(fp, offset, 0) == -1)
-	return(NULL);		/* could not seek to offset */
-    fprintf(fp, new_line);	/* write line */
-    rewind(tfp);
-    copyfile(tfp, fp);
-
-    fclose(tfp);
-    fflush(fp);
-
-    return(line);
-}
-
-/* Find location to insert line at in file.  If line with this
-   key is already in file, return NULL. */
-
-char *insert_line(char *new_line, char *searchkey, FILE *fp)
-{
-    FILE *tfp;
-
-    if (bin_search_key(searchkey, fp))
 	return(NULL);
-    
-    if ((tfp = tmpfile()) == NULL)
-	return(NULL);		/* could not create temp file */
-    if (fseek(fp, offset, 0) == -1)
-	return(NULL);		/* could not seek to offset */
-    copyfile(fp, tfp);
-    if (fseek(fp, offset, 0) == -1)
-	return(NULL);		/* could not seek to offset */
-    fprintf(fp, new_line);	/* write line */
-    rewind(tfp);
-    copyfile(tfp, fp);
-
-    fclose(tfp);
-    fflush(fp);
-
-    return(new_line);
 }
