[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd] 70/87: procfs: generalize the translator linkage code
From: |
Samuel Thibault |
Subject: |
[hurd] 70/87: procfs: generalize the translator linkage code |
Date: |
Sun, 09 Nov 2014 11:05:05 +0000 |
This is an automated email from the git hooks/post-receive script.
sthibault pushed a commit to branch upstream
in repository hurd.
commit af68bfc377c4f56a1355d856fe2c666fec6b0d5f
Author: Justus Winter <address@hidden>
Date: Fri Sep 19 10:01:57 2014 +0200
procfs: generalize the translator linkage code
Generalize the translator linkage code previously introduced for the
`mounts' node.
* procfs/rootdir.c (struct procfs_translated_node_ops): New
specialized node operations structure for translated nodes.
(rootdir_mounts_make_node): Generalize and rename to
rootdir_make_translated_node. Also, pass the entry_hook to
procfs_make_node so that...
(rootdir_mounts_get_translator): ... can be generalized to
rootdir_translated_node_get_translator and read the argz vector from
the hooked structure.
(ROOTDIR_DEFINE_TRANSLATED_NODE): New convenience macro to define
translated nodes.
(rootdir_entries): Use the new code for the `mounts' node.
---
procfs/rootdir.c | 62 ++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 42 insertions(+), 20 deletions(-)
diff --git a/procfs/rootdir.c b/procfs/rootdir.c
index 81e36f7..a04fb3e 100644
--- a/procfs/rootdir.c
+++ b/procfs/rootdir.c
@@ -409,17 +409,29 @@ rootdir_gc_fakeself (void *hook, char **contents, ssize_t
*contents_len)
}
static struct node *rootdir_mounts_node;
-static pthread_spinlock_t rootdir_mounts_node_lock =
+
+/* Translator linkage. */
+static pthread_spinlock_t rootdir_translated_node_lock =
PTHREAD_SPINLOCK_INITIALIZER;
+struct procfs_translated_node_ops
+{
+ struct procfs_node_ops node_ops;
+
+ struct node **npp;
+ char *argz;
+ size_t argz_len;
+};
+
static struct node *
-rootdir_mounts_make_node (void *dir_hook, const void *entry_hook)
+rootdir_make_translated_node (void *dir_hook, const void *entry_hook)
{
+ const struct procfs_translated_node_ops *ops = entry_hook;
struct node *np, *prev;
- pthread_spin_lock (&rootdir_mounts_node_lock);
- np = rootdir_mounts_node;
- pthread_spin_unlock (&rootdir_mounts_node_lock);
+ pthread_spin_lock (&rootdir_translated_node_lock);
+ np = *ops->npp;
+ pthread_spin_unlock (&rootdir_translated_node_lock);
if (np != NULL)
{
@@ -427,18 +439,18 @@ rootdir_mounts_make_node (void *dir_hook, const void
*entry_hook)
return np;
}
- np = procfs_make_node (entry_hook, dir_hook);
+ np = procfs_make_node (entry_hook, entry_hook);
if (np == NULL)
return NULL;
procfs_node_chtype (np, S_IFREG | S_IPTRANS);
procfs_node_chmod (np, 0444);
- pthread_spin_lock (&rootdir_mounts_node_lock);
- prev = rootdir_mounts_node;
- if (rootdir_mounts_node == NULL)
- rootdir_mounts_node = np;
- pthread_spin_unlock (&rootdir_mounts_node_lock);
+ pthread_spin_lock (&rootdir_translated_node_lock);
+ prev = *ops->npp;
+ if (*ops->npp == NULL)
+ *ops->npp = np;
+ pthread_spin_unlock (&rootdir_translated_node_lock);
if (prev != NULL)
{
@@ -450,19 +462,30 @@ rootdir_mounts_make_node (void *dir_hook, const void
*entry_hook)
}
static error_t
-rootdir_mounts_get_translator (void *hook, char **argz, size_t *argz_len)
+rootdir_translated_node_get_translator (void *hook, char **argz,
+ size_t *argz_len)
{
- static const char const mtab_argz[] = _HURD_MTAB "\0/";
+ const struct procfs_translated_node_ops *ops = hook;
- *argz = malloc (sizeof mtab_argz);
+ *argz = malloc (ops->argz_len);
if (! *argz)
return ENOMEM;
- memcpy (*argz, mtab_argz, sizeof mtab_argz);
- *argz_len = sizeof mtab_argz;
+ memcpy (*argz, ops->argz, ops->argz_len);
+ *argz_len = ops->argz_len;
return 0;
}
+#define ROOTDIR_DEFINE_TRANSLATED_NODE(NPP, ARGZ) \
+ &(struct procfs_translated_node_ops) { \
+ .node_ops = { \
+ .get_translator = rootdir_translated_node_get_translator, \
+ }, \
+ .npp = NPP, \
+ .argz = (ARGZ), \
+ .argz_len = sizeof (ARGZ), \
+ }
+
static error_t
rootdir_gc_slabinfo (void *hook, char **contents, ssize_t *contents_len)
{
@@ -660,11 +683,10 @@ static const struct procfs_dir_entry rootdir_entries[] = {
},
{
.name = "mounts",
- .hook = & (struct procfs_node_ops) {
- .get_translator = rootdir_mounts_get_translator,
- },
+ .hook = ROOTDIR_DEFINE_TRANSLATED_NODE (&rootdir_mounts_node,
+ _HURD_MTAB "\0/"),
.ops = {
- .make_node = rootdir_mounts_make_node,
+ .make_node = rootdir_make_translated_node,
}
},
{
--
Alioth's /usr/local/bin/git-commit-notice on
/srv/git.debian.org/git/pkg-hurd/hurd.git
- [hurd] 49/87: Add missing linefeed, (continued)
- [hurd] 49/87: Add missing linefeed, Samuel Thibault, 2014/11/09
- [hurd] 58/87: libdiskfs: fix /servers/exec lookup, Samuel Thibault, 2014/11/09
- [hurd] 59/87: hurd: make memory_object parameter polymorphic, Samuel Thibault, 2014/11/09
- [hurd] 61/87: procfs: fix typo in comment, Samuel Thibault, 2014/11/09
- [hurd] 53/87: libtrivfs: fix typo, Samuel Thibault, 2014/11/09
- [hurd] 64/87: BSD apps want sin_zero cleared in sys_getname., Samuel Thibault, 2014/11/09
- [hurd] 60/87: trans/hello{, -mt}: properly escape contents in trivfs_append_args, Samuel Thibault, 2014/11/09
- [hurd] 66/87: exec: redzone page zero before loading anything, Samuel Thibault, 2014/11/09
- [hurd] 52/87: libdiskfs: fix reference counting of peropen objects, Samuel Thibault, 2014/11/09
- [hurd] 62/87: hurd: add symbolic name for the mtab translator, Samuel Thibault, 2014/11/09
- [hurd] 70/87: procfs: generalize the translator linkage code,
Samuel Thibault <=
- [hurd] 56/87: hurd: fix semantic of file_get_children, Samuel Thibault, 2014/11/09
- [hurd] 47/87: Make the ncursesw driver of the console client compile properly, Samuel Thibault, 2014/11/09
- [hurd] 65/87: exec: add proper argument parsing, add --device-master-port, Samuel Thibault, 2014/11/09
- [hurd] 18/87: hurd: fix type of optimal_transfer_size, Samuel Thibault, 2014/11/09
- [hurd] 50/87: sutils: add urandom device target to MAKEDEV, Samuel Thibault, 2014/11/09
- [hurd] 45/87: Revert "libpipe: fix calls to pipe_send with no data", Samuel Thibault, 2014/11/09
- [hurd] 57/87: include: detect use-after-free errors using the reference counts, Samuel Thibault, 2014/11/09
- [hurd] 73/87: libdiskfs: remove code counting cache misses, Samuel Thibault, 2014/11/09
- [hurd] 82/87: Fix dead name notification in static binaries, Samuel Thibault, 2014/11/09
- [hurd] 68/87: procfs: implement /proc/filesystems, Samuel Thibault, 2014/11/09