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