From 97cf09df2dee42e84504b671ebd61586db3798b6 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 8 Dec 2003 22:24:48 +0000
Subject: [PATCH] -n now checks the pwd and ..

---
 src/sbbs3/install/sbbsinst.c | 48 +++++++++++++++++++++++++++++++++---
 1 file changed, 45 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/install/sbbsinst.c b/src/sbbs3/install/sbbsinst.c
index abbce12c7a..f7f540adac 100644
--- a/src/sbbs3/install/sbbsinst.c
+++ b/src/sbbs3/install/sbbsinst.c
@@ -143,6 +143,37 @@ dist_t **get_distlist(void);
 int choose_dist(char **opts);
 int choose_server(char **opts);
 
+int filereadline(int sock, char *buf, size_t length, char *error)
+{
+	char    ch;
+	int             i;
+
+	for(i=0;1;) {
+		if(read(sock, &ch,1)!=1)  {
+			if(error != NULL)
+				strcpy(error,"Error Reading File");
+			return(-1);
+		}
+
+		if(ch=='\n')
+			break;
+
+		if(i<length)
+			buf[i++]=ch;
+	}
+
+	/* Terminate at length if longer */
+	if(i>length)
+		i=length;
+
+	if(i>0 && buf[i-1]=='\r')
+		buf[--i]=0;
+	else
+		buf[i]=0;
+
+	return(i);
+}
+
 void bail(int code)
 {
     if(code) {
@@ -663,6 +694,7 @@ get_distlist(void)
 	char	sep[2]={'\t',0};
 	char	str[1024];
 	char	errors[sizeof(distlists)/sizeof(char*)][128];
+	int     (*readline) (int sock, char *buf, size_t length, char *error)=NULL;
 
 	memset(errors,0,sizeof(errors));
 	if((dist=(dist_t **)MALLOC(sizeof(void *)*MAX_DISTRIBUTIONS))==NULL)
@@ -700,11 +732,21 @@ get_distlist(void)
 	if(http_distlist) {
 		uifc.pop("Getting distributions");
 		for(i=0;distlists[i]!=NULL;i++)  {
-			if(http_get_fd(distlists[i],NULL,errors[i])>=0)
+			if((list=http_get_fd(distlists[i],NULL,errors[i]))>=0)  {
+				readline=sockreadline;
 				break;
+			}
 		}
 	}
-	uifc.pop(NULL);
+	if(list<0)  {
+		if(http_distlist)
+			uifc.pop(NULL);
+		uifc.pop("Loading distlist");
+		if((list=open("./sbbsdist.lst",O_RDONLY))<0)
+			list=open("../sbbsdist.lst",O_RDONLY);
+		if(list>=0)
+			readline=filereadline;
+	}
 	if(list<0)  {
 		uifc.bail();
 		printf("Cannot get distribution list!\n");
@@ -713,7 +755,7 @@ get_distlist(void)
 		exit(EXIT_FAILURE);
 	}
 
-	while(list>=0 && (sockreadline(list,in_line,sizeof(in_line),NULL)>=0))  {
+	while(readline != NULL && list>=0 && (readline(list,in_line,sizeof(in_line),NULL)>=0))  {
 		i=strlen(in_line);
 		while(i>0 && in_line[i]<=' ')
 			in_line[i--]=0;
-- 
GitLab