xref: /freebsd/lib/libthr/sys/thr_error.c (revision da93e82d2476afdaa356dd452eef23a7dee7fa3c)
1  /*
2   * Copyright (c) 1995 John Birrell <jb@cimlogic.com.au>.
3   * Copyright (c) 1994 by Chris Provenzano, proven@mit.edu
4   * All rights reserved.
5   *
6   * Redistribution and use in source and binary forms, with or without
7   * modification, are permitted provided that the following conditions
8   * are met:
9   * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   * 2. Redistributions in binary form must reproduce the above copyright
12   *    notice, this list of conditions and the following disclaimer in the
13   *    documentation and/or other materials provided with the distribution.
14   * 3. All advertising materials mentioning features or use of this software
15   *    must display the following acknowledgement:
16   *	This product includes software developed by John Birrell
17   *  and Chris Provenzano.
18   * 4. Neither the name of the author nor the names of any co-contributors
19   *    may be used to endorse or promote products derived from this software
20   *    without specific prior written permission.
21   *
22   * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
23   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32   * SUCH DAMAGE.
33   *
34   * $FreeBSD$
35   */
36  
37  #include <pthread.h>
38  
39  #include "libc_private.h"
40  #include "thr_private.h"
41  
42  #undef errno
43  extern	int	errno;
44  
45  int *
46  __error(void)
47  {
48  	struct pthread *curthread;
49  
50  	if (_thr_initial != NULL) {
51  		curthread = _get_curthread();
52  		if (curthread != NULL && curthread != _thr_initial)
53  			return (&curthread->error);
54  	}
55  	return (&errno);
56  }
57