[BusyBox 0005124]: vi in busybox always writes files with length 0

bugs at busybox.net bugs at busybox.net
Fri Sep 26 06:39:33 UTC 2008


A NOTE has been added to this issue. 
====================================================================== 
http://busybox.net/bugs/view.php?id=5124 
====================================================================== 
Reported By:                DanLiang
Assigned To:                BusyBox
====================================================================== 
Project:                    BusyBox
Issue ID:                   5124
Category:                   Documentation
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     assigned
====================================================================== 
Date Submitted:             09-23-2008 20:43 PDT
Last Modified:              09-25-2008 23:39 PDT
====================================================================== 
Summary:                    vi in busybox always writes files with length 0
Description: 
I use buildroot to create a rootfs and test it.

My configuration is
uclibc-0.9.29
gcc-4.2.4
busybox-1.12.0

When I try to modify a existing file or create a new one with vi, after I
save the contents and exit from vi, the file length is always 0 and all
the contents are lost.

In file vi.c, I find if I comment out the line "ftruncate(fd, charcnt);"
in function "static int file_write(char *fn, char *first, char *last)",
everything is OK.
====================================================================== 

---------------------------------------------------------------------- 
 vda - 09-24-08 04:14  
---------------------------------------------------------------------- 
Please add this debugging code:

        charcnt = full_write(fd, first, cnt);
bb_error_msg("file_write: cnt:%d charcnt:%d", cnt, charcnt);
sleep(5);
        ftruncate(fd, charcnt);

and let me know what do you see when you try to save a file. 

---------------------------------------------------------------------- 
 DanLiang - 09-24-08 19:20  
---------------------------------------------------------------------- 
Hi vda

when I try to save a file, a message is printed out like this:
vi: file_write: cnt:10 charcnt:10. 
Variable 'cnt' always has the same value with 'charcnt'.
which means no matter what value I pass to ftruncate(), it will truncate
the file length to 0.

But it's very strange when I wrote a small program:
---------------------------------------------------
#include <unistd.h>
#include <fcntl.h>

int main()
{
        char buf[] = "test";
        int fd, cnt, charcnt;

        fd = open("test.txt", (O_RDWR | O_CREAT), 0666);
        if (fd < 0)
                return -1;
        cnt = sizeof(buf);
        buf[cnt-1] = 0x0A;
        charcnt = write(fd, buf, cnt);
        ftruncate(fd, charcnt);
        if (charcnt == cnt) {
        // good write
        //file_modified = FALSE;
        } else {
                charcnt = 0;
        }
        close(fd);
        return charcnt;
}
---------------------------------------------------
I tested it on my ARM board, and it's ok with string "test" in that file. 

---------------------------------------------------------------------- 
 vda - 09-25-08 14:30  
---------------------------------------------------------------------- 
Can you strace vi? "strace -o s.log vi ..."
Do the same with your test program.
Look how ftruncate's are different in the logs.
If you can't figure it out, just attach strace logs to this bug. 

---------------------------------------------------------------------- 
 DanLiang - 09-25-08 23:39  
---------------------------------------------------------------------- 
Hi vda,

trace_vi.log is logged when I tried to write string "abcd" into file
abc.txt.

trace_test.log is logged when the samll program is run. 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
09-23-08 20:43  DanLiang       New Issue                                    
09-23-08 20:43  DanLiang       Status                   new => assigned     
09-23-08 20:43  DanLiang       Assigned To               => BusyBox         
09-24-08 01:14  DanLiang       Issue Monitored: DanLiang                    
09-24-08 04:14  vda            Note Added: 0011854                          
09-24-08 19:20  DanLiang       Note Added: 0011934                          
09-25-08 14:30  vda            Note Added: 0012084                          
09-25-08 23:36  DanLiang       File Added: trace_vi.log                     
09-25-08 23:36  DanLiang       File Added: trace_test.log                    
09-25-08 23:39  DanLiang       Note Added: 0012124                          
======================================================================




More information about the busybox-cvs mailing list