diff options
Diffstat (limited to 'support')
-rw-r--r-- | support/Makefile | 2 | ||||
-rw-r--r-- | support/support.h | 1 | ||||
-rw-r--r-- | support/xposix_memalign.c | 35 | ||||
-rw-r--r-- | support/xpthread_attr_setstack.c | 26 | ||||
-rw-r--r-- | support/xthread.h | 2 |
5 files changed, 66 insertions, 0 deletions
diff --git a/support/Makefile b/support/Makefile index c15b93647c..9ff0ec3fff 100644 --- a/support/Makefile +++ b/support/Makefile @@ -99,10 +99,12 @@ libsupport-routines = \ xopen \ xpipe \ xpoll \ + xposix_memalign \ xpthread_attr_destroy \ xpthread_attr_init \ xpthread_attr_setdetachstate \ xpthread_attr_setguardsize \ + xpthread_attr_setstack \ xpthread_attr_setstacksize \ xpthread_barrier_destroy \ xpthread_barrier_init \ diff --git a/support/support.h b/support/support.h index 119495e5a9..97fef2cd23 100644 --- a/support/support.h +++ b/support/support.h @@ -86,6 +86,7 @@ int support_descriptor_supports_holes (int fd); void *xmalloc (size_t) __attribute__ ((malloc)); void *xcalloc (size_t n, size_t s) __attribute__ ((malloc)); void *xrealloc (void *p, size_t n); +void *xposix_memalign (size_t alignment, size_t n); char *xasprintf (const char *format, ...) __attribute__ ((format (printf, 1, 2), malloc)); char *xstrdup (const char *); diff --git a/support/xposix_memalign.c b/support/xposix_memalign.c new file mode 100644 index 0000000000..5501a0846a --- /dev/null +++ b/support/xposix_memalign.c @@ -0,0 +1,35 @@ +/* Error-checking wrapper for posix_memalign. + Copyright (C) 2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <support/support.h> +#include <stdlib.h> +#include <errno.h> + +void * +xposix_memalign (size_t alignment, size_t n) +{ + void *p = NULL; + + int ret = posix_memalign (&p, alignment, n); + if (ret) + { + errno = ret; + oom_error ("posix_memalign", n); + } + return p; +} diff --git a/support/xpthread_attr_setstack.c b/support/xpthread_attr_setstack.c new file mode 100644 index 0000000000..c3772e240b --- /dev/null +++ b/support/xpthread_attr_setstack.c @@ -0,0 +1,26 @@ +/* pthread_attr_setstack with error checking. + Copyright (C) 2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <support/xthread.h> + +void +xpthread_attr_setstack (pthread_attr_t *attr, void *stackaddr, size_t stacksize) +{ + xpthread_check_return ("pthread_attr_setstack", + pthread_attr_setstack (attr, stackaddr, stacksize)); +} diff --git a/support/xthread.h b/support/xthread.h index 9fe1f68b3b..5204f78ed2 100644 --- a/support/xthread.h +++ b/support/xthread.h @@ -68,6 +68,8 @@ void xpthread_attr_destroy (pthread_attr_t *attr); void xpthread_attr_init (pthread_attr_t *attr); void xpthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate); +void xpthread_attr_setstack (pthread_attr_t *attr, void *stackaddr, + size_t stacksize); void xpthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize); void xpthread_attr_setguardsize (pthread_attr_t *attr, |