I now understand the source of the garbage: STRNCPY is not adding NUL byte if 
it copied n bytes and there is no NUL in this n bytes. Everything was in the 
man, I just had to reread it.

# HG changeset patch
# User ZyX <[email protected]>
# Date 1347095322 -14400
# Node ID 36b3878656262abb03c3cd98b116208569be58c4
# Parent  78b679bbe662f809323ea4127aa424627ab0d01d
Fixed garbage at the end of the message.

diff -r 78b679bbe662 -r 36b387865626 src/buffer.c
--- a/src/buffer.c      Sat Sep 08 12:30:23 2012 +0400
+++ b/src/buffer.c      Sat Sep 08 13:08:17 2012 +0400
@@ -3044,7 +3044,7 @@
     char_u     *buffer;
     size_t     len;
 
-    buffer = alloc(IOSIZE);
+    buffer = alloc_clear(IOSIZE);
     if (buffer == NULL)
        return;
 

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
*** /tmp/extdiff.vQQpB7/vim.78b679bbe662/src/buffer.c	2012-09-08 13:08:31.000000000 +0400
--- vim.36b387865626/src/buffer.c	2012-09-08 13:08:32.000000000 +0400
***************
*** 3044,3050 ****
      char_u	*buffer;
      size_t	len;
  
!     buffer = alloc(IOSIZE);
      if (buffer == NULL)
  	return;
  
--- 3044,3050 ----
      char_u	*buffer;
      size_t	len;
  
!     buffer = alloc_clear(IOSIZE);
      if (buffer == NULL)
  	return;
  
*** /tmp/extdiff.ff8ZEk/vim.e75da4a3225d/src/buffer.c	2012-09-08 13:09:47.000000000 +0400
--- vim.36b387865626/src/buffer.c	2012-09-08 13:09:47.000000000 +0400
***************
*** 3044,3050 ****
      char_u	*buffer;
      size_t	len;
  
!     buffer = alloc(IOSIZE);
      if (buffer == NULL)
  	return;
  
--- 3044,3050 ----
      char_u	*buffer;
      size_t	len;
  
!     buffer = alloc_clear(IOSIZE);
      if (buffer == NULL)
  	return;
  
***************
*** 3058,3064 ****
  
      *p++ = '"';
      if (buf_spname(curbuf) != NULL)
! 	STRCPY(p, buf_spname(curbuf));
      else
      {
  	if (!fullname && curbuf->b_fname != NULL)
--- 3058,3064 ----
  
      *p++ = '"';
      if (buf_spname(curbuf) != NULL)
! 	STRNCPY(p, buf_spname(curbuf), IOSIZE - (p-buffer) - 1);
      else
      {
  	if (!fullname && curbuf->b_fname != NULL)

Raspunde prin e-mail lui