diff options
author | Xiang Xiao <xiaoxiang@xiaomi.com> | 2021-05-10 19:27:31 +0800 |
---|---|---|
committer | Jakub Jelen <jjelen@redhat.com> | 2021-06-10 14:56:29 +0200 |
commit | 14276f0b516f0bec63d8a737dba97334c68e528c (patch) | |
tree | 14b197aaedb3cf4c2de56918d9d3a74b79f37ca5 /src | |
parent | 672c1f8a3a3ee9b76283583df1e9d1f4fd0a8d17 (diff) | |
download | libssh-14276f0b516f0bec63d8a737dba97334c68e528c.tar.gz libssh-14276f0b516f0bec63d8a737dba97334c68e528c.tar.xz libssh-14276f0b516f0bec63d8a737dba97334c68e528c.zip |
log: add ssh_vlog to save the stack space
and add LOG_SIZE macro to control the buffer size
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Change-Id: I3eaeea001fc531fdb55074fc3a9d140b27847c1f
Diffstat (limited to 'src')
-rw-r--r-- | src/libssh.map | 1 | ||||
-rw-r--r-- | src/log.c | 48 |
2 files changed, 32 insertions, 17 deletions
diff --git a/src/libssh.map b/src/libssh.map index e30c2449..82cdfa21 100644 --- a/src/libssh.map +++ b/src/libssh.map @@ -405,6 +405,7 @@ LIBSSH_4_5_0 # Released ssh_userauth_publickey_auto_get_current_identity; ssh_userauth_try_publickey; ssh_version; + ssh_vlog; ssh_write_knownhost; string_burn; string_copy; @@ -38,6 +38,10 @@ #include "libssh/misc.h" #include "libssh/session.h" +#ifndef LOG_SIZE +#define LOG_SIZE 1024 +#endif + static LIBSSH_THREAD int ssh_log_level; static LIBSSH_THREAD ssh_logging_callback ssh_log_cb; static LIBSSH_THREAD void *ssh_log_userdata; @@ -94,38 +98,52 @@ static void ssh_log_stderr(int verbosity, fprintf(stderr, " %s\n", buffer); } +static void ssh_log_custom(ssh_logging_callback log_fn, + int verbosity, + const char *function, + const char *buffer) +{ + char buf[LOG_SIZE + 64]; + + snprintf(buf, sizeof(buf), "%s: %s", function, buffer); + log_fn(verbosity, function, buf, ssh_get_log_userdata()); +} + void ssh_log_function(int verbosity, const char *function, const char *buffer) { ssh_logging_callback log_fn = ssh_get_log_callback(); - if (log_fn) { - char buf[1024]; - snprintf(buf, sizeof(buf), "%s: %s", function, buffer); - - log_fn(verbosity, - function, - buf, - ssh_get_log_userdata()); + if (log_fn) { + ssh_log_custom(log_fn, verbosity, function, buffer); return; } ssh_log_stderr(verbosity, function, buffer); } +void ssh_vlog(int verbosity, + const char *function, + const char *format, + va_list *va) +{ + char buffer[LOG_SIZE]; + + vsnprintf(buffer, sizeof(buffer), format, *va); + ssh_log_function(verbosity, function, buffer); +} + void _ssh_log(int verbosity, const char *function, const char *format, ...) { - char buffer[1024]; va_list va; if (verbosity <= ssh_get_log_level()) { va_start(va, format); - vsnprintf(buffer, sizeof(buffer), format, va); + ssh_vlog(verbosity, function, format, &va); va_end(va); - ssh_log_function(verbosity, function, buffer); } } @@ -135,14 +153,12 @@ void ssh_log(ssh_session session, int verbosity, const char *format, ...) { - char buffer[1024]; va_list va; if (verbosity <= session->common.log_verbosity) { va_start(va, format); - vsnprintf(buffer, sizeof(buffer), format, va); + ssh_vlog(verbosity, "", format, &va); va_end(va); - ssh_log_function(verbosity, "", buffer); } } @@ -157,14 +173,12 @@ void ssh_log_common(struct ssh_common_struct *common, const char *function, const char *format, ...) { - char buffer[1024]; va_list va; if (verbosity <= common->log_verbosity) { va_start(va, format); - vsnprintf(buffer, sizeof(buffer), format, va); + ssh_vlog(verbosity, function, format, &va); va_end(va); - ssh_log_function(verbosity, function, buffer); } } |