From 30bd04b7b95f717ae2027d1651211e1a7391ac70 Mon Sep 17 00:00:00 2001 From: "Michael I. Bushnell" Date: Wed, 20 Mar 1996 21:16:13 +0000 Subject: (diskfs_lookup): Cleaner. --- libdiskfs/lookup.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'libdiskfs/lookup.c') diff --git a/libdiskfs/lookup.c b/libdiskfs/lookup.c index 2e36798b..5d1c6b19 100644 --- a/libdiskfs/lookup.c +++ b/libdiskfs/lookup.c @@ -74,10 +74,10 @@ diskfs_lookup (struct node *dp, struct protid *cred) { error_t err; - struct node *ournp, **npp; - - npp = np ? : &ournp; + if (type == REMOVE || type == RENAME) + assert (np); + if (!S_ISDIR (dp->dn_stat.st_mode)) { diskfs_null_dirstat (ds); @@ -106,18 +106,25 @@ diskfs_lookup (struct node *dp, } } - err = diskfs_lookup_hard (dp, name, type, npp, ds, cred); + err = diskfs_lookup_hard (dp, name, type, np, ds, cred); if (err && err != ENOENT) return err; if (type == RENAME || (type == CREATE && err == ENOENT) || (type == REMOVE && err != ENOENT)) - err = diskfs_checkdirmod (dp, *npp, cred); - - if (*npp && !np) - diskfs_nput (*npp); + err = diskfs_checkdirmod (dp, np, cred); return err; } + /* If we will be modifying the directory, make sure it's allowed. */ + if (type == RENAME + || (type == REMOVE && inum) + || (type == CREATE && !inum)) + { + err = diskfs_checkdirmod (dp, np, cred); + if (err) + goto out; + } + -- cgit v1.2.3