(root)/
glibc-2.38/
nis/
nis_domain_of_r.c
       1  /* Copyright (c) 1997-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 <errno.h>
      19  #include <string.h>
      20  #include <rpcsvc/nis.h>
      21  #include <shlib-compat.h>
      22  
      23  nis_name
      24  nis_domain_of_r (const_nis_name name, char *buffer, size_t buflen)
      25  {
      26    char *cptr;
      27    size_t cptr_len;
      28  
      29    if (buffer == NULL)
      30      {
      31      erange:
      32        __set_errno (ERANGE);
      33        return NULL;
      34      }
      35  
      36    buffer[0] = '\0';
      37  
      38    cptr = strchr (name, '.');
      39  
      40    if (cptr == NULL)
      41      return buffer;
      42  
      43    ++cptr;
      44    cptr_len = strlen (cptr);
      45  
      46    if (cptr_len == 0)
      47      {
      48        if (buflen < 2)
      49  	goto erange;
      50        return strcpy (buffer, ".");
      51      }
      52  
      53    if (__glibc_unlikely (cptr_len >= buflen))
      54      {
      55        __set_errno (ERANGE);
      56        return NULL;
      57      }
      58  
      59    return memcpy (buffer, cptr, cptr_len + 1);
      60  }
      61  libnsl_hidden_nolink_def (nis_domain_of_r, GLIBC_2_1)