diff --git a/src/sbbs3/fixsmb.c b/src/sbbs3/fixsmb.c index 2174229bd565fb03beaa53ac1bfc06a452f3f4f0..5ebdea38e31685412e3198f04cf08ebc42958191 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);