|
|
1.1 ! root 1: #include "fio.h" ! 2: static alist *ax; ! 3: f_end(a) alist *a; ! 4: { ! 5: unit *b; ! 6: if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile"); ! 7: b = &units[a->aunit]; ! 8: if(b->ufd==NULL) return(0); ! 9: b->uend=1; ! 10: if( b->useek==0) return(0); ! 11: ax=a; ! 12: if(b->uwrt) nowreading(b); ! 13: return(t_runc(b)); ! 14: } ! 15: t_runc(b) unit *b; ! 16: { ! 17: char buf[128],nm[16]; ! 18: FILE *tmp; ! 19: int n,m; ! 20: long loc,len; ! 21: if(b->url) return(0); /*don't truncate direct files*/ ! 22: loc=ftell(b->ufd); ! 23: fseek(b->ufd,0L,2); ! 24: len=ftell(b->ufd); ! 25: if(loc==len || b->useek==0 || b->ufnm==NULL) return(0); ! 26: strcpy(nm,"tmp.FXXXXXX"); ! 27: if(b->uwrt) nowreading(b); ! 28: mktemp(nm); ! 29: tmp=fopen(nm,"w"); ! 30: fseek(b->ufd,0L,0); ! 31: for(;loc>0;) ! 32: { ! 33: n=fread(buf,1,loc>128?128:(int)loc,b->ufd); ! 34: if(n>loc) n=loc; ! 35: loc -= n; ! 36: fwrite(buf,1,n,tmp); ! 37: } ! 38: fflush(tmp); ! 39: for(n=0;n<10;n++) ! 40: { ! 41: if((m=fork())==-1) continue; ! 42: else if(m==0) ! 43: { ! 44: execl("/bin/cp","cp",nm,b->ufnm,0); ! 45: execl("/usr/bin/cp","cp",nm,b->ufnm,0); ! 46: fprintf(stdout,"no cp\n"); ! 47: exit(1); ! 48: } ! 49: wait(&m); ! 50: if(m!=0) err(ax->aerr,111,"endfile"); ! 51: fclose(tmp); ! 52: unlink(nm); ! 53: return(0); ! 54: } ! 55: err(ax->aerr,111,"endfile"); ! 56: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.