@@ -323,7 +323,8 @@ static inline ssize_t zlog_stream_unbuffered_write(struct zlog_stream *stream, c
323
323
{
324
324
int finished = 0 ;
325
325
const char * append ;
326
- size_t append_len ;
326
+ size_t append_len = 0 ;
327
+ ssize_t written ;
327
328
328
329
if (stream -> len + len >= zlog_limit ) {
329
330
if (stream -> wrap ) {
@@ -347,15 +348,27 @@ static inline ssize_t zlog_stream_unbuffered_write(struct zlog_stream *stream, c
347
348
zlog_stream_direct_write_ex (stream , buf , len , append , append_len );
348
349
}
349
350
/* TODO: use loop to speed it up */
350
- return len + zlog_stream_unbuffered_write (stream , buf + len , len );
351
+ written = zlog_stream_unbuffered_write (stream , buf + len , len );
352
+ if (written > 0 ) {
353
+ return len + written ;
354
+ }
355
+
356
+ return written ;
351
357
}
352
358
stream -> finished = finished = 1 ;
353
359
append = (stream -> len + len == zlog_limit ) ? "\n" : "...\n" ;
354
360
append_len = sizeof (append ) - 1 ;
355
361
len = zlog_limit - stream -> len - append_len ;
356
362
}
357
363
358
- return zlog_stream_direct_write_ex (stream , buf , len , append , append_len );
364
+ written = zlog_stream_direct_write_ex (stream , buf , len , append , append_len );
365
+ if (written > 0 ) {
366
+ /* currently written will be always len as the write is blocking
367
+ * - this should be address if we change to non-blocking write */
368
+ stream -> len += written ;
369
+ }
370
+
371
+ return written ;
359
372
}
360
373
/* }}} */
361
374
@@ -460,10 +473,11 @@ ssize_t zlog_stream_set_wrapping_prefix(struct zlog_stream *stream, const char *
460
473
va_end (args );
461
474
462
475
stream -> wrap_prefix = malloc (len );
463
- if (stream -> wrap_prefix ! = NULL ) {
476
+ if (stream -> wrap_prefix = = NULL ) {
464
477
return -1 ;
465
478
}
466
479
memcpy (stream -> wrap_prefix , buf , len );
480
+ stream -> wrap_prefix_len = len ;
467
481
468
482
return len ;
469
483
}
0 commit comments