Annotation of researchv10dc/libI77/endfile.c, revision 1.1

1.1     ! root        1: #include "f2c.h"
        !             2: #include "fio.h"
        !             3: #include "sys/types.h"
        !             4: #include "rawio.h"
        !             5: 
        !             6: #ifdef KR_headers
        !             7: extern char *strcpy();
        !             8: #else
        !             9: #undef abs
        !            10: #undef min
        !            11: #undef max
        !            12: #include "stdlib.h"
        !            13: #include "string.h"
        !            14: #endif
        !            15: 
        !            16: #ifdef NON_UNIX_STDIO
        !            17: #ifndef unlink
        !            18: #define unlink remove
        !            19: #endif
        !            20: #else
        !            21: #ifdef MSDOS
        !            22: #include "io.h"
        !            23: #endif
        !            24: #endif
        !            25: 
        !            26: #ifdef NON_UNIX_STDIO
        !            27: extern char *f__r_mode[], *f__w_mode[];
        !            28: #endif
        !            29: 
        !            30: #ifdef KR_headers
        !            31: integer f_end(a) alist *a;
        !            32: #else
        !            33: integer f_end(alist *a)
        !            34: #endif
        !            35: {
        !            36:        unit *b;
        !            37:        if(a->aunit>=MXUNIT || a->aunit<0) err(a->aerr,101,"endfile");
        !            38:        b = &f__units[a->aunit];
        !            39:        if(b->ufd==NULL) {
        !            40:                char nbuf[10];
        !            41:                (void) sprintf(nbuf,"fort.%ld",a->aunit);
        !            42: #ifdef NON_UNIX_STDIO
        !            43:                { FILE *tf;
        !            44:                        if (tf = fopen(nbuf, f__w_mode[0]))
        !            45:                                fclose(tf);
        !            46:                        }
        !            47: #else
        !            48:                close(creat(nbuf, 0666));
        !            49: #endif
        !            50:                return(0);
        !            51:                }
        !            52:        b->uend=1;
        !            53:        return(b->useek ? t_runc(a) : 0);
        !            54: }
        !            55: 
        !            56:  static int
        !            57: #ifdef NON_UNIX_STDIO
        !            58: #ifdef KR_headers
        !            59: copy(from, len, to) char *from, *to; register long len;
        !            60: #else
        !            61: copy(FILE *from, register long len, FILE *to)
        !            62: #endif
        !            63: {
        !            64:        int k, len1;
        !            65:        char buf[BUFSIZ];
        !            66: 
        !            67:        while(fread(buf, len1 = len > BUFSIZ ? BUFSIZ : (int)len, 1, from)) {
        !            68:                if (!fwrite(buf, len1, 1, to))
        !            69:                        return 1;
        !            70:                if ((len -= len1) <= 0)
        !            71:                        break;
        !            72:                }
        !            73:        return 0;
        !            74:        }
        !            75: #else
        !            76: #ifdef KR_headers
        !            77: copy(from, len, to) char *from, *to; register long len;
        !            78: #else
        !            79: copy(char *from, register long len, char *to)
        !            80: #endif
        !            81: {
        !            82:        register int n;
        !            83:        int k, rc = 0, tmp;
        !            84:        char buf[BUFSIZ];
        !            85: 
        !            86:        if ((k = open(from, O_RDONLY)) < 0)
        !            87:                return 1;
        !            88:        if ((tmp = creat(to,0666)) < 0)
        !            89:                return 1;
        !            90:        while((n = read(k, buf, len > BUFSIZ ? BUFSIZ : (int)len)) > 0) {
        !            91:                if (write(tmp, buf, n) != n)
        !            92:                        { rc = 1; break; }
        !            93:                if ((len -= n) <= 0)
        !            94:                        break;
        !            95:                }
        !            96:        close(k);
        !            97:        close(tmp);
        !            98:        return n < 0 ? 1 : rc;
        !            99:        }
        !           100: #endif
        !           101: 
        !           102: #ifndef L_tmpnam
        !           103: #define L_tmpnam 16
        !           104: #endif
        !           105: 
        !           106:  int
        !           107: #ifdef KR_headers
        !           108: t_runc(a) alist *a;
        !           109: #else
        !           110: t_runc(alist *a)
        !           111: #endif
        !           112: {
        !           113:        char nm[L_tmpnam+12];   /* extra space in case L_tmpnam is tiny */
        !           114:        long loc, len;
        !           115:        unit *b;
        !           116: #ifdef NON_UNIX_STDIO
        !           117:        FILE *bf, *tf;
        !           118: #else
        !           119:        FILE *bf;
        !           120: #endif
        !           121:        int rc = 0;
        !           122: 
        !           123:        b = &f__units[a->aunit];
        !           124:        if(b->url)
        !           125:                return(0);      /*don't truncate direct files*/
        !           126:        loc=ftell(bf = b->ufd);
        !           127:        fseek(bf,0L,SEEK_END);
        !           128:        len=ftell(bf);
        !           129:        if (loc >= len || b->useek == 0 || b->ufnm == NULL)
        !           130:                return(0);
        !           131: #ifdef NON_UNIX_STDIO
        !           132:        fclose(b->ufd);
        !           133: #else
        !           134:        rewind(b->ufd); /* empty buffer */
        !           135: #endif
        !           136:        if (!loc) {
        !           137: #ifdef NON_UNIX_STDIO
        !           138:                if (!(bf = fopen(b->ufnm, f__w_mode[b->ufmt])))
        !           139: #else
        !           140:                if (close(creat(b->ufnm,0666)))
        !           141: #endif
        !           142:                        rc = 1;
        !           143:                if (b->uwrt)
        !           144:                        b->uwrt = 1;
        !           145:                goto done;
        !           146:                }
        !           147: #ifdef _POSIX_SOURCE
        !           148:        tmpnam(nm);
        !           149: #else
        !           150:        strcpy(nm,"tmp.FXXXXXX");
        !           151:        mktemp(nm);
        !           152: #endif
        !           153: #ifdef NON_UNIX_STDIO
        !           154:        if (!(bf = fopen(b->ufnm, f__r_mode[0]))) {
        !           155:  bad:
        !           156:                rc = 1;
        !           157:                goto done;
        !           158:                }
        !           159:        if (!(tf = fopen(nm, f__w_mode[0])))
        !           160:                goto bad;
        !           161:        if (copy(bf, loc, tf)) {
        !           162:  bad1:
        !           163:                rc = 1;
        !           164:                goto done1;
        !           165:                }
        !           166:        if (!(bf = freopen(b->ufnm, f__w_mode[0], bf)))
        !           167:                goto bad1;
        !           168:        if (!(tf = freopen(nm, f__r_mode[0], tf)))
        !           169:                goto bad1;
        !           170:        if (copy(tf, loc, bf))
        !           171:                goto bad1;
        !           172:        if (f__w_mode[0] != f__w_mode[b->ufmt]) {
        !           173:                if (!(bf = freopen(b->ufnm, f__w_mode[b->ufmt+2], bf)))
        !           174:                        goto bad1;
        !           175:                fseek(bf, loc, SEEK_SET);
        !           176:                }
        !           177: done1:
        !           178:        fclose(tf);
        !           179:        unlink(nm);
        !           180: done:
        !           181:        f__cf = b->ufd = bf;
        !           182: #else
        !           183:        if (copy(b->ufnm, loc, nm)
        !           184:         || copy(nm, loc, b->ufnm))
        !           185:                rc = 1;
        !           186:        unlink(nm);
        !           187:        fseek(b->ufd, loc, SEEK_SET);
        !           188: done:
        !           189: #endif
        !           190:        if (rc)
        !           191:                err(a->aerr,111,"endfile");
        !           192:        return 0;
        !           193:        }

unix.superglobalmegacorp.com

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