(root)/
glibc-2.38/
hurd/
ports-set.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  setbootstrap (mach_port_t newport)
      22  {
      23    return __task_set_special_port (__mach_task_self (),
      24  				  TASK_BOOTSTRAP_PORT,
      25  				  newport);
      26  }
      27  
      28  extern error_t _hurd_setauth (auth_t);
      29  extern error_t _hurd_setproc (process_t);
      30  extern error_t _hurd_setcttyid (mach_port_t);
      31  
      32  error_t (*_hurd_ports_setters[INIT_PORT_MAX]) (mach_port_t newport) =
      33    {
      34      [INIT_PORT_BOOTSTRAP] = setbootstrap,
      35      [INIT_PORT_AUTH] = _hurd_setauth,
      36      [INIT_PORT_PROC] = _hurd_setproc,
      37      [INIT_PORT_CTTYID] = _hurd_setcttyid,
      38    };
      39  
      40  
      41  error_t
      42  _hurd_ports_set (unsigned int which, mach_port_t newport)
      43  {
      44    error_t err;
      45    if (which >= _hurd_nports)
      46      return EINVAL;
      47    if (err = __mach_port_mod_refs (__mach_task_self (), newport,
      48  				  MACH_PORT_RIGHT_SEND, 1))
      49      return err;
      50    if (which >= INIT_PORT_MAX || _hurd_ports_setters[which] == NULL)
      51      {
      52        _hurd_port_set (&_hurd_ports[which], newport);
      53        return 0;
      54      }
      55    return (*_hurd_ports_setters[which]) (newport);
      56  }