[X2Go-Commits] [libx2goclient] 02/04: src/x2goclient-network-ssh.c: add private wrapper function x2goclient_network_ssh_log_std_str ().
git-admin at x2go.org
git-admin at x2go.org
Mon Jun 29 15:31:28 CEST 2020
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository libx2goclient.
commit 1099f5951685b5abb3c7937011dc0217f4d21a21
Author: Mihai Moldovan <ionic at ionic.de>
Date: Mon Jun 29 14:31:36 2020 +0200
src/x2goclient-network-ssh.c: add private wrapper function x2goclient_network_ssh_log_std_str ().
Prints out an stdout or stderr string in a potentially multi-stage
process if the size is bigger than INT_MAX.
---
src/x2goclient-network-ssh.c | 53 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/src/x2goclient-network-ssh.c b/src/x2goclient-network-ssh.c
index a515f85..96ec797 100644
--- a/src/x2goclient-network-ssh.c
+++ b/src/x2goclient-network-ssh.c
@@ -31,6 +31,7 @@
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
+#include <stdbool.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -131,6 +132,7 @@ static GSocketAddress* x2goclient_network_ssh_parse_sockspec (X2GoClientNetwork
static gboolean x2goclient_network_ssh_kill_subprocesses (X2GoClientNetworkSSH *self);
static gboolean x2goclient_network_ssh_parent_connect (X2GoClientNetwork *parent, GError **gerr);
static gboolean x2goclient_network_ssh_fetch_openssh_version (X2GoClientNetworkSSH *self, GError **gerr);
+static void x2goclient_network_ssh_log_std_str (const gchar * const str, const gsize str_size, const _Bool stderr);
static void x2goclient_network_ssh_class_init (X2GoClientNetworkSSHClass *klass) {
@@ -1021,3 +1023,54 @@ static gboolean x2goclient_network_ssh_fetch_openssh_version (X2GoClientNetworkS
return (ret);
}
+
+static void x2goclient_network_ssh_log_std_str (const gchar * const str, const gsize str_size, const _Bool stderr) {
+ /*
+ * For a size bigger than zero, the bytes object must be non-NULL,
+ * otherwise any value is legit according to the documentation.
+ */
+ g_return_if_fail (((str_size) && (str)) || (!(str_size)));
+
+ const gchar *stream = "out";
+
+ if (stderr) {
+ stream = "err";
+ }
+
+ if ((str) && (str_size)) {
+ gsize str_size_work = str_size;
+
+ g_log (NULL, G_LOG_LEVEL_DEBUG, "Std%s:", stream);
+
+ _Bool cont = FALSE;
+ const gchar *str_work = str;
+ while (str_size_work) {
+ int cur_len = str_size_work;
+
+ if (INT_MAX < str_size_work) {
+ cur_len = INT_MAX;
+ str_size_work -= INT_MAX;
+ }
+
+ const char *fmt = ">>>%.*s<<<";
+ if (cont) {
+ fmt = "(continuation) >>>%.*s<<<";
+ }
+
+ g_log (NULL, G_LOG_LEVEL_DEBUG, fmt, cur_len, str_work);
+
+ /*
+ * Setting this out of bounds is fine as long as we don't actually access
+ * out-of-bounds data.
+ *
+ * Be extra careful here.
+ */
+ str_work += cur_len;
+
+ cont = TRUE;
+ }
+ }
+ else {
+ g_log (NULL, G_LOG_LEVEL_DEBUG, "Std%s: no data", stream);
+ }
+}
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git
More information about the x2go-commits
mailing list