>From f09cbc1056ca130ae8144c7f11c75e4b20bb41d9 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov <unlimitedscol...@gmail.com> Date: Sun, 5 Jul 2009 15:26:58 +0300 Subject: [PATCH 3/3] Add the mountee to the list of merged filesystems.
* mount.c (start_mountee): Add the mountee's filesystem to the list of merged filesystems. * node.c (node_init_root): Take into consideration the fact that an empty string refers to the mountee root. * ulfs.c (ulfs_check): Likewise. (ulfs_register): Don't check whether "" is a valid directory. --- mount.c | 9 +++++++++ node.c | 15 ++++++++++++--- ulfs.c | 15 ++++++++++++--- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/mount.c b/mount.c index 45889f8..9d2a1e5 100644 --- a/mount.c +++ b/mount.c @@ -27,6 +27,7 @@ #include "mount.h" #include "lib.h" +#include "ulfs.h" /* The command line for starting the mountee. */ char * mountee_argz; @@ -167,6 +168,14 @@ setup_unionmount (void) if (err) return err; + /* A path equal to "" will mean that the current ULFS entry is the + mountee port. */ + ulfs_register ("", 0, 0); + + /* Initialize the list of merged filesystems. */ + ulfs_check (); + node_init_root (netfs_root_node); + mountee_started = 1; return 0; diff --git a/node.c b/node.c index cf9a8b4..852b5c9 100644 --- a/node.c +++ b/node.c @@ -1,7 +1,10 @@ /* Hurd unionfs - Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc. + Written by Moritz Schulte <mor...@duesseldorf.ccc.de>. + Adapted for unionmount by Sergiu Ivanov <unlimitedscol...@gmail.com>. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the @@ -33,6 +36,7 @@ #include "node.h" #include "ulfs.h" #include "lib.h" +#include "mount.h" /* Declarations for functions only used in this file. */ @@ -535,8 +539,13 @@ node_init_root (node_t *node) break; if (ulfs->path) - node_ulfs->port = file_name_lookup (ulfs->path, - O_READ | O_DIRECTORY, 0); + { + if (!ulfs->path[0]) + node_ulfs->port = mountee_root; + else + node_ulfs->port = file_name_lookup (ulfs->path, + O_READ | O_DIRECTORY, 0); + } else node_ulfs->port = underlying_node; diff --git a/ulfs.c b/ulfs.c index 3c565a5..126844d 100644 --- a/ulfs.c +++ b/ulfs.c @@ -1,7 +1,10 @@ /* Hurd unionfs - Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc. + Written by Moritz Schulte <mor...@duesseldorf.ccc.de>. + Adapted for unionmount by Sergiu Ivanov <unlimitedscol...@gmail.com>. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the @@ -31,6 +34,7 @@ #include "lib.h" #include "ulfs.h" +#include "mount.h" /* The start of the ulfs chain. */ ulfs_t *ulfs_chain_start; @@ -219,7 +223,7 @@ ulfs_register (char *path, int flags, int priority) ulfs_t *ulfs; error_t err; - if (path) + if (path && path[0]) { err = check_dir (path); if (err) @@ -261,7 +265,12 @@ ulfs_check () { if (u->path) - p = file_name_lookup (u->path, O_READ | O_DIRECTORY, 0); + { + if (!u->path[0]) + p = mountee_root; + else + p = file_name_lookup (u->path, O_READ | O_DIRECTORY, 0); + } else p = underlying_node; -- 1.6.3.3