From 5d6ab12b2800444782761168a656560be04abc3a Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 15 Aug 2006 18:15:14 +0000 Subject: [PATCH] catch write error in uudecode --- test/uudecode.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/test/uudecode.c b/test/uudecode.c index 10252fc..cdcc76f 100644 --- a/test/uudecode.c +++ b/test/uudecode.c @@ -6,6 +6,8 @@ * when decoding a part with broken crc. */ #include #include +#include +#include #include "textcode.h" #include "str.h" #include "buffer.h" @@ -107,7 +109,7 @@ int main(int argc,char* argv[]) { return 1; } } - buffer_init(&filein,read,fd,buf,sizeof buf); + buffer_init(&filein,(void*)read,fd,buf,sizeof buf); /* skip to "^begin " */ for (;;) { if ((l=buffer_getline(&filein,line,(sizeof line)-1))==0 && line[l]!='\n') { @@ -175,7 +177,7 @@ foundfilename: buffer_putsflush(buffer_2,"\"\n"); } state=AFTERBEGIN; - buffer_init(&fileout,write,ofd,obuf,sizeof obuf); + buffer_init(&fileout,(void*)write,ofd,obuf,sizeof obuf); continue; } } @@ -250,7 +252,7 @@ foundfilename: buffer_putsflush(buffer_2,"\"\n"); filename[0]=0; state=AFTERBEGIN; - buffer_init(&fileout,write,ofd,obuf,sizeof obuf); + buffer_init(&fileout,(void*)write,ofd,obuf,sizeof obuf); continue; } } @@ -326,7 +328,11 @@ invalidpart: if (endoffset == offset+out.len-1) ++endoffset; if (out.len == endoffset-offset && i == wantedcrc) { /* ok, save block */ - buffer_put(&fileout,out.s,out.len); + if (buffer_put(&fileout,out.s,out.len)) { +writeerror: + buffer_putmflush(buffer_1,"write error: ",strerror(errno),"\n"); + return 1; + } } else { out.len=0; for (i=0; i=0) - buffer_put(&fileout,tmp,scanned); + if (buffer_put(&fileout,tmp,scanned)) goto writeerror; } } }