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
This commit is contained in:
Maximilian Matthé 2016-01-15 08:14:26 +01:00 committed by djcb
parent d9ca330f2b
commit 784d8c8cfe
1 changed files with 19 additions and 3 deletions

View File

@ -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;