From f1243ec47b48128a725400db33e1ae19fc7c9666 Mon Sep 17 00:00:00 2001 From: "Rob Swindell (on Windows 11)" <rob@synchro.net> Date: Tue, 24 Dec 2024 03:48:30 -0800 Subject: [PATCH] Use opennodedat() always to open the node.dab file Include O_CREAT access mode flag in opennodedat(). I experimented with excluding O_DENYNONE when the NM_CLOSENODEDAB flag is set (to hopefully work-around MacOS Samba node.dab corruption issue), but that didn't work with SBBSCTRL leaving the file open in SH_DENYNONE mode, so will have revist that, but using a common open function helps. --- src/sbbs3/getnode.cpp | 5 ++--- src/sbbs3/main.cpp | 11 +++++------ src/sbbs3/userdat.c | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp index 1249685a6c..5e0d13c811 100644 --- a/src/sbbs3/getnode.cpp +++ b/src/sbbs3/getnode.cpp @@ -43,12 +43,11 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit) if(node!=&thisnode) memset(node,0,sizeof(node_t)); - SAFEPRINTF(str,"%snode.dab",cfg.ctrl_dir); pthread_mutex_lock(&nodefile_mutex); if(nodefile==-1) { - if((nodefile=nopen(str,O_RDWR|O_DENYNONE))==-1) { + if((nodefile=opennodedat(&cfg))==-1) { pthread_mutex_unlock(&nodefile_mutex); - errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_DENYNONE); + errormsg(WHERE,ERR_OPEN,"nodefile",number); return false; } } diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 9cac3aabff..2b28fafdde 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -3630,11 +3630,10 @@ bool sbbs_t::init() } /* Shared NODE files */ - SAFEPRINTF2(str,"%s%s",cfg.ctrl_dir,"node.dab"); pthread_mutex_lock(&nodefile_mutex); - if((nodefile=nopen(str,O_DENYNONE|O_RDWR|O_CREAT))==-1) { + if((nodefile=opennodedat(&cfg))==-1) { pthread_mutex_unlock(&nodefile_mutex); - errormsg(WHERE, ERR_OPEN, str, cfg.node_num); + errormsg(WHERE, ERR_OPEN, "nodefile", cfg.node_num); return(false); } memset(&node,0,sizeof(node_t)); /* write NULL to node struct */ @@ -3643,13 +3642,13 @@ bool sbbs_t::init() lseek(nodefile,0L,SEEK_END); if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) { pthread_mutex_unlock(&nodefile_mutex); - errormsg(WHERE,ERR_WRITE,str,sizeof(node_t)); + errormsg(WHERE,ERR_WRITE,"nodefile",sizeof(node_t)); break; } } if(chsize(nodefile, (off_t)(cfg.sys_nodes*sizeof(node_t))) != 0) { pthread_mutex_unlock(&nodefile_mutex); - errormsg(WHERE, ERR_LEN, str, cfg.sys_nodes*sizeof(node_t)); + errormsg(WHERE, ERR_LEN, "ndoefile", cfg.sys_nodes*sizeof(node_t)); } for(i=0; cfg.node_num>0 && i<LOOP_NODEDAB; i++) { if(lock(nodefile,(cfg.node_num-1)*sizeof(node_t),sizeof(node_t))==0) { @@ -3665,7 +3664,7 @@ bool sbbs_t::init() pthread_mutex_unlock(&nodefile_mutex); if(i>=LOOP_NODEDAB) { - errormsg(WHERE, ERR_LOCK, str, cfg.node_num); + errormsg(WHERE, ERR_LOCK, "nodefile", cfg.node_num); return(false); } diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 65c1a79e4a..ad3e15c702 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1099,7 +1099,7 @@ int opennodedat(scfg_t* cfg) return -1; SAFEPRINTF(fname, "%snode.dab", cfg->ctrl_dir); - return nopen(fname, O_RDWR|O_DENYNONE); + return nopen(fname, O_RDWR | O_CREAT | O_DENYNONE); } /****************************************************************************/ -- GitLab