(root)/
glibc-2.38/
hurd/
ports-get.c
       1  /* Copyright (C) 1994-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <hurd.h>
      19  
      20  static error_t
      21  getbootstrap (mach_port_t *result)
      22  {
      23    return __task_get_special_port (__mach_task_self (),
      24  				  TASK_BOOTSTRAP_PORT,
      25  				  result);
      26  }
      27  
      28  error_t (*_hurd_ports_getters[INIT_PORT_MAX]) (mach_port_t *result) =
      29    {
      30      [INIT_PORT_BOOTSTRAP] = getbootstrap,
      31    };
      32  
      33  error_t
      34  _hurd_ports_get (unsigned int which, mach_port_t *result)
      35  {
      36    if (which >= _hurd_nports)
      37      return EINVAL;
      38    if (which >= INIT_PORT_MAX || _hurd_ports_getters[which] == NULL)
      39      return HURD_PORT_USE (&_hurd_ports[which],
      40  			  (*result = port) == MACH_PORT_NULL ? 0
      41  			  : __mach_port_mod_refs (__mach_task_self (),
      42  						  port, MACH_PORT_RIGHT_SEND,
      43  						  +1));
      44    return (*_hurd_ports_getters[which]) (result);
      45  }