|
|
1.1 root 1: /* dfdsrch.c - dfdsrch */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <disk.h>
6: #include <lfile.h>
7: #include <dir.h>
8:
9: /*------------------------------------------------------------------------
10: * dfdsrch -- search disk directory for position of given file name
11: *------------------------------------------------------------------------
12: */
13: struct fdes *dfdsrch(dsptr, filenam, mbits)
14: struct dsblk *dsptr;
15: char *filenam;
16: int mbits;
17: {
18: struct dir *dirptr;
19: struct fdes *fdptr;
20: int len;
21: int i;
22: int inum;
23:
24: if ( (len=strlen(filenam))<=0 || len>=FDNLEN)
25: return((struct fdes *)SYSERR);
26: dirptr = dsdirec(dsptr->dnum);
27: for (i=0 ; i<dirptr->d_nfiles ; i++)
28: if (strcmp(filenam, dirptr->d_files[i].fdname) == 0)
29: if ( (mbits&FLNEW) != 0)
30: return((struct fdes *)SYSERR);
31: else
32: return(&dirptr->d_files[i]);
33: wait(dsptr->ddirsem);
34: if ( (mbits&FLOLD) || dirptr->d_nfiles >= NFDES) {
35: signal(dsptr->ddirsem);
36: return((struct fdes *)SYSERR);
37: }
38: inum = ibnew(dsptr->dnum, IBNWDIR);
39: fdptr = &(dirptr->d_files[dirptr->d_nfiles++]);
40: fdptr->fdlen = 0L;
41: strcpy(fdptr->fdname, filenam);
42: fdptr->fdiba = inum;
43: write(dsptr->dnum, dskbcpy(dirptr), DIRBLK);
44: signal(dsptr->ddirsem);
45: return(fdptr);
46: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.