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