diff options
| author | Maximilian Matthé <maximilian.matthe@ifn.et.tu-dresden.de> | 2016-01-15 08:14:26 +0100 |
|---|---|---|
| committer | djcb <djcb@djcbsoftware.nl> | 2016-01-15 21:07:35 +0200 |
| commit | 784d8c8cfe39d7cd078e43faaf580a52aac2584a (patch) | |
| tree | 2c7885b51d7b91e62205c07e53f62362d0f51bb9 /mu | |
| parent | d9ca330f2bc9a8fedaf0d58dfed0c378b0d66891 (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.c | 22 |
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; |
