diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 0d0a66c885cfc8b8245e369ac95c2637fe2e3165..5795b1709de69d52f1e1304c10f8320de0692c96 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -2082,7 +2082,7 @@ long SMBCALL smb_allochdr(smb_t* smb, ulong length)
 
 /****************************************************************************/
 /* Allocates space for index, but doesn't search for unused blocks          */
-/* Returns negative value on error 												*/
+/* Returns negative value on error 											*/
 /****************************************************************************/
 long SMBCALL smb_fallochdr(smb_t* smb, ulong length)
 {
@@ -2117,7 +2117,7 @@ long SMBCALL smb_fallochdr(smb_t* smb, ulong length)
 /************************************************************************/
 long SMBCALL smb_hallochdr(smb_t* smb)
 {
-	ulong l;
+	ulong offset;
 
 	if(smb->shd_fp==NULL) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error),"msgbase not open");
@@ -2126,12 +2126,16 @@ long SMBCALL smb_hallochdr(smb_t* smb)
 	fflush(smb->shd_fp);
 	if(fseek(smb->shd_fp,0L,SEEK_END))
 		return(SMB_ERR_SEEK);
-	l=ftell(smb->shd_fp);
-	if(l<smb->status.header_offset) 			 /* Header file truncated?!? */
+	offset=ftell(smb->shd_fp);
+	if(offset<smb->status.header_offset) 	/* Header file truncated?!? */
 		return(smb->status.header_offset);
-	while((l-smb->status.header_offset)%SHD_BLOCK_LEN)	/* Even block boundry */
-		l++;
-	return(l-smb->status.header_offset);
+
+	offset-=smb->status.header_offset;		/* SMB headers not included */
+
+	/* Even block boundry */
+	offset+=PAD_LENGTH_FOR_ALIGNMENT(offset,SHD_BLOCK_LEN);
+
+	return(offset);
 }
 
 /************************************************************************/
@@ -2142,32 +2146,34 @@ long SMBCALL smb_hallochdr(smb_t* smb)
 /************************************************************************/
 long SMBCALL smb_hallocdat(smb_t* smb)
 {
-	long l;
+	long offset;
 
 	if(smb->sdt_fp==NULL) {
-		safe_snprintf(smb->last_error,sizeof(smb->last_error),"msgbase not open");
+		safe_snprintf(smb->last_error,sizeof(smb->last_error)
+			,"msgbase not open");
 		return(SMB_ERR_NOT_OPEN);
 	}
 	fflush(smb->sdt_fp);
-	l=filelength(fileno(smb->sdt_fp));
-	if(l<0) {
-		safe_snprintf(smb->last_error,sizeof(smb->last_error),"invalid file length: %lu",(ulong)l);
+	offset=filelength(fileno(smb->sdt_fp));
+	if(offset<0) {
+		safe_snprintf(smb->last_error,sizeof(smb->last_error)
+			,"invalid file length: %lu",(ulong)offset);
 		return(SMB_ERR_FILE_LEN);
 	}
 	if(fseek(smb->sdt_fp,0L,SEEK_END))
 		return(SMB_ERR_SEEK);
-	l=ftell(smb->sdt_fp);
-	if(l<0) {
-		safe_snprintf(smb->last_error,sizeof(smb->last_error),"invalid file offset: %ld",l);
+	offset=ftell(smb->sdt_fp);
+	if(offset<0) {
+		safe_snprintf(smb->last_error,sizeof(smb->last_error)
+			,"invalid file offset: %ld",offset);
 		return(SMB_ERR_DAT_OFFSET);
 	}
-	if(l==0)
-		return(0);
-	while(l%SDT_BLOCK_LEN)					/* Make sure even block boundry */
-		l++;
-	return(l);
-}
 
+	/* Make sure even block boundry */
+	offset+=PAD_LENGTH_FOR_ALIGNMENT(offset,SDT_BLOCK_LEN);
+
+	return(offset);
+}
 
 int SMBCALL smb_feof(FILE* fp)
 {