Annotation of researchv10dc/libI77/old1/endfile.c, revision 1.1.1.1

1.1       root        1: #include "f2c.h"
                      2: #include "fio.h"
                      3: #include "sys/types.h"
                      4: #include "fcntl.h"
                      5: #include "rawio.h"
                      6: #ifndef O_RDONLY
                      7: #define O_RDONLY 0
                      8: #endif
                      9: 
                     10: #ifdef KR_headers
                     11: extern char *strcpy();
                     12: #else
                     13: #undef abs
                     14: #undef min
                     15: #undef max
                     16: #include "stdlib.h"
                     17: #include "string.h"
                     18: #endif
                     19: 
                     20: 
                     21: #ifdef KR_headers
                     22: integer f_end(a) alist *a;
                     23: #else
                     24: integer f_end(alist *a)
                     25: #endif
                     26: {
                     27:        unit *b;
                     28:        if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile");
                     29:        b = &f__units[a->aunit];
                     30:        if(b->ufd==NULL) {
                     31:                char nbuf[10];
                     32:                (void) sprintf(nbuf,"fort.%ld",a->aunit);
                     33:                close(creat(nbuf, 0666));
                     34:                return(0);
                     35:                }
                     36:        b->uend=1;
                     37:        return(b->useek ? t_runc(a) : 0);
                     38: }
                     39: 
                     40:  static int
                     41: #ifdef KR_headers
                     42: copy(from, len, to) char *from, *to; register long len;
                     43: #else
                     44: copy(char *from, register long len, char *to)
                     45: #endif
                     46: {
                     47:        register int n;
                     48:        int k, rc = 0, tmp;
                     49:        char buf[BUFSIZ];
                     50: 
                     51:        if ((k = open(from, O_RDONLY)) < 0)
                     52:                return 1;
                     53:        if ((tmp = creat(to,0666)) < 0)
                     54:                return 1;
                     55:        while((n = read(k, buf, len > BUFSIZ ? BUFSIZ : (int)len)) > 0) {
                     56:                if (write(tmp, buf, n) != n)
                     57:                        { rc = 1; break; }
                     58:                if ((len -= n) <= 0)
                     59:                        break;
                     60:                }
                     61:        close(k);
                     62:        close(tmp);
                     63:        return n < 0 ? 1 : rc;
                     64:        }
                     65: 
                     66: #ifndef L_tmpnam
                     67: #define L_tmpnam 16
                     68: #endif
                     69: 
                     70:  int
                     71: #ifdef KR_headers
                     72: t_runc(a) alist *a;
                     73: #else
                     74: t_runc(alist *a)
                     75: #endif
                     76: {
                     77:        char nm[L_tmpnam+12];   /* extra space in case L_tmpnam is tiny */
                     78:        long loc, len;
                     79:        unit *b;
                     80:        int rc = 0;
                     81: 
                     82:        b = &f__units[a->aunit];
                     83:        if(b->url) return(0);   /*don't truncate direct files*/
                     84:        loc=ftell(b->ufd);
                     85:        (void) fseek(b->ufd,0L,SEEK_END);
                     86:        len=ftell(b->ufd);
                     87:        if (loc >= len || b->useek == 0 || b->ufnm == NULL)
                     88:                return(0);
                     89: #ifdef MSDOS
                     90:        fclose(b->ufd);
                     91: #else
                     92:        rewind(b->ufd); /* empty buffer */
                     93: #endif
                     94:        if (!loc) {
                     95:                if (close(creat(b->ufnm,0666)))
                     96: #ifdef MSDOS
                     97:                        rc = 1;
                     98:                goto done;
                     99: #else
                    100:                        { rc = 1; goto done; }
                    101:                if (b->uwrt)
                    102:                        b->uwrt = 1;
                    103:                return 0;
                    104: #endif
                    105:                }
                    106: #ifdef _POSIX_SOURCE
                    107:        tmpnam(nm);
                    108: #else
                    109:        (void) strcpy(nm,"tmp.FXXXXXX");
                    110:        (void) mktemp(nm);
                    111: #endif
                    112:        if (copy(b->ufnm, loc, nm)
                    113:         || copy(nm, loc, b->ufnm))
                    114:                rc = 1;
                    115:        unlink(nm);
                    116: done:
                    117: #ifdef MSDOS
                    118:        {
                    119:        extern char *f__r_mode[];
                    120:        b->uwrt = 0;
                    121:        if (!(b->ufd = fopen(b->ufnm, f__r_mode[b->ufmt])))
                    122:                rc = 1;
                    123:        }
                    124:        if (loc)
                    125: #endif
                    126:        fseek(b->ufd, loc, SEEK_SET);
                    127:        if (rc)
                    128:                err(a->aerr,111,"endfile");
                    129:        return 0;
                    130:        }

unix.superglobalmegacorp.com

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