bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH 6/7] procfs: reorganize rootdir.c


From: Samuel Thibault
Subject: Re: [PATCH 6/7] procfs: reorganize rootdir.c
Date: Mon, 29 Sep 2014 01:26:47 +0200
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Justus Winter, le Mon 22 Sep 2014 11:38:43 +0200, a écrit :
> * procfs/rootdir.c: Move the translator linkage code to the
> appropriate location.

Ack.

> ---
>  procfs/rootdir.c | 153 
> ++++++++++++++++++++++++++++---------------------------
>  1 file changed, 77 insertions(+), 76 deletions(-)
> 
> diff --git a/procfs/rootdir.c b/procfs/rootdir.c
> index a04fb3e..d68645e 100644
> --- a/procfs/rootdir.c
> +++ b/procfs/rootdir.c
> @@ -409,83 +409,7 @@ rootdir_gc_fakeself (void *hook, char **contents, 
> ssize_t *contents_len)
>  }
>  
>  static struct node *rootdir_mounts_node;
> -
> -/* 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_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_translated_node_lock);
> -  np = *ops->npp;
> -  pthread_spin_unlock (&rootdir_translated_node_lock);
> -
> -  if (np != NULL)
> -    {
> -      netfs_nref (np);
> -      return np;
> -    }
> -
> -  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_translated_node_lock);
> -  prev = *ops->npp;
> -  if (*ops->npp == NULL)
> -    *ops->npp = np;
> -  pthread_spin_unlock (&rootdir_translated_node_lock);
> -
> -  if (prev != NULL)
> -    {
> -      procfs_cleanup (np);
> -      np = prev;
> -    }
> -
> -  return np;
> -}
> -
> -static error_t
> -rootdir_translated_node_get_translator (void *hook, char **argz,
> -                                     size_t *argz_len)
> -{
> -  const struct procfs_translated_node_ops *ops = hook;
> -
> -  *argz = malloc (ops->argz_len);
> -  if (! *argz)
> -    return ENOMEM;
> -
> -  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)
>  {
> @@ -619,7 +543,84 @@ rootdir_symlink_make_node (void *dir_hook, const void 
> *entry_hook)
>      procfs_node_chtype (np, S_IFLNK);
>    return np;
>  }
> +
> +/* 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_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_translated_node_lock);
> +  np = *ops->npp;
> +  pthread_spin_unlock (&rootdir_translated_node_lock);
> +
> +  if (np != NULL)
> +    {
> +      netfs_nref (np);
> +      return np;
> +    }
> +
> +  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_translated_node_lock);
> +  prev = *ops->npp;
> +  if (*ops->npp == NULL)
> +    *ops->npp = np;
> +  pthread_spin_unlock (&rootdir_translated_node_lock);
> +
> +  if (prev != NULL)
> +    {
> +      procfs_cleanup (np);
> +      np = prev;
> +    }
> +
> +  return np;
> +}
> +
> +static error_t
> +rootdir_translated_node_get_translator (void *hook, char **argz,
> +                                     size_t *argz_len)
> +{
> +  const struct procfs_translated_node_ops *ops = hook;
>  
> +  *argz = malloc (ops->argz_len);
> +  if (! *argz)
> +    return ENOMEM;
> +
> +  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 const struct procfs_dir_entry rootdir_entries[] = {
>    {
>      .name = "self",
> -- 
> 2.1.0
> 

-- 
Samuel
 Je suis maintenant possesseur d'un ordinateur portable Compaq Armada
 1592DT avec port infra-rouge. Auriez-vous connaissance de programmes
 suceptibles d'utiliser ce port afin de servir de télécommande ?
 -+- JN in NPC : ben quoi, c'est pas à ça que ça sert ?



reply via email to

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