From 794cece58e1dd30d628dbd3006dbee8b1b1efa71 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 14 Feb 2002 18:58:44 +0000
Subject: [PATCH] smb_stack() now pushes/pops all smb_t fields. Much simplified
 implementation.

---
 src/smblib/smblib.c | 44 +++++++-------------------------------------
 1 file changed, 7 insertions(+), 37 deletions(-)

diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 5083d10c03..ef396027b5 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -284,19 +284,9 @@ void SMBCALL smb_close_ha(smb_t* smb)
 /****************************************************************************/
 int SMBCALL smb_stack(smb_t* smb, int op)
 {
-	static char stack_file[SMB_STACK_LEN][128];
-	static FILE* stack_sdt[SMB_STACK_LEN],
-				*stack_shd[SMB_STACK_LEN],
-				*stack_sid[SMB_STACK_LEN],
-				*stack_sda[SMB_STACK_LEN],
-				*stack_sha[SMB_STACK_LEN];
+	static smb_t stack[SMB_STACK_LEN];
 	static int	stack_idx;
-	char		tmp_file[128];
-	FILE		*tmp_sdt,
-				*tmp_shd,
-				*tmp_sid,
-				*tmp_sda,
-				*tmp_sha;
+	smb_t		tmp_smb;
 
 	if(op==SMB_STACK_PUSH) {
 		if(stack_idx>=SMB_STACK_LEN) {
@@ -305,12 +295,7 @@ int SMBCALL smb_stack(smb_t* smb, int op)
 		}
 		if(smb->shd_fp==NULL || smb->sdt_fp==NULL || smb->sid_fp==NULL)
 			return(0);	  /* Msg base not open */
-		memcpy(stack_file[stack_idx],smb->file,128);
-		stack_sdt[stack_idx]=smb->sdt_fp;
-		stack_shd[stack_idx]=smb->shd_fp;
-		stack_sid[stack_idx]=smb->sid_fp;
-		stack_sda[stack_idx]=smb->sda_fp;
-		stack_sha[stack_idx]=smb->sha_fp;
+		memcpy(&stack[stack_idx],smb,sizeof(smb_t));
 		stack_idx++;
 		return(0); 
 	}
@@ -318,31 +303,16 @@ int SMBCALL smb_stack(smb_t* smb, int op)
 	if(!stack_idx)	/* Nothing on the stack, so do nothing */
 		return(0);
 	if(op==SMB_STACK_XCHNG) {
-		if(!smb->shd_fp)
+		if(smb->shd_fp==NULL)
 			return(0);
-		memcpy(tmp_file,smb->file,128);
-		tmp_sdt=smb->sdt_fp;
-		tmp_shd=smb->shd_fp;
-		tmp_sid=smb->sid_fp;
-		tmp_sda=smb->sda_fp;
-		tmp_sha=smb->sha_fp; 
+		memcpy(&tmp_smb,smb,sizeof(smb_t));
 	}
 
 	stack_idx--;
-	memcpy(smb->file,stack_file[stack_idx],128);
-	smb->sdt_fp=stack_sdt[stack_idx];
-	smb->shd_fp=stack_shd[stack_idx];
-	smb->sid_fp=stack_sid[stack_idx];
-	smb->sda_fp=stack_sda[stack_idx];
-	smb->sha_fp=stack_sha[stack_idx];
+	memcpy(smb,&stack[stack_idx],sizeof(smb_t));
 	if(op==SMB_STACK_XCHNG) {
+		memcpy(&stack[stack_idx],&tmp_smb,sizeof(smb_t));
 		stack_idx++;
-		memcpy(stack_file[stack_idx-1],tmp_file,128);
-		stack_sdt[stack_idx-1]=tmp_sdt;
-		stack_shd[stack_idx-1]=tmp_shd;
-		stack_sid[stack_idx-1]=tmp_sid;
-		stack_sda[stack_idx-1]=tmp_sda;
-		stack_sha[stack_idx-1]=tmp_sha; 
 	}
 	return(0);
 }
-- 
GitLab