Notes |
(0011854)
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. |
| |
(0011934)
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. |
| |
(0012084)
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. |
| |
(0012124)
DanLiang
09-25-08 23:39
edited on: 09-26-08 00:35
|
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.
In trace_vi.log, ftruncate64 is called, while in trace_test.log, ftruncate is called.
In source code "vi.c" ftruncate() is called.
If I rewrite the samll test program to explicitly use ftruncate64, a weird file size 21474836485 is seen.
|
| |
(0012134)
vda
09-26-08 02:41
|
Does it help if you replace
ftruncate(fd, charcnt);
with
ftruncate(fd, (off_t)charcnt);
? |
| |
(0012144)
DanLiang
09-26-08 03:04
|
It has the same result. :-( |
| |
(0012154)
vda
09-26-08 03:43
|
Looks like your libc or kernel mishandle ftruncate64(). Which version of kernel is it? |
| |
(0012184)
bernhardf
09-26-08 04:40
|
What arch (and if arm, which ABI) do you use? How did you build your toolchain? |
| |
(0012194)
DanLiang
09-26-08 05:20
|
kernel version: linux-2.6.26.2
ABI: EABI
I configred the buildroot to build an arm cross toolchain. The version for buildroot is 23434.
Here is the config file in the attachment. |
| |
(0012204)
bernhardf
09-26-08 05:25
|
ftruncate on ARM EABI was fixed in uClibc trunk a day or two ago. |
| |