summaryrefslogtreecommitdiff
path: root/mu
diff options
context:
space:
mode:
authorMaximilian Matthé <maximilian.matthe@ifn.et.tu-dresden.de>2016-01-15 08:14:26 +0100
committerdjcb <djcb@djcbsoftware.nl>2016-01-15 21:07:35 +0200
commit784d8c8cfe39d7cd078e43faaf580a52aac2584a (patch)
tree2c7885b51d7b91e62205c07e53f62362d0f51bb9 /mu
parentd9ca330f2bc9a8fedaf0d58dfed0c378b0d66891 (diff)
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
Diffstat (limited to 'mu')
-rw-r--r--mu/mu-cmd-server.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/mu/mu-cmd-server.c b/mu/mu-cmd-server.c
index 5f0ef89..8e5d987 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;