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