(root)/
glibc-2.38/
nptl/
tst-initializers1.c
       1  /* Copyright (C) 2005-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  /* We test the code undef conditions outside of glibc.  */
      19  #undef _LIBC
      20  
      21  #include <pthread.h>
      22  
      23  pthread_mutex_t mtx_normal = PTHREAD_MUTEX_INITIALIZER;
      24  pthread_mutex_t mtx_recursive = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
      25  pthread_mutex_t mtx_errorchk = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
      26  pthread_mutex_t mtx_adaptive = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      27  pthread_rwlock_t rwl_normal = PTHREAD_RWLOCK_INITIALIZER;
      28  pthread_rwlock_t rwl_writer
      29    = PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP;
      30  pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
      31  
      32  static int
      33  do_test (void)
      34  {
      35    if (mtx_normal.__data.__kind != PTHREAD_MUTEX_TIMED_NP)
      36      return 1;
      37    if (mtx_recursive.__data.__kind != PTHREAD_MUTEX_RECURSIVE_NP)
      38      return 2;
      39    if (mtx_errorchk.__data.__kind != PTHREAD_MUTEX_ERRORCHECK_NP)
      40      return 3;
      41    if (mtx_adaptive.__data.__kind != PTHREAD_MUTEX_ADAPTIVE_NP)
      42      return 4;
      43    if (rwl_normal.__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP)
      44      return 5;
      45    if (rwl_writer.__data.__flags
      46        != PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
      47      return 6;
      48    /* <libc-lock.h> __libc_rwlock_init definition for libc.so
      49       relies on PTHREAD_RWLOCK_INITIALIZER being all zeros.  If
      50       that ever changes, <libc-lock.h> needs updating.  */
      51    size_t i;
      52    for (i = 0; i < sizeof (rwl_normal); i++)
      53      if (((char *) &rwl_normal)[i] != '\0')
      54        return 7;
      55    return 0;
      56  }
      57  
      58  #define TEST_FUNCTION do_test ()
      59  #include "../test-skeleton.c"