diff --git a/src/sbbs3/file.cpp b/src/sbbs3/file.cpp
index 18b8c54f1d2589ffaef01932544ca1a0decdb7a1..38458a04e9bd050a8e023a4e3046ee02cc6969da 100644
--- a/src/sbbs3/file.cpp
+++ b/src/sbbs3/file.cpp
@@ -301,3 +301,11 @@ bool sbbs_t::checkfname(char *fname)
 	}
 	return(true);
 }
+
+long sbbs_t::delfiles(const char *inpath, const char *spec, size_t keep)
+{
+	long result = ::delfiles(inpath, spec, keep);
+	if(result < 0)
+		errormsg(WHERE, ERR_REMOVE, inpath, result, spec);
+	return result;
+}
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 7fc95bc97c1e385ff07de2d0c59f876f3e23dc76..5a29215dd3940bdaaa253dcdee75ab32493a817e 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -2689,7 +2689,7 @@ void event_thread(void* arg)
 					sbbs->console|=CON_L_ECHO;
 					sbbs->getusrsubs();
 					bool success = sbbs->unpack_rep(g.gl_pathv[i]);
-					delfiles(sbbs->cfg.temp_dir,ALLFILES);		/* clean-up temp_dir after unpacking */
+					sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);		/* clean-up temp_dir after unpacking */
 					sbbs->batch_create_list();	/* FREQs? */
 					sbbs->batdn_total=0;
 					sbbs->online=FALSE;
@@ -2701,7 +2701,6 @@ void event_thread(void* arg)
 							sbbs->errormsg(WHERE, ERR_REMOVE, g.gl_pathv[i], 0);
 					} else {
 						char badpkt[MAX_PATH+1];
-						SAFECOPY(badpkt, g.gl_pathv[i]);
 						SAFEPRINTF2(badpkt, "%s.%lx.bad", g.gl_pathv[i], time(NULL));
 						remove(badpkt);
 						if(rename(g.gl_pathv[i], badpkt) == 0)
@@ -2758,7 +2757,7 @@ void event_thread(void* arg)
 						remove(bat_list);
 					} else
 						sbbs->lputs(LOG_INFO, "No packet created (no new messages)");
-					delfiles(sbbs->cfg.temp_dir,ALLFILES);
+					sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
 					sbbs->console&=~CON_L_ECHO;
 					sbbs->online=FALSE;
 				}
@@ -2809,7 +2808,7 @@ void event_thread(void* arg)
 							sbbs->qwk_success(l,0,1);
 							sbbs->putmsgptrs();
 						}
-						delfiles(sbbs->cfg.temp_dir,ALLFILES);
+						sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
 						sbbs->console&=~CON_L_ECHO;
 						sbbs->online=FALSE;
 					}
@@ -2935,7 +2934,7 @@ void event_thread(void* arg)
 								sbbs->lprintf(LOG_ERR, "!ERROR %d (%s) renaming %s to %s"
 									,errno, strerror(errno), str, newname);
 						}
-						delfiles(sbbs->cfg.temp_dir,ALLFILES);
+						sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
 						sbbs->console&=~CON_L_ECHO;
 						sbbs->online=FALSE;
 						if(remove(str))
@@ -2994,7 +2993,7 @@ void event_thread(void* arg)
 						close(file);
 					}
 				}
-				delfiles(sbbs->cfg.temp_dir,ALLFILES);
+				sbbs->delfiles(sbbs->cfg.temp_dir,ALLFILES);
 
 				sbbs->cfg.qhub[i]->last=time32(NULL);
 				SAFEPRINTF(str,"%sqnet.dab",sbbs->cfg.ctrl_dir);
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 487c7622b903ece2de8b4e79cafd016324934e71..d5c30254f5bea85b44e57c7b95e5ea18c46c14d3 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -923,6 +923,7 @@ public:
 	char *	getfilespec(char *str);
 	bool	checkfname(char *fname);
 	bool	addtobatdl(file_t* f);
+	long	delfiles(const char *inpath, const char *spec, size_t keep = 0);
 
 	/* listfile.cpp */
 	bool	listfile(const char *fname, const char *buf, uint dirnum