summaryrefslogtreecommitdiff
path: root/libdiskfs/peropen-make.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-09-02 11:37:05 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2013-09-15 23:08:25 +0200
commit06d49cdadd9e96361f3fe49b9c940b88bb869284 (patch)
tree87f79b4aaa830c34f260c3057970b8e1d3c9fab3 /libdiskfs/peropen-make.c
parent39e97c785a7b7f5fd5458986aa834e4069ce3b2f (diff)
libdiskfs: track file name in struct peropen
Track the relative path used to obtain a file handle in the struct peropen. * libdiskfs/diskfs.h (struct peropen): New field path. * libdiskfs/peropen-make.c (diskfs_make_peropen): Initialize path. * libdiskfs/peropen-rele.c (diskfs_release_peropen): Free path. * libdiskfs/fsys-getroot.c (diskfs_S_fsys_getroot): Initialize path. * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Preserve the path.
Diffstat (limited to 'libdiskfs/peropen-make.c')
-rw-r--r--libdiskfs/peropen-make.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libdiskfs/peropen-make.c b/libdiskfs/peropen-make.c
index d37516c1..b11b2ad6 100644
--- a/libdiskfs/peropen-make.c
+++ b/libdiskfs/peropen-make.c
@@ -34,6 +34,7 @@ diskfs_make_peropen (struct node *np, int flags, struct peropen *context,
po->refcnt = 0;
po->openstat = flags;
po->np = np;
+ po->path = NULL;
if (context)
{
@@ -50,6 +51,13 @@ diskfs_make_peropen (struct node *np, int flags, struct peropen *context,
if (po->shadow_root_parent != MACH_PORT_NULL)
mach_port_mod_refs (mach_task_self (), po->shadow_root_parent,
MACH_PORT_RIGHT_SEND, 1);
+
+ if (context->path)
+ {
+ po->path = strdup (context->path);
+ if (! po->path)
+ return ENOMEM;
+ }
}
else
{