diff options
author | Michael I. Bushnell <mib@gnu.org> | 1996-03-19 20:59:55 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1996-03-19 20:59:55 +0000 |
commit | 8ebb6244180d30d1d465eb8981a3faacfbf9b328 (patch) | |
tree | 19660653684ccef3a8d40f5fa3d4f34368098283 | |
parent | 958479e856a937ab661bad3c2967e373e063cdb4 (diff) |
(diskfs_S_dir_lookup): Check cache before normal diskfs_lookup call.
-rw-r--r-- | libdiskfs/dir-lookup.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c index 59e850cd..8667fd3b 100644 --- a/libdiskfs/dir-lookup.c +++ b/libdiskfs/dir-lookup.c @@ -125,7 +125,24 @@ diskfs_S_dir_lookup (struct protid *dircred, error = diskfs_lookup (dnp, path, CREATE, &np, ds, dircred); } else - error = diskfs_lookup (dnp, path, LOOKUP, &np, 0, dircred); + { + /* XXX should be done in wrapper */ + np = diskfs_check_cache (dnp, path); + if (np) + { + /* Verify that we were allowed in. XXX should be done + in wrapper for diskfs_lookup */ + assert (S_ISDIR (dp->dn_stat.st_mode)); + error = diskfs_access (dp, S_IEXEC, cred); + if (error) + { + diskfs_nrele (np); + np = 0; + } + } + else + error = diskfs_lookup (dnp, path, LOOKUP, &np, 0, dircred); + } if (lastcomp && create && excl && (!error || error == EAGAIN)) error = EEXIST; |