home *** CD-ROM | disk | FTP | other *** search
-
- /*#include <ndir.h>*/
- #include <local/ndir.h>
-
- #include <pb.h>
-
- #ifdef TEST
- #include <stdio.h>
- #define _DEBUG
- #include <max/debug.h>
- #endif
-
- /*
- * support for Berkeley directory reading routine on a V7 file system
- */
-
- extern char *malloc();
-
- /*
- * open a directory.
- */
-
- DIR *
- opendir(name)
- char *name;
- {
- register DIR *dirp;
- register int fd;
-
- char buf[100];
- CInfoPBRec cpb;
- int err;
-
- /* fix name, and get volume reference number */
-
-
- cpb.ioVRefNum = hfixnam( name, buf );
- cpb.ioNamePtr = ctop( buf );
- cpb.ioFDirIndex = 0;
- cpb.u.di.ioDrDirID = 0L;
-
- #ifdef TEST
- fprintf( stderr, "opendir: %s\n", buf );
- #endif
-
- if ((err = PBGetCatInfo( &cpb, 0 )) != 0 ) {
- #ifdef TEST
- fprintf( stderr, "setdir: PBGetCatInfo %d\n", err );
- #endif
- return NULL;
- }
-
- if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
- #ifdef TEST
- fprintf( stderr, "opendir: couldn't malloc %d\n",sizeof(DIR));
- #endif
- return NULL;
- }
- dirp->ioVRefNum = cpb.ioVRefNum;
- dirp->ioDrDirID = cpb.u.di.ioDrDirID;
- dirp->ioFDirIndex = 1;
-
- #ifdef TEST
- fprintf( stderr, "opendir: # %ld\n", cpb.u.di.ioDrDirID );
- #endif
-
- return dirp;
- }
-
-
- /*
- * get next entry in a directory.
- */
- struct direct *
- readdir(dirp)
- register DIR *dirp;
- {
- CInfoPBRec cpb;
- int err;
- static struct direct dir;
-
- #ifdef TEST
- fprintf( stderr, "readdir: v:%d d:%ld i:%d\n",
- dirp->ioVRefNum, dirp->ioDrDirID, dirp->ioFDirIndex );
- #endif
- strcpy( dir.d_name, "" );
- cpb.ioNamePtr = dir.d_name;
- cpb.ioVRefNum = dirp->ioVRefNum;
- cpb.u.di.ioDrDirID = dirp->ioDrDirID;
- cpb.ioFDirIndex = dirp->ioFDirIndex++;
-
- if ((err = PBGetCatInfo( &cpb, 0 )) != 0 ) {
- #ifdef TEST
- fprintf( stderr, "readdir: err %d\n", err );
- #endif
- return NULL;
- }
-
- dir.d_ino = 0;
- ptoc( dir.d_name );
-
- #ifdef TEST
- fprintf( stderr, "readdir: OK \"%s\"\n", dir.d_name);
- #endif
-
- dir.d_namlen = strlen(dir.d_name);
- dir.d_reclen = DIRSIZ(&dir);
- return (&dir);
-
- }
-
- /*
- * close a directory.
- */
- void
- closedir(dirp)
- register DIR *dirp;
- {
- free((char *)dirp);
- }
-
-
- #ifdef TEST
- #include <errno.h>
-
- main()
- {
- char command[100];
-
- struct DIR *dirp;
- struct direct *dp;
-
- while(gets(command) != NULL) {
-
- fprintf( stderr, "test: %s\n", command );
-
- if ((dirp = opendir( command )) == NULL ) {
- fprintf( stderr, "couldn't open dir %s\n", command );
- }
- while ((dp = readdir(dirp)) != NULL)
- fprintf( stderr, "%s", dp->d_name );
-
- closedir( dirp );
- }
- }
- #endif
-