diff --git a/src/sbbs3/install/sbbsinst.c b/src/sbbs3/install/sbbsinst.c index e78cffa831b9f57e65132b5813aea7204200dba8..64aa0e85e25b7b6dad1c7aa9f57a497ea056294f 100644 --- a/src/sbbs3/install/sbbsinst.c +++ b/src/sbbs3/install/sbbsinst.c @@ -95,15 +95,17 @@ enum { uifcapi_t uifc; /* User Interface (UIFC) Library API */ struct { - char install_path[256]; - BOOL usebcc; - char cflags[256]; - BOOL debug; - BOOL symlink; - BOOL cvs; - char cvstag[256]; - char cvsroot[256]; - char make_cmdline[128]; + char install_path[256]; + BOOL usebcc; + char cflags[256]; + BOOL debug; + BOOL symlink; + BOOL cvs; + char cvstag[256]; + char cvsroot[256]; + char make_cmdline[128]; + char sys_desc[1024]; + struct utsname name; } params; /* Build parameters */ #define MAKEFILE "/tmp/SBBSmakefile" @@ -252,6 +254,12 @@ int main(int argc, char **argv) exit(1); } + if(uname(¶ms.name)) { + SAFECOPY(params.name.machine,"Unknown"); + SAFECOPY(params.name.sysname,params.name.machine); + } + sprintf(params.sys_desc,"%s-%s",params.name.sysname,params.name.machine); + distlist=get_distlist(); if((opt=(char **)MALLOC(sizeof(char *)*(MAX_OPTS+1)))==NULL) @@ -277,6 +285,7 @@ int main(int argc, char **argv) sprintf(mopt[i++],"%-27.27s%s","Distribution",distlist[dist]->version); sprintf(mopt[i++],"%-27.27s%s","Server" ,(distlist[dist]->type==LOCAL_FILE?"Local Files":distlist[dist]->servers[server]->desc)); + sprintf(mopt[i++],"%-27.27s%s","System Type",params.sys_desc); sprintf(mopt[i++],"%-27.27s%s","Install Path",params.install_path); sprintf(mopt[i++],"%-27.27s%s","Compiler",params.usebcc?"Borland":"GNU"); sprintf(mopt[i++],"%-27.27s%s","Compiler Flags",params.cflags); @@ -305,6 +314,11 @@ int main(int argc, char **argv) } break; case 2: + uifc.helpbuf= "`System Type`\n" + "\nToDo: Add help."; + uifc.input(WIN_MID,0,0,"System Type",params.sys_desc,40,K_EDIT); + break; + case 3: uifc.helpbuf= "`Install Path`\n" "\n" "\nPath to install the Synchronet BBS system into." @@ -315,7 +329,7 @@ int main(int argc, char **argv) "\n /home/bbs/sbbs"; uifc.input(WIN_MID,0,0,"",params.install_path,50,K_EDIT); break; - case 3: + case 4: strcpy(opt[0],"Borland"); strcpy(opt[1],"GNU"); opt[2][0]=0; @@ -330,12 +344,12 @@ int main(int argc, char **argv) params.usebcc=FALSE; i=0; break; - case 4: + case 5: uifc.helpbuf= "`Compiler Flags`\n" "\nToDo: Add help."; uifc.input(WIN_MID,0,0,"Additional Compiler Flags",params.cflags,40,K_EDIT); break; - case 5: + case 6: strcpy(opt[0],"Yes"); strcpy(opt[1],"No"); opt[2][0]=0; @@ -350,7 +364,7 @@ int main(int argc, char **argv) params.debug=FALSE; i=0; break; - case 6: + case 7: strcpy(opt[0],"Yes"); strcpy(opt[1],"No"); opt[2][0]=0; @@ -367,12 +381,12 @@ int main(int argc, char **argv) params.symlink=FALSE; i=0; break; - case 7: + case 8: uifc.helpbuf= "`Make Command-line`\n" "\n"; uifc.input(WIN_MID,0,0,"",params.make_cmdline,65,K_EDIT); break; - case 8: + case 9: install_sbbs(distlist[dist],distlist[dist]->type==LOCAL_FILE?NULL:distlist[dist]->servers[server]); bail(0); break; @@ -403,6 +417,7 @@ int main(int argc, char **argv) void install_sbbs(struct dist_t *dist,struct server_ent_t *server) { char cmd[MAX_PATH+1]; char str[1024]; + char fname[MAX_PATH+1]; char sbbsdir[9+MAX_PATH]; char cvstag[7+MAX_PATH]; char buf[1024]; @@ -459,12 +474,20 @@ void install_sbbs(struct dist_t *dist,struct server_ent_t *server) { printf("Could not download distfile to %s (%d)\n",dist->files[i],errno); exit(EXIT_FAILURE); } - sprintf(url,"%s%s",server->addr,dist->files[i]); + sprintf(str,dist->files[i],params.sys_desc); + sprintf(url,"%s%s",server->addr,str); if((remote=ftpGetURL(url,ftp_user,ftp_pass,&ret1))==NULL) { - printf("Cannot get distribution file %s!\n",dist->files[i]); - printf("%s\n- %s\n",url,ftpErrString(ret1)); - unlink(dist->files[i]); - exit(EXIT_FAILURE); + /* retry without machine type in name */ + SAFECOPY(fname,str); + sprintf(str,dist->files[i],params.name.sysname); + sprintf(url,"%s%s",server->addr,str); + if(strcmp(str,fname)==0 /* no change in name? */ + || (remote=ftpGetURL(url,ftp_user,ftp_pass,&ret1))==NULL) { + printf("Cannot get distribution file %s!\n",str); + printf("%s\n- %s\n",url,ftpErrString(ret1)); + unlink(str); + exit(EXIT_FAILURE); + } } while((ret1=remote->read(remote,buf,sizeof(buf)))>0) { ret2=write(fout,buf,ret1); @@ -527,15 +550,6 @@ get_distlist(void) ftp_FILE *list; char sep[2]={'\t',0}; char str[1024]; - struct utsname name; - char sys_desc[1024]; - - if(uname(&name)) { - strcpy(name.machine,"Unknown"); - strcpy(name.sysname,name.machine); - } - sprintf(sys_desc,"%s-%s",name.sysname,name.machine); - printf("Sys: %s\n",sys_desc); if((dist=(struct dist_t **)MALLOC(sizeof(void *)*MAX_DISTRIBUTIONS))==NULL) allocfail(sizeof(void *)*MAX_DISTRIBUTIONS); @@ -543,7 +557,9 @@ get_distlist(void) if((dist[i]=(void *)MALLOC(sizeof(struct dist_t)))==NULL) allocfail(sizeof(struct dist_t)); - sprintf(str,DEFAULT_LIBFILE,sys_desc); + sprintf(str,DEFAULT_LIBFILE,params.sys_desc); + if(!fexist(str)) /* use lib-linux.tgz if lib-linux-i686.tgz doesn't exist */ + sprintf(str,DEFAULT_LIBFILE,params.name.sysname); if(fexist(DEFAULT_DISTFILE) && fexist(str)) { if((file=(char **)MALLOC(sizeof(char *)*MAX_DIST_FILES))==NULL) allocfail(sizeof(char *)*MAX_DIST_FILES); @@ -590,7 +606,7 @@ get_distlist(void) sep[0]=' '; p=strtok(str,sep); p=strtok(NULL,sep); - if(strstr(p,sys_desc)==NULL) + if(strstr(p,params.sys_desc)==NULL) break; sep[0]='\n'; p=strtok(NULL,sep); @@ -648,20 +664,10 @@ get_distlist(void) r++; break; case 'f': - for(j=0,i=2;in_line[i];i++) { - if(in_line[i]=='%' && in_line[i+1]=='s') { - file[f][j]=0; - strcat(file[f],sys_desc); - j=strlen(file[f]); - i++; - } - else - file[f][j++]=in_line[i]; - } - f++; + SAFECOPY(file[f++],in_line+2); break; case 't': - strcpy(dist[r-1]->tag,in_line+2); + SAFECOPY(dist[r-1]->tag,in_line+2); break; case 's': p=in_line+2;