From 25af5ed9090c8c0f20fa159cdf132606c51ab2b5 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 1 Aug 2002 11:07:22 +0000
Subject: [PATCH] Two fixes to smb_freemsgdat(): doesn't do anything if msgbase
 uses hyper allocation method (allocation files aren't used) and closes
 allocation file (if opened) on error.

---
 src/smblib/smblib.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 19be9fc55a..ae7814b4ae 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -1368,9 +1368,13 @@ int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length
 			, ushort headers)
 {
 	int		da_opened=0;
+	int		retval=0;
 	ushort	i;
 	ulong	l,blocks;
 
+	if(smb->status.attr&SMB_HYPERALLOC)	/* do nothing */
+		return(0);
+
 	blocks=smb_datblocks(length);
 
 	if(smb->sda_fp==NULL) {
@@ -1385,11 +1389,13 @@ int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length
 			sprintf(smb->last_error
 				,"seeking to %ld of allocation file"
 				,((offset/SDT_BLOCK_LEN)+l)*2L);
-			return(1);
+			retval=1;
+			break;
 		}
 		if(!fread(&i,2,1,smb->sda_fp)) {
 			sprintf(smb->last_error,"reading allocation bytes");
-			return(2);
+			retval=2;
+			break;
 		}
 		if(!headers || headers>i)
 			i=0;			/* don't want to go negative */
@@ -1397,17 +1403,19 @@ int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length
 			i-=headers;
 		if(fseek(smb->sda_fp,-2L,SEEK_CUR)) {
 			sprintf(smb->last_error,"seeking backwards 2 bytes in allocation file");
-			return(3);
+			retval=3;
+			break;
 		}
 		if(!fwrite(&i,2,1,smb->sda_fp)) {
 			sprintf(smb->last_error,"writing allocation bytes");
-			return(4); 
+			retval=4; 
+			break;
 		}
 	}
 	fflush(smb->sda_fp);
 	if(da_opened)
 		smb_close_da(smb);
-	return(0);
+	return(retval);
 }
 
 /****************************************************************************/
-- 
GitLab