From d79297fdf1f504fe88fce130f0c75f199e125674 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Wed, 3 Mar 2010 08:23:11 +0000
Subject: [PATCH] Add a pointer to the log level to the [XZ]modem structs. 
 This allows avoiding the vsnprintf() call in lprintf().

---
 src/sbbs3/sexyz.c  | 2 ++
 src/sbbs3/xmodem.c | 3 +++
 src/sbbs3/xmodem.h | 1 +
 src/sbbs3/zmodem.c | 3 +++
 src/sbbs3/zmodem.h | 1 +
 5 files changed, 10 insertions(+)

diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c
index 11540941e3..40e6d93fdc 100644
--- a/src/sbbs3/sexyz.c
+++ b/src/sbbs3/sexyz.c
@@ -1467,6 +1467,8 @@ int main(int argc, char **argv)
 
 	xmodem_init(&xm,NULL,&mode,lputs,xmodem_progress,send_byte,recv_byte,is_connected,NULL,flush);
 	zmodem_init(&zm,NULL,lputs,zmodem_progress,send_byte,recv_byte,is_connected,NULL,data_waiting,flush);
+	xm->log_level=&log_level;
+	zm->log_level=&log_level;
 
 	/* Generate path/sexyz[.host].ini from path/sexyz[.exe] */
 	SAFECOPY(str,argv[0]);
diff --git a/src/sbbs3/xmodem.c b/src/sbbs3/xmodem.c
index 3070597414..2c288d9ca3 100644
--- a/src/sbbs3/xmodem.c
+++ b/src/sbbs3/xmodem.c
@@ -60,6 +60,9 @@ static int lprintf(xmodem_t* xm, int level, const char *fmt, ...)
 
 	if(xm->lputs==NULL)
 		return(-1);
+	if(xm->log_level != NULL)
+		if(level > *xm->log_level)
+			return 0;
 
     va_start(argptr,fmt);
     vsnprintf(sbuf,sizeof(sbuf),fmt,argptr);
diff --git a/src/sbbs3/xmodem.h b/src/sbbs3/xmodem.h
index ca332f2775..7eefda7e0b 100644
--- a/src/sbbs3/xmodem.h
+++ b/src/sbbs3/xmodem.h
@@ -65,6 +65,7 @@ typedef struct {
 	ulong		total_bytes;
 	unsigned	sent_files;
 	ulong		sent_bytes;
+	int			*log_level;
 	int			(*lputs)(void*, int level, const char* str);
 	void		(*progress)(void*, unsigned block_num, ulong offset, ulong fsize, time_t t);
 	int			(*send_byte)(void*, uchar ch, unsigned timeout);
diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c
index 22ffae7c8a..07c6db4165 100644
--- a/src/sbbs3/zmodem.c
+++ b/src/sbbs3/zmodem.c
@@ -56,6 +56,9 @@ static int lprintf(zmodem_t* zm, int level, const char *fmt, ...)
 
 	if(zm->lputs==NULL)
 		return(-1);
+	if(zm->log_level != NULL)
+		if(level > *zm->log_level)
+			return 0;
 
     va_start(argptr,fmt);
     vsnprintf(sbuf,sizeof(sbuf),fmt,argptr);
diff --git a/src/sbbs3/zmodem.h b/src/sbbs3/zmodem.h
index a7d37b1058..6b51be65a7 100644
--- a/src/sbbs3/zmodem.h
+++ b/src/sbbs3/zmodem.h
@@ -272,6 +272,7 @@ typedef struct {
 	unsigned	block_size;
 	unsigned	max_block_size;
 	uint32_t	max_file_size;		/* 0 = unlimited */
+	int			*log_level;
 
 	/* Callbacks */
 	void*		cbdata;
-- 
GitLab