summaryrefslogtreecommitdiff
path: root/unionfs/lnode.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2012-04-08 23:09:39 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-04-08 23:09:39 +0000
commit5499792c357777dcfc5ee461fa64baaba1d2dde5 (patch)
tree15363c44fe541b3adcd720edf39696e9230d7feb /unionfs/lnode.c
parente5fca9a10c2622b85cc77e776ea56c8dbb9847e6 (diff)
parentc6db537edac054a03847b1b99f78c00703f48d6b (diff)
Merge branch 'dde' of git.debian.org:/git/pkg-hurd/hurd into dde
Diffstat (limited to 'unionfs/lnode.c')
-rw-r--r--unionfs/lnode.c184
1 files changed, 0 insertions, 184 deletions
diff --git a/unionfs/lnode.c b/unionfs/lnode.c
deleted file mode 100644
index 9b242bba..00000000
--- a/unionfs/lnode.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Hurd unionfs
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- Written by Moritz Schulte <moritz@duesseldorf.ccc.de>.
-
- 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
- License, or * (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA. */
-
-/* `light node' management. See unionfs.h for an explanation of light
- nodes. */
-
-#define _GNU_SOURCE
-
-#include <hurd/netfs.h>
-#include <error.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lnode.h"
-#include "lib.h"
-#include "unionfs.h"
-
-/* Create a new light node as an entry with the name NAME and store it
- in *NODE. The new node is not locked and contains a single
- reference. */
-error_t
-lnode_create (char *name, lnode_t **node)
-{
- lnode_t *node_new = malloc (sizeof (lnode_t));
- error_t err = 0;
-
- debug_msg ("lnode_create for name: %s", name);
-
- if (! node_new)
- err = ENOMEM;
- else
- {
- char *name_cp = NULL;
-
- if (name)
- name_cp = strdup (name);
- if (name && (! name_cp))
- {
- err = ENOMEM;
- free (node_new);
- }
- else
- {
- node_new->name = name_cp;
- node_new->name_len = name_cp ? strlen (name_cp) : 0;
- node_new->flags = 0;
- node_new->node = NULL;
- node_new->next = NULL;
- node_new->prevp = NULL;
- node_new->dir = NULL;
- node_new->entries = NULL;
- node_new->references = 1;
- mutex_init (&node_new->lock);
- mutex_lock (&node_new->lock);
- *node = node_new;
- }
- }
- return err;
-}
-
-/* Destroy a light node. */
-void
-lnode_destroy (lnode_t *node)
-{
- debug_msg ("lnode_destroy for name: %s", node->name);
- free (node->name);
- free (node);
-}
-
-/* Install the node in the node tree; add a reference to DIR, which
- must be locked. */
-void
-lnode_install (lnode_t *dir, lnode_t *node)
-{
- lnode_ref_add (dir);
- node->next = dir->entries;
- node->prevp = &dir->entries;
- if (dir->entries)
- dir->entries->prevp = &node->next;
- dir->entries = node;
- node->dir = dir;
-}
-
-/* Uninstall the node from the node tree; remove a reference from the
- lnode containing NODE. */
-void
-lnode_uninstall (lnode_t *node)
-{
- lnode_ref_remove (node->dir);
- *node->prevp = node->next;
- if (node->next)
- node->next->prevp = &node->next;
-}
-
-/* Add a reference to NODE, which must be locked. */
-void
-lnode_ref_add (lnode_t *node)
-{
- node->references++;
-}
-
-/* Remove a reference to NODE, which must be locked. If that was the
- last reference, destroy the node, otherwise simply unlock NODE. */
-void
-lnode_ref_remove (lnode_t *node)
-{
- assert (node->references);
- if (! --node->references)
- {
- lnode_uninstall (node);
- lnode_destroy (node);
- }
- else
- mutex_unlock (&node->lock);
-}
-
-/* Get a light node by it's name. The looked up node is locked and
- got one reference added. */
-error_t
-lnode_get (lnode_t *dir, char *name,
- lnode_t **node)
-{
- error_t err = 0;
- lnode_t *n;
-
- for (n = dir->entries; n && strcmp (n->name, name); n = n->next);
- if (n)
- {
- mutex_lock (&n->lock);
- lnode_ref_add (n);
- *node = n;
- }
- else
- err = ENOENT;
-
- return err;
-}
-
-/* Construct the full path for a given light node. */
-error_t
-lnode_path_construct (lnode_t *node,
- char **path)
-{
- error_t err = 0;
- int p_len = 1;
- lnode_t *n;
- char *p;
-
- for (n = node; n && n->dir; n = n->dir)
- p_len += n->name_len + (n->dir->dir ? 1 : 0);
-
- p = malloc (p_len);
- if (! p)
- err = ENOMEM;
- else
- {
- *(p + --p_len) = 0;
- for (n = node; n && n->dir; n = n->dir)
- {
- p_len -= n->name_len;
- strncpy (p + p_len, n->name, n->name_len);
- if (n->dir->dir)
- *(p + --p_len) = '/';
- }
- *path = p;
- }
- return err;
-}