From 784d8c8cfe39d7cd078e43faaf580a52aac2584a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Matth=C3=A9?= Date: Fri, 15 Jan 2016 08:14:26 +0100 Subject: [PATCH] mu: smaller string chunkss for server on Cygwin Add check for CYGWIN and in this case only print out 64K-sized string-chunks from mu server. Fixes issue #764. fixup --- mu/mu-cmd-server.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/mu/mu-cmd-server.c b/mu/mu-cmd-server.c index 5f0ef898..8e5d9875 100644 --- a/mu/mu-cmd-server.c +++ b/mu/mu-cmd-server.c @@ -98,13 +98,18 @@ install_sig_handler (void) static void G_GNUC_PRINTF(1, 2) print_expr (const char* frm, ...) { - char *expr; + char *expr, *expr_orig; va_list ap; ssize_t rv; size_t exprlen, lenlen; char cookie[16]; static int outfd = 0; +#if defined(__CYGWIN__ )&& !defined (_WIN32) + const size_t writestep = 4096 * 16; + size_t bytestowrite = 0; +#endif + if (outfd == 0) outfd = fileno (stdout); @@ -127,8 +132,19 @@ print_expr (const char* frm, ...) */ rv = write (outfd, cookie, lenlen + 2); if (rv != -1) { + expr_orig = expr; +#if defined (__CYGWIN__) && !defined(_WIN32) + /* CYGWIN doesn't like big packets */ + while (exprlen > 0) { + bytestowrite = exprlen > writestep ? writestep : exprlen; + rv = write(outfd, expr, bytestowrite); + expr += bytestowrite; + exprlen -= bytestowrite; + } +#else rv = write (outfd, expr, exprlen); - g_free (expr); +#endif + g_free (expr_orig); } if (rv != -1) rv = write (outfd, "\n", 1); @@ -976,7 +992,7 @@ cmd_guile (ServerContext *ctx, GHashTable *args, GError **err) const char *eval; eval = get_string_from_args (args, "eval", TRUE, NULL); - + if (!eval) { print_error (MU_ERROR_IN_PARAMETERS, "guile: expected: 'eval'"); return MU_OK;