Annotation of 42BSD/usr.lib/libI77/util.c, revision 1.1.1.1

1.1       root        1: /*
                      2: char id_util[] = "@(#)util.c   1.7";
                      3:  *
                      4:  * utility routines
                      5:  */
                      6: 
                      7: #include <sys/types.h>
                      8: #include <sys/stat.h>
                      9: #include "fio.h"
                     10: 
                     11: extern short   ccntrl_, blzero_;
                     12: 
                     13: ini_std(u,F,w) FILE *F;
                     14: {      unit *p;
                     15:        p = &units[u];
                     16:        p->ufd = F;
                     17:        p->ufnm = NULL;
                     18:        p->useek = canseek(F);
                     19:        p->ufmt = YES;
                     20:        p->uwrt = (w==WRITE)? YES : NO;
                     21:        p->uscrtch = p->uend = NO;
                     22:        p->ublnk = blzero;
                     23:        p->uprnt = ccntrl;
                     24:        p->url = 0;
                     25:        p->uinode = finode(F);
                     26: }
                     27: 
                     28: canseek(f) FILE *f; /*SYSDEP*/
                     29: {      struct stat x;
                     30:        return( (fstat(fileno(f),&x)==0) &&
                     31:        (x.st_nlink > 0 /*!pipe*/) && !isatty(fileno(f)) );
                     32: }
                     33: 
                     34: nowreading(x) unit *x;
                     35: {
                     36:        return(now_acc(x,"r"));
                     37: }
                     38: 
                     39: nowwriting(x) unit *x;
                     40: {
                     41:        return(now_acc(x,"a"));
                     42: }
                     43: 
                     44: now_acc(x,mode)
                     45: unit *x; char *mode;
                     46: {
                     47:        long loc;
                     48: 
                     49:        if (!x->ufnm)
                     50:        {
                     51:                errno = EBADF;
                     52:                return(NO);
                     53:        }
                     54:        if (x->useek)
                     55:                loc=ftell(x->ufd);
                     56:        if (freopen(x->ufnm,mode,x->ufd))
                     57:        {
                     58:                if (x->useek)
                     59:                        fseek(x->ufd,loc,0);
                     60:                x->uwrt = (*mode=='a');
                     61:                return(YES);
                     62:        }
                     63:        if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a"))
                     64:                if (x->useek)
                     65:                        fseek(x->ufd,loc,0);
                     66:        return(NO);
                     67: }
                     68: 
                     69: g_char(a,alen,b) char *a,*b; ftnlen alen;
                     70: {      char *x=a+alen-1, *y=b+alen-1;
                     71:        while (x >= a  &&  *x == ' ') {x--; y--;}
                     72:        *(y+1) = '\0';
                     73:        while (x >= a) *y-- = *x--;
                     74: }
                     75: 
                     76: b_char(from, to, tolen) char *from, *to; ftnlen tolen;
                     77: {      int i=0;
                     78:        while (*from && i < tolen) {
                     79:                *to++ = *from++;
                     80:                i++;
                     81:        }
                     82:        while (i++ < tolen)
                     83:                *to++ = ' ';
                     84: }
                     85: 
                     86: inode(a) char *a;
                     87: {      struct stat x;
                     88:        if(stat(a,&x)==0) return(x.st_ino);
                     89:        else return(-1);
                     90: }
                     91: 
                     92: finode(f) FILE *f;
                     93: {      struct stat x;
                     94:        if(fstat(fileno(f),&x)==0) return(x.st_ino);
                     95:        else return(-1);
                     96: }
                     97: 
                     98: char
                     99: last_char(f) FILE *f;
                    100: {
                    101:        fseek(f,-2L,1);
                    102:        if(ftell(f)) return(getc(f));
                    103:        else return('\n');
                    104: }

unix.superglobalmegacorp.com

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