--- src/mailfold.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) --- src/mailfold.c +++ src/mailfold.c 2006-01-13 17:15:39.000000000 +0000 @@ -120,13 +120,19 @@ jin: while(part&&(i=rwrite(s,source,BLKS } writefin: i=type!=ft_PIPE&&fsync(s)&&errno!=EINVAL; /* EINVAL => wasn't a file */ + if ((i&&!len?-1:len)&&lasttell>=0) + { int serrno=errno; + if(ftruncate(s,lasttell)) lasttell= -1; + SETerrno(serrno); + } + /* else: Do _not_ reset lasttell to -1 because the value is used for biff */ if(ft_lock(type)) { int serrno=errno; /* save any error information */ if(fdunlock()) nlog("Kernel-unlock failed\n"); SETerrno(serrno); } - i=rclose(s)||i; + i=rclose(s)||i; /* if this fails, we should truncate, but it's too late */ } /* return an error even if nothing was to be sent */ return i&&!len?-1:len; } @@ -237,7 +243,7 @@ dumpf: { switch(errno) #endif default:writeerr(buf); } - if(lasttell>=0&&!truncate(boxname,lasttell)&&(logopened||verbose)) + if(lasttell>=0&&(logopened||verbose)) nlog("Truncated file to former size\n"); /* undo garbage */ ret0: return 0; }