From 35785af326a906ecf43519a3815ff7058f4f7f6a Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Tue, 15 Sep 2020 00:07:53 -0700 Subject: [PATCH] Fix observed crash on a fresh install (no data/user.dat) on Windows XP Apparently, calling close(-1) on WinXP will cause a crash. Don't do that. Make closeuserdat() resilient to an un-open file descriptor and use it instead of close(). --- src/sbbs3/main.cpp | 4 ++-- src/sbbs3/str.cpp | 2 +- src/sbbs3/userdat.c | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index dc20a334cd..f1b26382e5 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2785,7 +2785,7 @@ void event_thread(void* arg) sbbs->online=FALSE; } } - close(userfile); + closeuserdat(userfile); lastprepack=(time32_t)now; SAFEPRINTF(str,"%stime.dab",sbbs->cfg.ctrl_dir); if((file=sbbs->nopen(str,O_WRONLY))==-1) { @@ -4824,7 +4824,7 @@ void sbbs_t::daily_maint(void) putuserrec(&cfg,user.number,U_MISC,8,ultoa(user.misc|DELETED,str,16)); } } - close(userfile); + closeuserdat(userfile); lputs(LOG_INFO,"DAILY: Purging deleted/expired e-mail"); SAFEPRINTF(smb.file,"%smail",cfg.data_dir); diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp index 3200e3f67f..6607442ebf 100644 --- a/src/sbbs3/str.cpp +++ b/src/sbbs3/str.cpp @@ -111,7 +111,7 @@ void sbbs_t::userlist(long mode) } j++; } - close(userfile); + closeuserdat(userfile); if(i<=k) { /* aborted */ if(sort) for(i=0;i<j;i++) diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 5b035417cd..c1c7837d6b 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -207,6 +207,8 @@ int openuserdat(scfg_t* cfg, BOOL for_modify) int closeuserdat(int file) { + if(file < 1) + return -1; return close(file); } -- GitLab