diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index aea3e414ac8dcd2486889a9ecd75c2bcdd072820..93eca1f0be162b934cad255b93b355cfb3da4c3c 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2914,40 +2914,47 @@ void event_thread(void* arg) strcat(str,"*.rep"); glob(str,0,NULL,&g); for(i=0;i<(int)g.gl_pathc && !sbbs->terminated;i++) { - if(flength(g.gl_pathv[i]) < 1) + char* fname = g.gl_pathv[i]; + if(flength(fname) < 1) continue; sbbs->useron.number = 0; - sbbs->lprintf(LOG_DEBUG, "Inbound QWK Reply Packet detected: %s", g.gl_pathv[i]); - sbbs->useron.number = atoi(g.gl_pathv[i]+offset); + sbbs->lprintf(LOG_DEBUG, "Inbound QWK Reply Packet detected: %s", fname); + sbbs->useron.number = atoi(fname+offset); getuserdat(&sbbs->cfg,&sbbs->useron); if(sbbs->useron.number != 0 && !(sbbs->useron.misc&(DELETED|INACTIVE))) { time_t t; - SAFEPRINTF(semfile,"%s.lock",g.gl_pathv[i]); + SAFEPRINTF(semfile,"%s.lock",fname); if(!fmutex(semfile,startup->host_name,TIMEOUT_MUTEX_FILE, &t)) { sbbs->lprintf(LOG_INFO," %s exists (unpack in progress?) since %s", semfile, time_as_hhmm(&sbbs->cfg, t, str)); continue; } + if(!fexist(fname)) { + sbbs->lprintf(LOG_INFO, "%s already gone", fname); + if(remove(semfile) != 0) + sbbs->errormsg(WHERE, ERR_REMOVE, semfile, 0); + continue; + } sbbs->online=ON_LOCAL; sbbs->console|=CON_L_ECHO; sbbs->getusrsubs(); - bool success = sbbs->unpack_rep(g.gl_pathv[i]); + bool success = sbbs->unpack_rep(fname); sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES); /* clean-up temp_dir after unpacking */ sbbs->online=false; sbbs->console&=~CON_L_ECHO; /* putuserdat? */ if(success) { - if(remove(g.gl_pathv[i])) - sbbs->errormsg(WHERE, ERR_REMOVE, g.gl_pathv[i], 0); + if(remove(fname)) + sbbs->errormsg(WHERE, ERR_REMOVE, fname, 0); } else { char badpkt[MAX_PATH+1]; - SAFEPRINTF2(badpkt, "%s.%" PRIx64 ".bad", g.gl_pathv[i], (uint64_t)time(NULL)); + SAFEPRINTF2(badpkt, "%s.%" PRIx64 ".bad", fname, (uint64_t)time(NULL)); (void)remove(badpkt); - if(rename(g.gl_pathv[i], badpkt) == 0) - sbbs->lprintf(LOG_NOTICE, "%s renamed to %s", g.gl_pathv[i], badpkt); + if(rename(fname, badpkt) == 0) + sbbs->lprintf(LOG_NOTICE, "%s renamed to %s", fname, badpkt); else sbbs->lprintf(LOG_ERR, "!ERROR %d (%s) renaming %s to %s" - ,errno, strerror(errno), g.gl_pathv[i], badpkt); + ,errno, strerror(errno), fname, badpkt); SAFEPRINTF(badpkt, "%u.rep.*.bad", sbbs->useron.number); SAFEPRINTF(str,"%sfile/", sbbs->cfg.data_dir); sbbs->delfiles(str, badpkt, /* keep: */10); @@ -2956,9 +2963,9 @@ void event_thread(void* arg) sbbs->errormsg(WHERE, ERR_REMOVE, semfile, 0); } else { - sbbs->lprintf(LOG_INFO, "Removing: %s", g.gl_pathv[i]); - if(remove(g.gl_pathv[i])) - sbbs->errormsg(WHERE, ERR_REMOVE, g.gl_pathv[i], 0); + sbbs->lprintf(LOG_INFO, "Removing: %s", fname); + if(remove(fname)) + sbbs->errormsg(WHERE, ERR_REMOVE, fname, 0); } } globfree(&g); @@ -2970,16 +2977,23 @@ void event_thread(void* arg) offset=strlen(sbbs->cfg.data_dir)+4; glob(str,0,NULL,&g); for(i=0;i<(int)g.gl_pathc && !sbbs->terminated;i++) { + char* fname = g.gl_pathv[i]; sbbs->useron.number = 0; - sbbs->lprintf(LOG_INFO, "QWK pack semaphore signaled: %s", g.gl_pathv[i]); - sbbs->useron.number = atoi(g.gl_pathv[i]+offset); + sbbs->lprintf(LOG_INFO, "QWK pack semaphore signaled: %s", fname); + sbbs->useron.number = atoi(fname+offset); SAFEPRINTF2(semfile,"%spack%04u.lock",sbbs->cfg.data_dir,sbbs->useron.number); time_t t; + getuserdat(&sbbs->cfg,&sbbs->useron); if(!fmutex(semfile,startup->host_name,TIMEOUT_MUTEX_FILE, &t)) { sbbs->lprintf(LOG_INFO,"%s exists (pack in progress?) since %s", semfile, time_as_hhmm(&sbbs->cfg, t, str)); continue; } - getuserdat(&sbbs->cfg,&sbbs->useron); + if(!fexist(fname)) { + sbbs->lprintf(LOG_INFO, "%s already gone", fname); + if(remove(semfile)) + sbbs->errormsg(WHERE, ERR_REMOVE, semfile, 0); + continue; + } if(sbbs->useron.number != 0 && !(sbbs->useron.misc&(DELETED|INACTIVE))) { sbbs->lprintf(LOG_INFO, "Packing QWK Message Packet"); sbbs->online=ON_LOCAL; @@ -3002,8 +3016,8 @@ void event_thread(void* arg) sbbs->console&=~CON_L_ECHO; sbbs->online=false; } - if(fexist(g.gl_pathv[i]) && remove(g.gl_pathv[i]) != 0) - sbbs->errormsg(WHERE, ERR_REMOVE, g.gl_pathv[i], 0); + if(fexist(fname) && remove(fname) != 0) + sbbs->errormsg(WHERE, ERR_REMOVE, fname, 0); if(remove(semfile)) sbbs->errormsg(WHERE, ERR_REMOVE, semfile, 0); }