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

View File

@ -98,13 +98,18 @@ install_sig_handler (void)
static void G_GNUC_PRINTF(1, 2) static void G_GNUC_PRINTF(1, 2)
print_expr (const char* frm, ...) print_expr (const char* frm, ...)
{ {
char *expr; char *expr, *expr_orig;
va_list ap; va_list ap;
ssize_t rv; ssize_t rv;
size_t exprlen, lenlen; size_t exprlen, lenlen;
char cookie[16]; char cookie[16];
static int outfd = 0; static int outfd = 0;
#if defined(__CYGWIN__ )&& !defined (_WIN32)
const size_t writestep = 4096 * 16;
size_t bytestowrite = 0;
#endif
if (outfd == 0) if (outfd == 0)
outfd = fileno (stdout); outfd = fileno (stdout);
@ -127,8 +132,19 @@ print_expr (const char* frm, ...)
*/ */
rv = write (outfd, cookie, lenlen + 2); rv = write (outfd, cookie, lenlen + 2);
if (rv != -1) { 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); rv = write (outfd, expr, exprlen);
g_free (expr); #endif
g_free (expr_orig);
} }
if (rv != -1) if (rv != -1)
rv = write (outfd, "\n", 1); rv = write (outfd, "\n", 1);
@ -976,7 +992,7 @@ cmd_guile (ServerContext *ctx, GHashTable *args, GError **err)
const char *eval; const char *eval;
eval = get_string_from_args (args, "eval", TRUE, NULL); eval = get_string_from_args (args, "eval", TRUE, NULL);
if (!eval) { if (!eval) {
print_error (MU_ERROR_IN_PARAMETERS, "guile: expected: 'eval'"); print_error (MU_ERROR_IN_PARAMETERS, "guile: expected: 'eval'");
return MU_OK; return MU_OK;