Browse Source

make uudecode be able to decode more than one file

master
Felix von Leitner 20 years ago
parent
commit
83b6193d72
  1. 22
      test/uudecode.c

22
test/uudecode.c

@ -11,6 +11,7 @@ int main(int argc,char* argv[]) {
buffer fileout;
int fd=0;
int ofd=-1;
int found=0;
unsigned long mode=0,lineno=0;
if (argc>1) {
fd=open_read(argv[1]);
@ -22,12 +23,14 @@ int main(int argc,char* argv[]) {
}
}
buffer_init(&filein,read,fd,buf,sizeof buf);
again:
/* skip to "^begin " */
for (;;) {
char line[1000]; /* uuencoded lines can never be longer than 64 characters */
int l;
if ((l=buffer_getline(&filein,line,(sizeof line)-1))==0) {
buffer_putsflush(buffer_2,"warning: hit end of file without finding any uuencoded data!\n");
if ((l=buffer_getline(&filein,line,(sizeof line)-1))==0 && line[l]!='\n') {
if (!found)
buffer_putsflush(buffer_2,"warning: hit end of file without finding any uuencoded data!\n");
return 0;
}
++lineno;
@ -37,6 +40,11 @@ int main(int argc,char* argv[]) {
if (line[l=6+scan_8long(line+6,&mode)]==' ' && mode) {
int i;
++l;
if (line[l]=='"') {
int m;
++l;
line[str_chr(line+l,'"')]=0;
}
if (line[l+(i=str_rchr(line+l,'/'))]) l+=i+1;
while (line[l]=='.') ++l;
if (line[l]) {
@ -45,7 +53,12 @@ int main(int argc,char* argv[]) {
buffer_puts(buffer_2,"error: could not create file \"");
buffer_puts(buffer_2,line+l);
buffer_putsflush(buffer_2,"\" (must not exist yet)\n");
} else break;
} else {
buffer_puts(buffer_2,"decoding file \"");
buffer_puts(buffer_2,line+l);
buffer_putsflush(buffer_2,"\"\n");
break;
}
}
}
}
@ -70,7 +83,8 @@ int main(int argc,char* argv[]) {
buffer_flush(&fileout);
fchmod(ofd,mode);
close(ofd);
return 0;
++found;
goto again;
} else {
parseerror:
buffer_puts(buffer_1,"parse error in line ");

Loading…
Cancel
Save