Skip to content
Snippets Groups Projects
Commit 96fad161 authored by deuce's avatar deuce
Browse files

return from main rather than calling exit().

Using exit() can mess up graphical output and cause a hang when unexpected
Xlib async replies occur during the exit() process.
parent 8f7ce4f8
Branches
Tags
No related merge requests found
...@@ -256,9 +256,8 @@ static BOOL winsock_startup(void) ...@@ -256,9 +256,8 @@ static BOOL winsock_startup(void)
#endif #endif
void bail(int code) static int do_bail(int code)
{ {
#if defined(_WINSOCKAPI_) #if defined(_WINSOCKAPI_)
if(WSAInitialized && WSACleanup()!=0) if(WSAInitialized && WSACleanup()!=0)
lprintf(LOG_ERR,"!WSACleanup ERROR %d",ERROR_VALUE); lprintf(LOG_ERR,"!WSACleanup ERROR %d",ERROR_VALUE);
...@@ -271,7 +270,12 @@ void bail(int code) ...@@ -271,7 +270,12 @@ void bail(int code)
if(code) if(code)
fprintf(statfp,"\nReturning error code: %d\n",code); fprintf(statfp,"\nReturning error code: %d\n",code);
exit(code); return(code);
}
void bail(int code)
{
exit(do_bail(code));
} }
static JSBool static JSBool
...@@ -801,7 +805,7 @@ int main(int argc, char **argv, char** environ) ...@@ -801,7 +805,7 @@ int main(int argc, char **argv, char** environ)
errfp=stderr; errfp=stderr;
if((nulfp=fopen(_PATH_DEVNULL,"w+"))==NULL) { if((nulfp=fopen(_PATH_DEVNULL,"w+"))==NULL) {
perror(_PATH_DEVNULL); perror(_PATH_DEVNULL);
bail(-1); return(do_bail(-1));
} }
if(isatty(fileno(stderr))) if(isatty(fileno(stderr)))
statfp=stderr; statfp=stderr;
...@@ -820,7 +824,7 @@ int main(int argc, char **argv, char** environ) ...@@ -820,7 +824,7 @@ int main(int argc, char **argv, char** environ)
scfg.size=sizeof(scfg); scfg.size=sizeof(scfg);
if(!winsock_startup()) if(!winsock_startup())
bail(2); return(do_bail(2));
for(argn=1;argn<argc && module==NULL;argn++) { for(argn=1;argn<argc && module==NULL;argn++) {
if(argv[argn][0]=='-') { if(argv[argn][0]=='-') {
...@@ -878,14 +882,14 @@ int main(int argc, char **argv, char** environ) ...@@ -878,14 +882,14 @@ int main(int argc, char **argv, char** environ)
if(*p==0) p=argv[++argn]; if(*p==0) p=argv[++argn];
if((errfp=fopen(p,omode))==NULL) { if((errfp=fopen(p,omode))==NULL) {
perror(p); perror(p);
bail(1); return(do_bail(1));
} }
break; break;
case 'o': case 'o':
if(*p==0) p=argv[++argn]; if(*p==0) p=argv[++argn];
if((confp=fopen(p,omode))==NULL) { if((confp=fopen(p,omode))==NULL) {
perror(p); perror(p);
bail(1); return(do_bail(1));
} }
break; break;
case 'q': case 'q':
...@@ -913,7 +917,7 @@ int main(int argc, char **argv, char** environ) ...@@ -913,7 +917,7 @@ int main(int argc, char **argv, char** environ)
case 'v': case 'v':
banner(statfp); banner(statfp);
fprintf(statfp,"%s\n",(char *)JS_GetImplementationVersion()); fprintf(statfp,"%s\n",(char *)JS_GetImplementationVersion());
bail(0); return(do_bail(0));
#if defined(__unix__) #if defined(__unix__)
case 'd': case 'd':
daemonize=TRUE; daemonize=TRUE;
...@@ -923,7 +927,7 @@ int main(int argc, char **argv, char** environ) ...@@ -923,7 +927,7 @@ int main(int argc, char **argv, char** environ)
fprintf(errfp,"\n!Unsupported option: %s\n",argv[argn]); fprintf(errfp,"\n!Unsupported option: %s\n",argv[argn]);
case '?': case '?':
usage(errfp); usage(errfp);
bail(1); return(do_bail(1));
} }
continue; continue;
} }
...@@ -935,7 +939,7 @@ int main(int argc, char **argv, char** environ) ...@@ -935,7 +939,7 @@ int main(int argc, char **argv, char** environ)
fprintf(errfp,"\nSBBSCTRL environment variable not set and -c option not specified.\n"); fprintf(errfp,"\nSBBSCTRL environment variable not set and -c option not specified.\n");
fprintf(errfp,"\nExample: SET SBBSCTRL=/sbbs/ctrl\n"); fprintf(errfp,"\nExample: SET SBBSCTRL=/sbbs/ctrl\n");
fprintf(errfp,"\n or: %s -c /sbbs/ctrl [module]\n",argv[0]); fprintf(errfp,"\n or: %s -c /sbbs/ctrl [module]\n",argv[0]);
bail(1); return(do_bail(1));
} }
SAFECOPY(scfg.ctrl_dir,p); SAFECOPY(scfg.ctrl_dir,p);
} }
...@@ -943,7 +947,7 @@ int main(int argc, char **argv, char** environ) ...@@ -943,7 +947,7 @@ int main(int argc, char **argv, char** environ)
if(module==NULL && isatty(fileno(stdin))) { if(module==NULL && isatty(fileno(stdin))) {
fprintf(errfp,"\n!Module name not specified\n"); fprintf(errfp,"\n!Module name not specified\n");
usage(errfp); usage(errfp);
bail(1); return(do_bail(1));
} }
banner(statfp); banner(statfp);
...@@ -954,7 +958,7 @@ int main(int argc, char **argv, char** environ) ...@@ -954,7 +958,7 @@ int main(int argc, char **argv, char** environ)
fprintf(statfp,"\nLoading configuration files from %s\n",scfg.ctrl_dir); fprintf(statfp,"\nLoading configuration files from %s\n",scfg.ctrl_dir);
if(!load_cfg(&scfg,NULL,TRUE,error)) { if(!load_cfg(&scfg,NULL,TRUE,error)) {
fprintf(errfp,"!ERROR loading configuration files: %s\n",error); fprintf(errfp,"!ERROR loading configuration files: %s\n",error);
bail(1); return(do_bail(1));
} }
SAFECOPY(scfg.temp_dir,"../temp"); SAFECOPY(scfg.temp_dir,"../temp");
prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir)); prep_dir(scfg.ctrl_dir, scfg.temp_dir, sizeof(scfg.temp_dir));
...@@ -1006,7 +1010,7 @@ int main(int argc, char **argv, char** environ) ...@@ -1006,7 +1010,7 @@ int main(int argc, char **argv, char** environ)
if(!js_init(environ)) { if(!js_init(environ)) {
lprintf(LOG_ERR,"!JavaScript initialization failure"); lprintf(LOG_ERR,"!JavaScript initialization failure");
bail(1); return(do_bail(1));
} }
fprintf(statfp,"\n"); fprintf(statfp,"\n");
...@@ -1023,8 +1027,6 @@ int main(int argc, char **argv, char** environ) ...@@ -1023,8 +1027,6 @@ int main(int argc, char **argv, char** environ)
} while((recycled || loop) && !terminated); } while((recycled || loop) && !terminated);
bail(result); return(do_bail(result));
return(-1); /* never gets here */
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment