changeset 778:1c8072796692

objstore: return number of dirents found from lookup entry function This will be useful for unlinking. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Mon, 30 Mar 2020 23:03:05 -0400
parents 0b4ffdbf3b3f
children 4767ca9d2c3e
files src/objstore/dir.h src/objstore/obj_dir.c src/objstore/obj_dir_create.c
diffstat 3 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/objstore/dir.h	Mon Mar 30 23:02:06 2020 -0400
+++ b/src/objstore/dir.h	Mon Mar 30 23:03:05 2020 -0400
@@ -216,7 +216,7 @@
 
 extern int dir_lookup_entry(struct objver *dirver, const char *name,
 			    uint8_t *raw, bool one, struct ndirent_mem *ent,
-			    uint64_t *_off);
+			    uint64_t *_off, uint16_t *_ndirents);
 
 extern void dirent_cpu2be(struct ndirent_phys *phys, const struct ndirent_mem *mem);
 extern void dirent_be2cpu(struct ndirent_mem *mem, const struct ndirent_phys *phys);
--- a/src/objstore/obj_dir.c	Mon Mar 30 23:02:06 2020 -0400
+++ b/src/objstore/obj_dir.c	Mon Mar 30 23:03:05 2020 -0400
@@ -89,7 +89,8 @@
 }
 
 int dir_lookup_entry(struct objver *dirver, const char *name, uint8_t *raw,
-		     bool one, struct ndirent_mem *ent, uint64_t *_off)
+		     bool one, struct ndirent_mem *ent, uint64_t *_off,
+		     uint16_t *_ndirents)
 {
 	const size_t namelen = strlen(name);
 	uint16_t ndirents;
@@ -130,6 +131,8 @@
 
 			if (_off)
 				*_off = off;
+			if (_ndirents)
+				*_ndirents = ndirents;
 
 			return 0;
 		}
@@ -149,7 +152,7 @@
 	struct buffer tgtbuf;
 	int ret;
 
-	ret = dir_lookup_entry(dirver, name, raw, true, &ent, NULL);
+	ret = dir_lookup_entry(dirver, name, raw, true, &ent, NULL, NULL);
 	if (ret)
 		return ret;
 
@@ -185,7 +188,7 @@
 	size_t i;
 	int ret;
 
-	ret = dir_lookup_entry(dirver, name, raw, false, &ent, NULL);
+	ret = dir_lookup_entry(dirver, name, raw, false, &ent, NULL, NULL);
 	if (ret)
 		return ret;
 
@@ -330,7 +333,7 @@
 	uint64_t diroff;
 	int ret;
 
-	ret = dir_lookup_entry(dirver, name, raw, false, &ent, &diroff);
+	ret = dir_lookup_entry(dirver, name, raw, false, &ent, &diroff, NULL);
 	if (ret)
 		return ret;
 
--- a/src/objstore/obj_dir_create.c	Mon Mar 30 23:02:06 2020 -0400
+++ b/src/objstore/obj_dir_create.c	Mon Mar 30 23:03:05 2020 -0400
@@ -135,7 +135,7 @@
 	uint64_t diroff;
 	int ret;
 
-	ret = dir_lookup_entry(dirver, name, raw, false, &ent, &diroff);
+	ret = dir_lookup_entry(dirver, name, raw, false, &ent, &diroff, NULL);
 	if (!ret)
 		return -EEXIST;
 	if (ret != -ENOENT)