Hello,

To reproduce:
:!echo -n 'Hello' >temp.txt
:echo readfile('temp.txt')

Then an empty list is displayed rather than the content of this file.

The attached patch fixes this problem.

Regards,
Hong Xu
2011/3/26

--
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
diff -r 719ff65f993e src/eval.c
--- a/src/eval.c        Tue Mar 22 20:54:25 2011 +0100
+++ b/src/eval.c        Sat Mar 26 13:15:28 2011 +0800
@@ -14249,6 +14249,7 @@
     int                len;
     long       maxline = MAXLNUM;
     long       cnt = 0;
+    int                havenl = 0; /* does the file contain an nl */ 
 
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
@@ -14273,13 +14274,23 @@
     filtd = 0;
     while (cnt < maxline || maxline < 0)
     {
-       readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
+       readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd - 1, fd);
        buflen = filtd + readlen;
        tolist = 0;
+
+       if (readlen <= 0 && !havenl)
+       {
+           buf[0] = '\n';
+           ++buflen;
+           ++readlen;
+       }
+
        for ( ; filtd < buflen || readlen <= 0; ++filtd)
        {
            if (buf[filtd] == '\n' || readlen <= 0)
            {
+               havenl = 1;
+
                /* Only when in binary mode add an empty list item when the
                 * last line ends in a '\n'. */
                if (!binary && readlen == 0 && filtd == 0)

Raspunde prin e-mail lui