diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2011-07-19 22:16:28 +0200 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2011-07-19 22:16:28 +0200 |
commit | da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9 (patch) | |
tree | b13cc18e78ff7a0549974b4823678f189fe82b6a /src/log.c | |
parent | dc9ac022f5590272cc7a3dc18726802ffdc73c8f (diff) | |
download | libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.gz libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.xz libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.zip |
Fixes the ssh_log issue on ssh_bind handles.
Diffstat (limited to 'src/log.c')
-rw-r--r-- | src/log.c | 64 |
1 files changed, 45 insertions, 19 deletions
@@ -37,6 +37,33 @@ * @{ */ +/** @internal + * @brief do the actual work of logging an event + */ + +static void do_ssh_log(struct ssh_common_struct *common, int verbosity, + const char *buffer){ + char indent[256]; + int min; + if (common->callbacks && common->callbacks->log_function) { + common->callbacks->log_function((ssh_session)common, verbosity, buffer, + common->callbacks->userdata); + } else if (verbosity == SSH_LOG_FUNCTIONS) { + if (common->log_indent > 255) { + min = 255; + } else { + min = common->log_indent; + } + + memset(indent, ' ', min); + indent[min] = '\0'; + + fprintf(stderr, "[func] %s%s\n", indent, buffer); + } else { + fprintf(stderr, "[%d] %s\n", verbosity, buffer); + } +} + /** * @brief Log a SSH event. * @@ -48,32 +75,31 @@ */ void ssh_log(ssh_session session, int verbosity, const char *format, ...) { char buffer[1024]; - char indent[256]; - int min; va_list va; - if (verbosity <= session->log_verbosity) { + if (verbosity <= session->common.log_verbosity) { va_start(va, format); vsnprintf(buffer, sizeof(buffer), format, va); va_end(va); + do_ssh_log(&session->common, verbosity, buffer); + } +} - if (session->callbacks && session->callbacks->log_function) { - session->callbacks->log_function(session, verbosity, buffer, - session->callbacks->userdata); - } else if (verbosity == SSH_LOG_FUNCTIONS) { - if (session->log_indent > 255) { - min = 255; - } else { - min = session->log_indent; - } - - memset(indent, ' ', min); - indent[min] = '\0'; +/** @internal + * @brief log a SSH event with a common pointer + * @param common The SSH/bind session. + * @param verbosity The verbosity of the event. + * @param format The format string of the log entry. + */ +void ssh_log_common(struct ssh_common_struct *common, int verbosity, const char *format, ...){ + char buffer[1024]; + va_list va; - fprintf(stderr, "[func] %s%s\n", indent, buffer); - } else { - fprintf(stderr, "[%d] %s\n", verbosity, buffer); - } + if (verbosity <= common->log_verbosity) { + va_start(va, format); + vsnprintf(buffer, sizeof(buffer), format, va); + va_end(va); + do_ssh_log(common, verbosity, buffer); } } |