From 565930ad14dcee920d4878fc4db4532e2b7c6100 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 7 Feb 2003 11:29:29 +0000 Subject: [PATCH] Don't use GROUP/USER env vars if they're not set. Fixed bug in server selection. Increase FTP download block size from 1K to 4K. Added percentage downloaded status while downloading. Added wrappers for system() calls to echo command-line (helps debugging). --- src/sbbs3/install/sbbsinst.c | 68 +++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/src/sbbs3/install/sbbsinst.c b/src/sbbs3/install/sbbsinst.c index ee3ec99cd4..4f75f2a6c0 100644 --- a/src/sbbs3/install/sbbsinst.c +++ b/src/sbbs3/install/sbbsinst.c @@ -159,7 +159,8 @@ void allocfail(uint size) int main(int argc, char **argv) { - char **mopt; + char** mopt; + char* p; int i=0; int main_dflt=0; char str[129]; @@ -180,8 +181,10 @@ int main(int argc, char **argv) params.cvs=TRUE; SAFECOPY(params.cvstag,"HEAD"); SAFECOPY(params.cvsroot,DEFAULT_CVSROOT); - SAFECOPY(params.sbbsuser,getenv("USER")); - SAFECOPY(params.sbbsgroup,getenv("GROUP")); + if((p=getenv("USER"))!=NULL) + SAFECOPY(params.sbbsuser,p); + if((p=getenv("GROUP"))!=NULL) + SAFECOPY(params.sbbsgroup,p); printf("\r\nSynchronet Installation Utility (%s) v%s Copyright 2003 " "Rob Swindell\r\n",PLATFORM_DESC,VERSION); @@ -319,7 +322,7 @@ int main(int argc, char **argv) if(distlist[dist]->type != LOCAL_FILE) { i=choose_server((char **)distlist[dist]->servers); if(i>=0) - server=0; + server=i; } break; case 2: @@ -426,6 +429,13 @@ int main(int argc, char **argv) } } +/* Little wrapper for system calls */ +int exec(char* cmd) +{ + printf("%s\n",cmd); + return(system(cmd)); +} + /* Some jiggery-pokery here to avoid having to enter the CVS password */ /* fprintf(makefile,"\tif(grep '%s' -q ~/.cvspass) then echo \"%s A\" >> ~/.cvspass; fi\n", * params.cvsroot,params.cvsroot); @@ -440,13 +450,15 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { char dstfname[MAX_PATH+1]; char sbbsdir[9+MAX_PATH]; char cvstag[7+MAX_PATH]; - char buf[1024]; + char buf[4096]; char url[MAX_PATH+1]; char path[MAX_PATH+1]; - char sbbsuser[18]; - char sbbsgroup[43]; + char sbbsuser[128]; + char sbbsgroup[128]; int i; int fout,ret1,ret2; + long flen; + long offset; ftp_FILE *remote; if(params.debug) @@ -459,11 +471,14 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { sprintf(sbbsdir,"SBBSDIR=%s",params.install_path); putenv(sbbsdir); - - sprintf(sbbsuser,"SBBSUSER=%s",params.sbbsuser); - putenv(sbbsuser); - sprintf(sbbsgroup,"SBBSGROUP=%s",params.sbbsgroup); - putenv(sbbsgroup); + if(params.sbbsuser[0]) { + sprintf(sbbsuser,"SBBSUSER=%s",params.sbbsuser); + putenv(sbbsuser); + } + if(params.sbbsgroup[0]) { + sprintf(sbbsgroup,"SBBSGROUP=%s",params.sbbsgroup); + putenv(sbbsgroup); + } if(params.usebcc) putenv("bcc=1"); @@ -485,12 +500,12 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { sprintf(cvstag,"CVSTAG=%s",dist->tag); putenv(cvstag); sprintf(cmd,"cvs -d %s co -r %s install",server->addr,dist->tag); - if(system(cmd)) { + if(exec(cmd)) { printf("Could not checkout install makefile.\n"); exit(EXIT_FAILURE); } sprintf(cmd,"%s %s",params.make_cmdline,dist->make_opts); - if(system(cmd)) { + if(exec(cmd)) { printf(MAKE_ERROR); exit(EXIT_FAILURE); } @@ -523,24 +538,37 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { } } } + if((flen=ftpGetSize(remote,fname))<1) { + printf("Cannot get size of distribution file: %s!\n",fname); + close(fout); + unlink(dstfname); + exit(EXIT_FAILURE); + } + printf("Downloading %s ",url); + offset=0; while((ret1=remote->read(remote,buf,sizeof(buf)))>0) { ret2=write(fout,buf,ret1); if(ret2!=ret1) { - printf("Error writing to %s\n",dstfname); + printf("\n!ERROR %d writing to %s\n",errno,dstfname); close(fout); unlink(dstfname); exit(EXIT_FAILURE); } + offset+=ret2; + printf("\b\b\b\b%3lu%%",(long)(((float)offset/(float)flen)*100.0)); + fflush(stdout); } + printf("\n"); + fflush(stdout); if(ret1<0) { - printf("Error downloading %s\n",fname); + printf("!ERROR downloading %s\n",fname); close(fout); unlink(dstfname); exit(EXIT_FAILURE); } close(fout); sprintf(cmd,"gzip -dc %s | tar -xvf -",dstfname); - if(system(cmd)) { + if(exec(cmd)) { printf("Error extracting %s\n",dstfname); unlink(dstfname); exit(EXIT_FAILURE); @@ -548,7 +576,7 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { unlink(dstfname); } sprintf(cmd,"%s %s",params.make_cmdline,dist->make_opts); - if(system(cmd)) { + if(exec(cmd)) { printf(MAKE_ERROR); exit(EXIT_FAILURE); } @@ -557,13 +585,13 @@ void install_sbbs(dist_t *dist,struct server_ent_t *server) { case LOCAL_FILE: for(i=0;dist->files[i][0];i++) { sprintf(cmd,"gzip -dc %s/%s | tar -xvf -",path,dist->files[i]); - if(system(cmd)) { + if(exec(cmd)) { printf("Error extracting %s/%s\n",path,dist->files[i]); exit(EXIT_FAILURE); } } sprintf(cmd,"%s %s",params.make_cmdline,dist->make_opts); - if(system(cmd)) { + if(exec(cmd)) { printf(MAKE_ERROR); exit(EXIT_FAILURE); } -- GitLab