bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/3] Add the mountee to the list of merged filesystems.


From: Sergiu Ivanov
Subject: [PATCH 3/3] Add the mountee to the list of merged filesystems.
Date: Mon, 3 Aug 2009 20:42:27 +0300
User-agent: Mutt/1.5.18 (2008-05-17)

>From f09cbc1056ca130ae8144c7f11c75e4b20bb41d9 Mon Sep 17 00:00:00 2001
From: Sergiu Ivanov <unlimitedscolobb@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 <moritz@duesseldorf.ccc.de>.
 
+   Adapted for unionmount by Sergiu Ivanov <unlimitedscolobb@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 <moritz@duesseldorf.ccc.de>.
 
+   Adapted for unionmount by Sergiu Ivanov <unlimitedscolobb@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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]