(root)/
glibc-2.38/
htl/
tests/
test-5.c
       1  /* Test signals.
       2     Copyright (C) 2000-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library;  if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #define _GNU_SOURCE
      20  
      21  #include <pthread.h>
      22  #include <unistd.h>
      23  #include <stdio.h>
      24  #include <errno.h>
      25  #include <error.h>
      26  #include <assert.h>
      27  #include <sys/resource.h>
      28  #include <sys/wait.h>
      29  
      30  void *
      31  thr (void *arg)
      32  {
      33    *(int *) 0 = 0;
      34    return 0;
      35  }
      36  
      37  int foobar;
      38  
      39  int
      40  main (int argc, char *argv[])
      41  {
      42    error_t err;
      43    pid_t child;
      44  
      45    struct rlimit limit;
      46  
      47    limit.rlim_cur = 0;
      48    limit.rlim_max = 0;
      49  
      50    err = setrlimit (RLIMIT_CORE, &limit);
      51    if (err)
      52      error (1, err, "setrlimit");
      53  
      54    child = fork ();
      55    switch (child)
      56      {
      57      case -1:
      58        error (1, errno, "fork");
      59        break;
      60  
      61      case 0:
      62        {
      63  	pthread_t tid;
      64  	void *ret;
      65  
      66  	err = pthread_create (&tid, 0, thr, 0);
      67  	if (err)
      68  	  error (1, err, "pthread_create");
      69  
      70  	err = pthread_join (tid, &ret);
      71  	assert_perror (err);
      72  
      73  	/* Should have never returned.  Our parent expects us to fail
      74  	   thus we succeed and indicate the error.  */
      75  	return 0;
      76        }
      77  
      78      default:
      79        {
      80  	pid_t pid;
      81  	int status;
      82  
      83  	pid = waitpid (child, &status, 0);
      84  	printf ("pid = %d; child = %d; status = %d\n", pid, child, status);
      85  	assert (pid == child);
      86  	assert (status != 0);
      87        }
      88      }
      89  
      90    return 0;
      91  }