Annotation of cci/usr/src/usr.lib/libsI77/endfile.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.