Bruno Haible [Thu, 20 Jun 2019 02:15:30 +0000 (04:15 +0200)]
windows-tls: New module.
* lib/windows-tls.h: New file, based on lib/glthread/tls.h.
* lib/windows-tls.c: New file, based on lib/glthread/tls.h.
* lib/glthread/tls.h: Include windows-tls.h.
(gl_tls_key_t): Define using glwthread_tls_key_t.
* modules/windows-tls: New file.
* modules/tls (Depends-on): Add windows-tls.
Bruno Haible [Thu, 20 Jun 2019 02:12:41 +0000 (04:12 +0200)]
windows-timedrecmutex: New module.
* lib/windows-timedrecmutex.h: New file, based on windows-recmutex.h.
* lib/windows-timedrecmutex.c: New file, based on windows-recmutex.c.
* modules/windows-timedrecmutex: New file.
Bruno Haible [Thu, 20 Jun 2019 02:11:57 +0000 (04:11 +0200)]
windows-timedmutex: New module.
* lib/windows-timedmutex.h: New file, based on windows-mutex.h.
* lib/windows-timedmutex.c: New file, based on windows-mutex.c.
* modules/windows-timedmutex: New file.
Bruno Haible [Thu, 20 Jun 2019 02:08:16 +0000 (04:08 +0200)]
windows-mutex: New module.
* lib/windows-mutex.h: New file, extracted from lib/glthread/lock.h.
* lib/windows-mutex.c: New file, extracted from lib/glthread/lock.c.
* lib/windows-spinlock.h: New file, extracted from lib/glthread/lock.h.
* lib/glthread/lock.h: Include windows-spinlock.h, windows-mutex.h.
(gl_spinlock_t): Remove type.
(gl_lock_t): Define using glwthread_mutex_t.
(gl_lock_initializer): Define using GLWTHREAD_MUTEX_INIT.
(glthread_lock_init): Define using glwthread_mutex_init.
(glthread_lock_lock): Define using glwthread_mutex_lock.
(glthread_lock_unlock): Define using glwthread_mutex_unlock.
(glthread_lock_destroy): Define using glwthread_mutex_destroy.
(glthread_lock_init_func, glthread_lock_lock_func,
glthread_lock_unlock_func, glthread_lock_destroy_func): Remove
declarations.
Use glwthread_spinlock_t instead of gl_spinlock_t.
(gl_rwlock_initializer, gl_recursive_lock_initializer): Define using
GLWTHREAD_SPINLOCK_INIT.
* lib/glthread/lock.c (glthread_lock_init_func, glthread_lock_lock_func,
glthread_lock_unlock_func, glthread_lock_destroy_func): Remove
functions.
* lib/glthread/cond.h: Use glwthread_spinlock_t instead of
gl_spinlock_t.
* modules/windows-mutex: New file.
* modules/lock (Depends-on): Add windows-mutex.
Bruno Haible [Thu, 20 Jun 2019 02:04:08 +0000 (04:04 +0200)]
lock, cond: Avoid possible counter wraparound on Windows.
* lib/glthread/lock.c (glthread_lock_lock_func): Leave the 'started'
field of the guard unchanged if it was already positive.
(glthread_rwlock_rdlock_func): Likewise.
(glthread_rwlock_wrlock_func): Likewise.
(glthread_recursive_lock_lock_func): Likewise.
* lib/glthread/cond.c (glthread_cond_wait_func): Likewise.
(glthread_cond_timedwait_func): Likewise.
Bruno Haible [Thu, 20 Jun 2019 02:02:52 +0000 (04:02 +0200)]
pthread_mutex_timedlock: New module.
* lib/pthread.in.h (pthread_mutex_timedlock): New dummy function and
new declaration.
* lib/pthread_mutex_timedlock.c: New file.
* m4/pthread_mutex_timedlock.m4: New file.
* m4/pthread.m4 (gl_PTHREAD_CHECK): Don't call AC_LIBOBJ here. Test
whether pthread_mutex_timedlock is declared.
(gl_PTHREAD_MODULE_INDICATOR): New macro.
(gl_PTHREAD_DEFAULTS): Initialize GNULIB_PTHREAD_MUTEX_TIMEDLOCK,
HAVE_PTHREAD_MUTEX_TIMEDLOCK.
* modules/pthread (configure.ac): Call AC_LIBOBJ here.
(Makefile.am): Substitute GNULIB_PTHREAD_MUTEX_TIMEDLOCK,
HAVE_PTHREAD_MUTEX_TIMEDLOCK.
* modules/pthread_mutex_timedlock: New file.
* doc/posix-functions/pthread_mutex_timedlock.texi: Mention the new
module.
* m4/threadlib.m4 (gl_THREADLIB_BODY): Test for <threads.h>.
* lib/glthread/thread.h (c11_threads_in_use): New macro.
(pthread_in_use, pth_in_use, thread_in_use): Use it.
* lib/glthread/lock.h (c11_threads_in_use): New macro.
(pthread_in_use, pth_in_use, thread_in_use): Use it.
* lib/glthread/cond.h (c11_threads_in_use): New macro.
(pthread_in_use, pth_in_use, thread_in_use): Use it.
* lib/glthread/tls.h (c11_threads_in_use): New macro.
(pthread_in_use, pth_in_use, thread_in_use): Use it.
Bruno Haible [Thu, 20 Jun 2019 01:53:51 +0000 (03:53 +0200)]
tls tests: Small improvements.
* tests/test-tls.c: Include <stdint.h>.
(worker_thread): Avoid gcc warning on 64-bit mingw.
(test_tls): Pass a different id to each thread.
* modules/tls-tests (Depends-on): Add stdint.
Bruno Haible [Wed, 19 Jun 2019 10:06:23 +0000 (12:06 +0200)]
Reorder pieces of header in perl scripts.
The desired order is
- Prologue part 1 (2 lines with #!)
- Program short description
- Copyright and license notice
- Written-by notice
- Program short description (optional)
- Program long description (optional)
- Prologue part 2
- Time stamp
- Code
Reported by Paul Eggert.
* build-aux/announce-gen: Reorder header.
* build-aux/gitlog-to-changelog: Likewise.
* build-aux/useless-if-before-free: Likewise.
* build-aux/prefix-gnulib-mk: Add copyright notice and short
description.
* build-aux/update-copyright: Likewise. Add short description. Bump
time-stamp-line-limit to 200.
Paul Eggert [Wed, 19 Jun 2019 00:41:46 +0000 (17:41 -0700)]
verify-tests: work around xlc bug
Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2019-06/msg00049.html
* tests/test-verify.c (item): Move the arithmetic inside the
verify_expr, to avoid tickling a bug in IBM AIX xlc V12.1.
Bruno Haible [Sat, 15 Jun 2019 11:03:58 +0000 (13:03 +0200)]
Fix scripts to have valid executable format on Alpine Linux.
Reported by Tim Rühsen <tim.ruehsen@gmx.de>.
Idea by Paul Eggert.
* build-aux/useless-if-before-free: Use a prologue that starts with
'#!/bin/sh'.
* build-aux/announce-gen: Likewise.
* build-aux/gitlog-to-changelog: Likewise.
* build-aux/prefix-gnulib-mk: Likewise.
* build-aux/update-copyright: Likewise.
* tests/test-update-copyright.sh: Update test program accordingly.
Bruno Haible [Mon, 10 Jun 2019 14:51:51 +0000 (16:51 +0200)]
posix_spawn_file_actions_addchdir: Fix possible use-after-free bug.
* lib/spawn_int.h (struct __spawn_action): Remove 'const' from path.
* lib/spawn_faction_addchdir.c (posix_spawn_file_actions_addchdir): Make
a copy of the path argument.
* lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy): Free
it.
Bruno Haible [Mon, 10 Jun 2019 14:50:04 +0000 (16:50 +0200)]
posix_spawn_file_actions_addopen: Fix possible use-after-free bug.
Reported at <https://sourceware.org/bugzilla/show_bug.cgi?id=17048>.
* lib/spawn_int.h (struct __spawn_action): Remove 'const' from path.
* lib/spawn_faction_addopen.c (posix_spawn_file_actions_addopen): Make
a copy of the path argument.
* lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy): Free
it.
Bruno Haible [Mon, 10 Jun 2019 14:17:35 +0000 (16:17 +0200)]
posix_spawn_file_actions_addfchdir: Add tests.
* tests/test-posix_spawn_file_actions_addfchdir.c: New file.
* tests/test-posix_spawn5.c: New file.
* modules/posix_spawn_file_actions_addfchdir-tests: New file.
Bruno Haible [Mon, 10 Jun 2019 12:15:41 +0000 (14:15 +0200)]
doc: Update and improve documentation of glibc functions.
This is a series of commits that
- updates the documentation to the state of glibc 2.29,
- adds references to Linux man pages and glibc documentation,
- marks Linux specific functions as such.
These are the commits:
doc: Update after removal of crypt functions from glibc 2.28.
doc: Remove mention of function vm86 (does not exist on x86_64).
doc: Remove mention of functions that are gone from glibc.
doc: Mention that glibc no longer provides h_errno.
doc: Mention the availability of specific functions in glibc versions.
doc: Mention eaccess.
doc: Add references to Linux man pages.
doc: Add references to glibc documentation.
doc: Mention inotify_* functions.
doc: Mention ppoll.
doc: Mention sched_getcpu.
doc: Mention sync_file_range.
doc: Mention epoll_pwait.
doc: Mention eventfd, eventfd_read, eventfd_write.
doc: Mention signalfd.
doc: Mention timerfd_create, timerfd_gettime, timerfd_settime.
doc: Mention epoll_create1.
doc: Mention getauxval.
doc: Mention pthread_getattr_default_np, pthread_setattr_default_np.
doc: Mention nextdown, nextup.
doc: Mention more ISO TS 18661-1 <math.h> functions.
doc: Mention ISO TS 18661-1 <fenv.h> functions.
doc: Mention getrandom, getentropy.
doc: Mention strfromf, strfromd, strfroml.
doc: Mention preadv2, pwritev2.
doc: Mention copy_file_range.
doc: Mention memfd_create.
doc: Mention mlock2.
doc: Mention pkey_alloc, pkey_set, pkey_get, pkey_free, pkey_mprotect.
doc: Mention more ISO TS 18661-1 <math.h> functions.
doc: Mention renameat2.
doc: Mention statx.
doc: Mention the ISO C11 multithreading header and functions.
doc: Mention getcpu.
doc: Mention posix_spawn_file_actions_add[f]chdir_np.
doc: Some glibc functions also exist on IRIX 6.5 in 32-bit mode.
doc: Some glibc functions also exist on FreeBSD, AIX, HP-UX, Solaris 11.
doc: Some glibc functions also exist on FreeBSD, Solaris 11.
doc: Some glibc functions also exist on Solaris 11.
doc: Some glibc functions also exist on Solaris 11.4.
doc: Some glibc functions also exist on FreeBSD.
doc: Some glibc functions also exist on BeOS.
doc: Some glibc functions also exist on Haiku.
doc: Mark functions which exist only on Linux.
doc: Mark functions which exist only on Linux and illumos.
* doc/glibc-functions/posix_spawn_file_actions_addchdir_np.texi: New file.
* doc/glibc-functions/posix_spawn_file_actions_addfchdir_np.texi: New file.
* doc/gnulib.texi (Glibc spawn.h): New section.
Bruno Haible [Mon, 10 Jun 2019 12:08:42 +0000 (14:08 +0200)]
doc: Mention the ISO C11 multithreading header and functions.
* doc/posix-headers/threads.texi: New file.
* doc/posix-functions/call_once.texi: New file.
* doc/posix-functions/cnd_broadcast.texi: New file.
* doc/posix-functions/cnd_destroy.texi: New file.
* doc/posix-functions/cnd_init.texi: New file.
* doc/posix-functions/cnd_signal.texi: New file.
* doc/posix-functions/cnd_timedwait.texi: New file.
* doc/posix-functions/cnd_wait.texi: New file.
* doc/posix-functions/mtx_destroy.texi: New file.
* doc/posix-functions/mtx_init.texi: New file.
* doc/posix-functions/mtx_lock.texi: New file.
* doc/posix-functions/mtx_timedlock.texi: New file.
* doc/posix-functions/mtx_trylock.texi: New file.
* doc/posix-functions/mtx_unlock.texi: New file.
* doc/posix-functions/thrd_create.texi: New file.
* doc/posix-functions/thrd_current.texi: New file.
* doc/posix-functions/thrd_detach.texi: New file.
* doc/posix-functions/thrd_equal.texi: New file.
* doc/posix-functions/thrd_exit.texi: New file.
* doc/posix-functions/thrd_join.texi: New file.
* doc/posix-functions/thrd_sleep.texi: New file.
* doc/posix-functions/thrd_yield.texi: New file.
* doc/posix-functions/tss_create.texi: New file.
* doc/posix-functions/tss_delete.texi: New file.
* doc/posix-functions/tss_get.texi: New file.
* doc/posix-functions/tss_set.texi: New file.
* doc/gnulib.texi (Header File Substitutes): Include posix-headers/threads.texi.
(Function Substitutes): Include the new posix-functions/*.texi files.
Bruno Haible [Mon, 10 Jun 2019 12:08:39 +0000 (14:08 +0200)]
doc: Mention more ISO TS 18661-1 <math.h> functions.
* doc/posix-functions/fadd.texi: New file.
* doc/posix-functions/faddl.texi: New file.
* doc/posix-functions/daddl.texi: New file.
* doc/posix-functions/fsub.texi: New file.
* doc/posix-functions/fsubl.texi: New file.
* doc/posix-functions/dsubl.texi: New file.
* doc/posix-functions/fmul.texi: New file.
* doc/posix-functions/fmull.texi: New file.
* doc/posix-functions/dmull.texi: New file.
* doc/posix-functions/fdiv.texi: New file.
* doc/posix-functions/fdivl.texi: New file.
* doc/posix-functions/ddivl.texi: New file.
* doc/gnulib.texi (Function Substitutes): Include them.
* doc/glibc-functions/pkey_alloc.texi: New file.
* doc/glibc-functions/pkey_set.texi: New file.
* doc/glibc-functions/pkey_get.texi: New file.
* doc/glibc-functions/pkey_free.texi: New file.
* doc/glibc-functions/pkey_mprotect.texi: New file.
* doc/gnulib.texi (Glibc sys/mman.h): Include them.
Bruno Haible [Mon, 10 Jun 2019 12:08:32 +0000 (14:08 +0200)]
doc: Mention strfromf, strfromd, strfroml.
* doc/posix-functions/strfromf.texi: New file.
* doc/posix-functions/strfromd.texi: New file.
* doc/posix-functions/strfroml.texi: New file.
* doc/gnulib.texi (Function Substitutes): Include them.
Bruno Haible [Mon, 10 Jun 2019 12:08:30 +0000 (14:08 +0200)]
doc: Mention ISO TS 18661-1 <fenv.h> functions.
* posix-functions/fesetexcept.texi: New file.
* posix-functions/fetestexceptflag.texi: New file.
* posix-functions/fegetmode.texi: New file.
* posix-functions/fesetmode.texi: New file.
* doc/gnulib.texi (Function Substitutes): Include them.
Bruno Haible [Mon, 10 Jun 2019 12:08:29 +0000 (14:08 +0200)]
doc: Mention more ISO TS 18661-1 <math.h> functions.
* doc/posix-functions/roundeven.texi: New file.
* doc/posix-functions/roundevenf.texi: New file.
* doc/posix-functions/roundevenl.texi: New file.
* doc/posix-functions/fromfp.texi: New file.
* doc/posix-functions/fromfpf.texi: New file.
* doc/posix-functions/fromfpl.texi: New file.
* doc/posix-functions/ufromfp.texi: New file.
* doc/posix-functions/ufromfpf.texi: New file.
* doc/posix-functions/ufromfpl.texi: New file.
* doc/posix-functions/fromfpx.texi: New file.
* doc/posix-functions/fromfpxf.texi: New file.
* doc/posix-functions/fromfpxl.texi: New file.
* doc/posix-functions/ufromfpx.texi: New file.
* doc/posix-functions/ufromfpxf.texi: New file.
* doc/posix-functions/ufromfpxl.texi: New file.
* doc/posix-functions/llogb.texi: New file.
* doc/posix-functions/llogbf.texi: New file.
* doc/posix-functions/llogbl.texi: New file.
* doc/posix-functions/fmaxmag.texi: New file.
* doc/posix-functions/fmaxmagf.texi: New file.
* doc/posix-functions/fmaxmagl.texi: New file.
* doc/posix-functions/fminmag.texi: New file.
* doc/posix-functions/fminmagf.texi: New file.
* doc/posix-functions/fminmagl.texi: New file.
* doc/posix-functions/totalorder.texi: New file.
* doc/posix-functions/totalorderf.texi: New file.
* doc/posix-functions/totalorderl.texi: New file.
* doc/posix-functions/totalordermag.texi: New file.
* doc/posix-functions/totalordermagf.texi: New file.
* doc/posix-functions/totalordermagl.texi: New file.
* doc/posix-functions/canonicalize.texi: New file.
* doc/posix-functions/canonicalizef.texi: New file.
* doc/posix-functions/canonicalizel.texi: New file.
* doc/posix-functions/getpayload.texi: New file.
* doc/posix-functions/getpayloadf.texi: New file.
* doc/posix-functions/getpayloadl.texi: New file.
* doc/posix-functions/setpayload.texi: New file.
* doc/posix-functions/setpayloadf.texi: New file.
* doc/posix-functions/setpayloadl.texi: New file.
* doc/posix-functions/setpayloadsig.texi: New file.
* doc/posix-functions/setpayloadsigf.texi: New file.
* doc/posix-functions/setpayloadsigl.texi: New file.
* doc/gnulib.texi (Function Substitutes): Include them.
Bruno Haible [Mon, 10 Jun 2019 12:08:28 +0000 (14:08 +0200)]
doc: Mention nextdown, nextup.
* doc/posix-functions/nextdown.texi: New file.
* doc/posix-functions/nextdownf.texi: New file.
* doc/posix-functions/nextdownl.texi: New file.
* doc/posix-functions/nextup.texi: New file.
* doc/posix-functions/nextupf.texi: New file.
* doc/posix-functions/nextupl.texi: New file.
* doc/gnulib.texi (Function Substitutes): Include them.
* doc/glibc-functions/pthread_getattr_default_np.texi: New file.
* doc/glibc-functions/pthread_setattr_default_np.texi: New file.
* doc/gnulib.texi (Glibc pthread.h): Include them.
* doc/glibc-functions/timerfd_create.texi: New file.
* doc/glibc-functions/timerfd_gettime.texi: New file.
* doc/glibc-functions/timerfd_settime.texi: New file.
* doc/gnulib.texi (Glibc sys/timerfd.h): New section.
* doc/glibc-functions/eventfd.texi: New file.
* doc/glibc-functions/eventfd_read.texi: New file.
* doc/glibc-functions/eventfd_write.texi: New file.
* doc/gnulib.texi (Glibc sys/eventfd.h): New section.
Bruno Haible [Mon, 10 Jun 2019 12:08:13 +0000 (14:08 +0200)]
doc: Mention inotify_* functions.
* doc/glibc-functions/inotify_add_watch.texi: New file.
* doc/glibc-functions/inotify_init.texi: New file.
* doc/glibc-functions/inotify_init1.texi: New file.
* doc/glibc-functions/inotify_rm_watch.texi: New file.
* doc/gnulib.texi (Glibc sys/inotify.h): New section.
Bruno Haible [Mon, 10 Jun 2019 12:08:10 +0000 (14:08 +0200)]
doc: Add references to glibc documentation.
* doc/glibc-functions/add-links.sh: Renamed from
doc/glibc-functions/add-manpage-link.sh. Emit also a link to the Glibc manual.
* doc/glibc-functions/*.texi: Add references to the glibc manual.
Bruno Haible [Mon, 10 Jun 2019 12:08:09 +0000 (14:08 +0200)]
doc: Add references to Linux man pages.
* doc/glibc-functions/add-manpage-link.sh: New file.
* doc/glibc-functions/*.texi: Add reference to man page on kernel.org when it
exists.
* doc/posix-functions/aligned_alloc.texi: Likewise.
Paul Eggert [Thu, 6 Jun 2019 22:44:33 +0000 (15:44 -0700)]
copy-file-range: simplify into a stub
Based on a comment by Florian Weimer in:
https://lists.gnu.org/r/bug-gnulib/2019-06/msg00007.html
It turns out that Emacs (which will use this module) won’t need an
emulation and I suspect other programs won’t either, because these
programs will need to fall back on read+write anyway. Perhaps I
am wrong and other programs will be able to use an emulation; if
so, this patch can be reverted.
* lib/copy-file-range.c (COPY_FILE_RANGE): Replace with a stub.
Just call it copy_file_range.
* m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE):
Check via AC_LINK_IFELSE.
* modules/copy-file-range (Depends-on): Remove modules no longer used.
Paul Eggert [Wed, 5 Jun 2019 02:58:23 +0000 (19:58 -0700)]
copy-file: prefer copy_file_range
* lib/copy-file.c: Do not include xalloc.h.
(qcopy_file_preserving): Allocate a buffer only if
copy_file_range does not suffice. If the allocation fails
don't give up; just use a small stack-based buffer.
Prefer copy_file_range if it works.
* modules/copy-file (Depends-on): Add copy-file-range.
Remove xalloc.
Bruno Haible [Wed, 29 May 2019 00:44:52 +0000 (02:44 +0200)]
binary-io: Attempted use of O_BINARY on consoles no longer fails.
Reported by KO Myung-Hun <komh78@gmail.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2019-05/msg00124.html>.
* lib/binary-io.h (__gl_setmode_check): Remove function.
(set_binary_mode): Declare as notinline on DJGPP and EMX.
* lib/binary-io.c (__gl_setmode_check): Remove function.
(set_binary_mode): Define here on DJGPP and EMX. Inline
__gl_setmode_check. In case of a tty, don't return an error code.
Bruno Haible [Mon, 20 May 2019 19:25:01 +0000 (21:25 +0200)]
setlocale: Improve fallback on macOS.
* lib/setlocale.c (search): Optimize away a redundant strcmp()
invocation.
(locales_with_principal_territory): New array.
(langcmp, get_main_locale_with_same_language): New functions.
(locales_with_principal_language): New array.
(terrcmp, get_main_locale_with_same_territory): New functions.
(rpl_setlocale): When setlocale_single failed, try again with a locale
that is more likely to exist. Don't warn if the environment variable
SETLOCALE_VERBOSE is not set.
Bruno Haible [Mon, 20 May 2019 00:56:53 +0000 (02:56 +0200)]
localename: Fix default on macOS.
* m4/intlmacosx.m4 (gt_INTL_MACOSX): Don't test for CFLocaleCopyCurrent.
* lib/localename.c: Remove includes for HAVE_CFLOCALECOPYCURRENT.
(gl_locale_name_environ, gl_locale_name_default): Remove code for
HAVE_CFLOCALECOPYCURRENT.
* lib/localename.h (gl_locale_name_default): Update.
Bruno Haible [Sat, 18 May 2019 12:36:33 +0000 (14:36 +0200)]
pthread_sigmask: Fix compilation error with --enable-threads=windows.
Reported by Tim Rühsen in
<https://lists.gnu.org/archive/html/bug-gnulib/2018-01/msg00018.html>
and Michele Locati in
<https://lists.gnu.org/archive/html/bug-gettext/2019-04/msg00057.html>.
* m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Revert change from
2015-06-01. Test whether pthread_sigmask is a macro, regardless of
$LIBMULTITHREAD. Consider it regardless whether module 'threadlib' is
in use and regardless which threads API is chosen.
Paul Eggert [Tue, 14 May 2019 15:20:29 +0000 (08:20 -0700)]
close-stream, closein, closeout: simplify
I noticed this opportunity for simplification while drafting a
new, related module that I haven’t had time to finish yet.
* m4/close-stream.m4, m4/closein.m4, m4/closeout.m4: Remove.
* modules/close-stream (Files): Remove m4/close-stream.m4.
(configure.ac): Omit gl_CLOSE_STREAM.
* modules/closein (Files): Remove m4/closein.m4
(configure.ac): Omit gl_CLOSEIN.
* modules/closeout (Files): Remove m4/closeout.m4.
(configure.ac): Omit gl_CLOSEOUT.