From d080521b9f7238eb73bcde247e2b77271b87e235 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 21 Feb 2018 02:08:54 +0000 Subject: [PATCH] Will now repair a SMB status header's 'last_msg' value if it's lower than the highest message number indexed. --- src/sbbs3/fixsmb.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sbbs3/fixsmb.c b/src/sbbs3/fixsmb.c index 2174229bd5..5ebdea38e3 100644 --- a/src/sbbs3/fixsmb.c +++ b/src/sbbs3/fixsmb.c @@ -108,6 +108,7 @@ int fixsmb(char* sub) uint32_t* numbers = NULL; uint32_t total = 0; BOOL dupe_msgnum; + uint32_t highest = 0; memset(&smb,0,sizeof(smb)); @@ -247,6 +248,8 @@ int fixsmb(char* sub) msg.offset=n; if(renumber) msg.hdr.number=n+1; + if(msg.hdr.number > highest) + highest = msg.hdr.number; if(msg.hdr.netattr&MSG_INTRANSIT) { printf("Removing 'in transit' attribute\n"); msg.hdr.netattr&=~MSG_INTRANSIT; @@ -282,9 +285,12 @@ int fixsmb(char* sub) printf("\r%79s\r100%%\n",""); smb.status.total_msgs=n; if(renumber) - smb.status.last_msg=n; - else + smb.status.last_msg = highest; + else { + if(highest > smb.status.last_msg) + smb.status.last_msg = highest; sort_index(&smb); + } printf("Saving message base status (%lu total messages).\n",n); if((i=smb_putstatus(&smb))!=0) printf("\nsmb_putstatus returned %d: %s\n",i,smb.last_error); -- GitLab