From b342e078c5eebfc1f2637832cb03e55fd8d7b0c3 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Wed, 21 Apr 1982 01:56:21 -0800 Subject: [PATCH] add new directory access routines SCCS-vsn: old/make/defs 4.3 SCCS-vsn: old/make/dosys.c 4.3 SCCS-vsn: old/make/files.c 4.4 SCCS-vsn: old/make/main.c 4.2 --- usr/src/old/make/defs | 12 ++++--- usr/src/old/make/dosys.c | 12 +++---- usr/src/old/make/files.c | 71 +++++++++++++++++++--------------------- usr/src/old/make/main.c | 8 ++--- 4 files changed, 50 insertions(+), 53 deletions(-) diff --git a/usr/src/old/make/defs b/usr/src/old/make/defs index 3070963478..e743862776 100644 --- a/usr/src/old/make/defs +++ b/usr/src/old/make/defs @@ -1,6 +1,8 @@ -/* defs 4.2 81/03/15 */ +/* defs 4.3 82/04/20 */ #include #include +#include +#include #define SHELLCOM "/bin/sh" @@ -111,13 +113,13 @@ struct pattern }; extern struct pattern *firstpat; -struct opendir +struct dirhdr { - struct opendir *nxtopendir; - FILE * dirfc; + struct dirhdr *nxtopendir; + DIR *dirfc; char *dirn; }; -extern struct opendir *firstod; +extern struct dirhdr *firstod; struct chain diff --git a/usr/src/old/make/dosys.c b/usr/src/old/make/dosys.c index 160be61744..df5dc3a5e0 100644 --- a/usr/src/old/make/dosys.c +++ b/usr/src/old/make/dosys.c @@ -1,4 +1,4 @@ -static char *sccsid = "@(#)dosys.c 4.2 (Berkeley) 82/03/14"; +static char *sccsid = "@(#)dosys.c 4.3 (Berkeley) 82/04/20"; #include "defs" #include @@ -80,12 +80,13 @@ return(status); doclose() /* Close open directory files before exec'ing */ { -register struct opendir *od; +register struct dirhdr *od; for (od = firstod; od; od = od->nxtopendir) - if (od->dirfc != NULL) - /* fclose(od->dirfc); */ - close(od->dirfc->_file); + if (od->dirfc != NULL) { + closedir(od->dirfc); + od->dirfc = NULL; + } } @@ -131,7 +132,6 @@ return( await() ); #include -#include #include diff --git a/usr/src/old/make/files.c b/usr/src/old/make/files.c index f36331dcbe..ca7da58b3f 100644 --- a/usr/src/old/make/files.c +++ b/usr/src/old/make/files.c @@ -1,4 +1,4 @@ -static char *sccsid = "@(#)files.c 4.3 (Berkeley) 82/03/14"; +static char *sccsid = "@(#)files.c 4.4 (Berkeley) 82/04/20"; /* UNIX DEPENDENT PROCEDURES */ @@ -131,7 +131,6 @@ char *builtin[] = 0 }; #include "defs" -#include TIMETYPE exists(filename) @@ -167,9 +166,8 @@ return(t); -#include -FSTATIC char n15[15]; -FSTATIC char *n15end = &n15[14]; +FSTATIC char nbuf[MAXNAMLEN + 1]; +FSTATIC char *nbufend = &nbuf[MAXNAMLEN]; @@ -178,17 +176,17 @@ register char *pat; /* pattern to be matched in directory */ int mkchain; /* nonzero if results to be remembered */ struct depblock *nextdbl; /* final value for chain */ { -FILE * dirf; +DIR *dirf; register int i; int nread, cldir; char *dirname, *dirpref, *endir, *filepat, *p, temp[100]; char fullname[100], *p1, *p2; struct nameblock *q; struct depblock *thisdbl; -struct opendir *od; +struct dirhdr *od; struct pattern *patp; -struct direct entry[32]; +struct direct *dptr; thisdbl = 0; @@ -227,18 +225,19 @@ for(od = firstod; od; od = od->nxtopendir) if(! unequal(dirname, od->dirn) ) { dirf = od->dirfc; - fseek(dirf, 0L, 0); /* start over at the beginning */ + if (dirf != NULL) + rewinddir(dirf); /* start over at the beginning */ break; } if(dirf == NULL) { - dirf = fopen(dirname, "r"); + dirf = opendir(dirname); if(nopdir >= MAXDIR) cldir = YES; else { ++nopdir; - od = ALLOC(opendir); + od = ALLOC(dirhdr); od->nxtopendir = firstod; firstod = od; od->dirfc = dirf; @@ -252,37 +251,33 @@ if(dirf == NULL) fatal("Cannot open"); } -else do +else for (dptr = readdir(dirf); dptr != NULL; dptr = readdir(dirf)) { - nread = fread( (char *) &entry[0], sizeof(struct direct), 32, dirf) ; - for(i=0; id_name; + p2 = nbuf; + while( (p2nxtdepblock = nextdbl; - thisdbl->depname = q; - nextdbl = thisdbl; - } - } + thisdbl = ALLOC(depblock); + thisdbl->nxtdepblock = nextdbl; + thisdbl->depname = q; + nextdbl = thisdbl; } - - } while(nread==32); + } + } if(endir != 0) *endir = '/'; -if(cldir) - fclose(dirf); +if(cldir) { + closedir(dirf); + dirf = NULL; +} return(thisdbl); } @@ -393,7 +388,7 @@ static struct nlist objentry; TIMETYPE lookarch(filename) char *filename; { -char *p, *q, *send, s[15]; +char *p, *q, *send, s[MAXNAMLEN + 1]; int i, nc, nsym, objarch; for(p = filename; *p!= '(' ; ++p) @@ -411,7 +406,7 @@ if(*p == '(') else { objarch = NO; - nc = 14; + nc = MAXNAMLEN; } send = s + nc; diff --git a/usr/src/old/make/main.c b/usr/src/old/make/main.c index 1f9750b9a2..6c30a7633e 100644 --- a/usr/src/old/make/main.c +++ b/usr/src/old/make/main.c @@ -1,4 +1,4 @@ -static char *sccsid = "@(#)main.c 4.1 (Berkeley) 81/02/28"; +static char *sccsid = "@(#)main.c 4.2 (Berkeley) 82/04/20"; # include "defs" /* command make to update programs. @@ -20,7 +20,7 @@ struct nameblock *firstname = NULL; struct lineblock *sufflist = NULL; struct varblock *firstvar = NULL; struct pattern *firstpat = NULL; -struct opendir *firstod = NULL; +struct dirhdr *firstod = NULL; #include int sigivalue = 0; @@ -325,7 +325,7 @@ int prntflag; struct nameblock *p; struct depblock *dp; struct varblock *vp; -struct opendir *od; +struct dirhdr *od; struct shblock *sp; struct lineblock *lp; @@ -334,7 +334,7 @@ if(prntflag) { printf("Open directories:\n"); for (od = firstod; od; od = od->nxtopendir) - printf("\t%d: %s\n", fileno(od->dirfc), od->dirn); + printf("\t%d: %s\n", od->dirfc->dd_fd, od->dirn); } #endif -- 2.20.1