diff options
| author | Paul Eggert | 2016-01-03 15:00:49 -0800 |
|---|---|---|
| committer | Paul Eggert | 2016-01-03 15:04:07 -0800 |
| commit | e79b06e6def82fab56a153085bff8223876d5908 (patch) | |
| tree | 3fa986746456718707c735b0abda48c092945479 /lib | |
| parent | 861022ff5f7b8d6ab53c726e009208eadf4ecd41 (diff) | |
| download | emacs-e79b06e6def82fab56a153085bff8223876d5908.tar.gz emacs-e79b06e6def82fab56a153085bff8223876d5908.zip | |
Avoid stdio in SIGINT handler
* admin/merge-gnulib (GNULIB_MODULES): Add ignore-value.
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
* lib/ignore-value.h: New file, from gnulib.
* src/keyboard.c: Include it.
(write_stdout, read_stdin): New functions.
(handle_interrupt): Use them instead of printf and getchar,
and avoid fflush when handling signals.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gnulib.mk | 9 | ||||
| -rw-r--r-- | lib/ignore-value.h | 50 |
2 files changed, 58 insertions, 1 deletions
diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 97ed5b1f40f..b920cbbc9bb 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk | |||
| @@ -21,7 +21,7 @@ | |||
| 21 | # the same distribution terms as the rest of that program. | 21 | # the same distribution terms as the rest of that program. |
| 22 | # | 22 | # |
| 23 | # Generated by gnulib-tool. | 23 | # Generated by gnulib-tool. |
| 24 | # Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings | 24 | # Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=flexmember --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=unsetenv --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dtotimespec dup2 environ execinfo faccessat fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr mkostemp mktime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time stdalign stddef stdio stpcpy strftime strtoimax strtoumax symlink sys_stat sys_time time time_r time_rz timegm timer-time timespec-add timespec-sub unsetenv update-copyright utimens vla warnings |
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | MOSTLYCLEANFILES += core *.stackdump | 27 | MOSTLYCLEANFILES += core *.stackdump |
| @@ -567,6 +567,13 @@ EXTRA_libgnu_a_SOURCES += group-member.c | |||
| 567 | 567 | ||
| 568 | ## end gnulib module group-member | 568 | ## end gnulib module group-member |
| 569 | 569 | ||
| 570 | ## begin gnulib module ignore-value | ||
| 571 | |||
| 572 | |||
| 573 | EXTRA_DIST += ignore-value.h | ||
| 574 | |||
| 575 | ## end gnulib module ignore-value | ||
| 576 | |||
| 570 | ## begin gnulib module intprops | 577 | ## begin gnulib module intprops |
| 571 | 578 | ||
| 572 | 579 | ||
diff --git a/lib/ignore-value.h b/lib/ignore-value.h new file mode 100644 index 00000000000..6713d96f84e --- /dev/null +++ b/lib/ignore-value.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* ignore a function return without a compiler warning. -*- coding: utf-8 -*- | ||
| 2 | |||
| 3 | Copyright (C) 2008-2016 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | This program is free software: you can redistribute it and/or modify | ||
| 6 | it under the terms of the GNU General Public License as published by | ||
| 7 | the Free Software Foundation; either version 3 of the License, or | ||
| 8 | (at your option) any later version. | ||
| 9 | |||
| 10 | This program 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 | ||
| 13 | GNU General Public License for more details. | ||
| 14 | |||
| 15 | You should have received a copy of the GNU General Public License | ||
| 16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | ||
| 17 | |||
| 18 | /* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ | ||
| 19 | |||
| 20 | /* Use "ignore_value" to avoid a warning when using a function declared with | ||
| 21 | gcc's warn_unused_result attribute, but for which you really do want to | ||
| 22 | ignore the result. Traditionally, people have used a "(void)" cast to | ||
| 23 | indicate that a function's return value is deliberately unused. However, | ||
| 24 | if the function is declared with __attribute__((warn_unused_result)), | ||
| 25 | gcc issues a warning even with the cast. | ||
| 26 | |||
| 27 | Caution: most of the time, you really should heed gcc's warning, and | ||
| 28 | check the return value. However, in those exceptional cases in which | ||
| 29 | you're sure you know what you're doing, use this function. | ||
| 30 | |||
| 31 | For the record, here's one of the ignorable warnings: | ||
| 32 | "copy.c:233: warning: ignoring return value of 'fchown', | ||
| 33 | declared with attribute warn_unused_result". */ | ||
| 34 | |||
| 35 | #ifndef _GL_IGNORE_VALUE_H | ||
| 36 | #define _GL_IGNORE_VALUE_H | ||
| 37 | |||
| 38 | /* Normally casting an expression to void discards its value, but GCC | ||
| 39 | versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) | ||
| 40 | which may cause unwanted diagnostics in that case. Use __typeof__ | ||
| 41 | and __extension__ to work around the problem, if the workaround is | ||
| 42 | known to be needed. */ | ||
| 43 | #if 3 < __GNUC__ + (4 <= __GNUC_MINOR__) | ||
| 44 | # define ignore_value(x) \ | ||
| 45 | (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) | ||
| 46 | #else | ||
| 47 | # define ignore_value(x) ((void) (x)) | ||
| 48 | #endif | ||
| 49 | |||
| 50 | #endif | ||