(linenum→info "unix/slp.c:2238")

glibc/2.7/nptl/pthread_attr_setstack.c

    1: /* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3:    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
    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, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.  */
   19: 
   20: #include <assert.h>
   21: #include <errno.h>
   22: #include <limits.h>
   23: #include "pthreadP.h"
   24: 
   25: 
   26: #ifndef NEW_VERNUM
   27: # define NEW_VERNUM GLIBC_2_3_3
   28: #endif
   29: 
   30: 
   31: int
   32: __pthread_attr_setstack (attr, stackaddr, stacksize)
   33:      pthread_attr_t *attr;
   34:      void *stackaddr;
   35:      size_t stacksize;
   36: {
   37:   struct pthread_attr *iattr;
   38: 
   39:   assert (sizeof (*attr) >= sizeof (struct pthread_attr));
   40:   iattr = (struct pthread_attr *) attr;
   41: 
   42:   /* Catch invalid sizes.  */
   43:   if (stacksize < PTHREAD_STACK_MIN)
   44:     return EINVAL;
   45: 
   46: #ifdef EXTRA_PARAM_CHECKS
   47:   EXTRA_PARAM_CHECKS;
   48: #endif
   49: 
   50:   iattr->stacksize = stacksize;
   51:   iattr->stackaddr = (char *) stackaddr + stacksize;
   52:   iattr->flags |= ATTR_FLAG_STACKADDR;
   53: 
   54:   return 0;
   55: }
   56: 
   57: #if PTHREAD_STACK_MIN == 16384
   58: strong_alias (__pthread_attr_setstack, pthread_attr_setstack)
   59: #else
   60: # include <shlib-compat.h>
   61: versioned_symbol (libpthread, __pthread_attr_setstack, pthread_attr_setstack,
   62:                   NEW_VERNUM);
   63: 
   64: # if SHLIB_COMPAT(libpthread, GLIBC_2_2, NEW_VERNUM)
   65: 
   66: int
   67: __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
   68:                              size_t stacksize)
   69: {
   70:   struct pthread_attr *iattr;
   71: 
   72:   assert (sizeof (*attr) >= sizeof (struct pthread_attr));
   73:   iattr = (struct pthread_attr *) attr;
   74: 
   75:   /* Catch invalid sizes.  */
   76:   if (stacksize < 16384)
   77:     return EINVAL;
   78: 
   79: #  ifdef EXTRA_PARAM_CHECKS
   80:   EXTRA_PARAM_CHECKS;
   81: #  endif
   82: 
   83:   iattr->stacksize = stacksize;
   84:   iattr->stackaddr = (char *) stackaddr + stacksize;
   85:   iattr->flags |= ATTR_FLAG_STACKADDR;
   86: 
   87:   return 0;
   88: }
   89: 
   90: compat_symbol (libpthread, __old_pthread_attr_setstack, pthread_attr_setstack,
   91:                GLIBC_2_2);
   92: # endif
   93: 
   94: #endif
Syntax (Markdown)