aboutsummaryrefslogtreecommitdiffstats
path: root/unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch
diff options
context:
space:
mode:
Diffstat (limited to 'unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch')
-rw-r--r--unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch182
1 files changed, 182 insertions, 0 deletions
diff --git a/unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch b/unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch
new file mode 100644
index 0000000000..c469902448
--- /dev/null
+++ b/unmaintained/speech-dispatcher/0001-Provide-fallback-for-systems-without-TEMP_FAILURE_RE.patch
@@ -0,0 +1,182 @@
+From 98504410b7f77cad7457bfdfcd593e2898c3b461 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Mon, 23 Mar 2015 21:03:12 +0100
+Subject: [PATCH] Provide fallback for systems without TEMP_FAILURE_RETRY
+
+Reviewed-by: Luke Yelavich <themuso@themuso.com>
+---
+ include/safe_io.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++
+ src/modules/cicero.c | 6 ++---
+ src/server/output.c | 18 +--------------
+ src/server/sem_functions.c | 5 +++--
+ src/server/speaking.c | 5 ++---
+ 5 files changed, 63 insertions(+), 26 deletions(-)
+ create mode 100644 include/safe_io.h
+
+diff --git a/include/safe_io.h b/include/safe_io.h
+new file mode 100644
+index 0000000..37cfe7f
+--- /dev/null
++++ b/include/safe_io.h
+@@ -0,0 +1,55 @@
++/*
++ * safe_io.h - Wrapper around read and write
++ *
++ * Copyright (C) 2001, 2002, 2003, 2007 Brailcom, o.p.s.
++ *
++ * This is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This software 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
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this package; see the file COPYING. If not, write to
++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301, USA.
++ *
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <unistd.h>
++#include <errno.h>
++
++#ifdef TEMP_FAILURE_RETRY /* GNU libc */
++#define safe_read(fd, buf, count) TEMP_FAILURE_RETRY(read(fd, buf, count))
++#define safe_write(fd, buf, count) TEMP_FAILURE_RETRY(write(fd, buf, count))
++#else /* TEMP_FAILURE_RETRY */
++#ifdef HAVE_UNISTD_H
++#include <unistd.h>
++#endif
++static inline ssize_t
++safe_read(int fd, void *buf, size_t count) {
++ do {
++ ssize_t w = read(fd, buf, count);
++
++ if (w == -1 && errno == EINTR) continue;
++ return w;
++ } while (1);
++}
++static inline ssize_t
++safe_write(int fd, const void *buf, size_t count) {
++ do {
++ ssize_t w = write(fd, buf, count);
++
++ if (w == -1 && errno == EINTR) continue;
++ return w;
++ } while (1);
++}
++#endif /* TEMP_FAILURE_RETRY */
+diff --git a/src/modules/cicero.c b/src/modules/cicero.c
+index 237796e..62332a5 100644
+--- a/src/modules/cicero.c
++++ b/src/modules/cicero.c
+@@ -26,6 +26,7 @@
+ #endif
+
+ #include <speechd_types.h>
++#include <safe_io.h>
+ #include <errno.h>
+ #include <sys/poll.h>
+ #include <fcntl.h>
+@@ -376,10 +377,7 @@ void *_cicero_speak(void *nothing)
+ cicero_speaking = 0;
+ break;
+ }
+- if (ret > 0)
+- TEMP_FAILURE_RETRY(read
+- (fd1[0], b,
+- 2));
++ if (ret > 0) safe_read(fd1[0], b, 2);
+ if (cicero_stop) {
+ cicero_speaking = 0;
+ module_report_event_stop();
+diff --git a/src/server/output.c b/src/server/output.c
+index 40b7e8c..ef98a45 100644
+--- a/src/server/output.c
++++ b/src/server/output.c
+@@ -26,27 +26,11 @@
+ #endif
+
+ #include <fdsetconv.h>
++#include <safe_io.h>
+ #include <spd_utils.h>
+ #include "output.h"
+ #include "parse.h"
+
+-#ifdef TEMP_FAILURE_RETRY /* GNU libc */
+-#define safe_write(fd, buf, count) TEMP_FAILURE_RETRY(write(fd, buf, count))
+-#else /* TEMP_FAILURE_RETRY */
+-#ifdef HAVE_UNISTD_H
+-#include <unistd.h>
+-#endif
+-static inline ssize_t
+-safe_write(int fd, const void *buf, size_t count) {
+- do {
+- ssize_t w = write(fd, buf, count);
+-
+- if (w == -1 && errno == EINTR) continue;
+- return w;
+- } while (1);
+-}
+-#endif /* TEMP_FAILURE_RETRY */
+-
+ #if !(defined(__GLIBC__) && defined(_GNU_SOURCE))
+ /* Added by Willie Walker - strndup is a gcc-ism
+ */
+diff --git a/src/server/sem_functions.c b/src/server/sem_functions.c
+index 0a86f56..430e74c 100644
+--- a/src/server/sem_functions.c
++++ b/src/server/sem_functions.c
+@@ -26,6 +26,8 @@
+ #include <config.h>
+ #endif
+
++#include <safe_io.h>
++
+ #include "speechd.h"
+ #include "sem_functions.h"
+
+@@ -33,8 +35,7 @@ void speaking_semaphore_post(void)
+ {
+ char buf[1];
+ buf[0] = 42;
+- const ssize_t wr_bytes =
+- TEMP_FAILURE_RETRY(write(speaking_pipe[1], buf, 1));
++ const ssize_t wr_bytes = safe_write(speaking_pipe[1], buf, 1);
+ if (wr_bytes != 1)
+ FATAL("write to polled fd: could not write 1 byte");
+ }
+diff --git a/src/server/speaking.c b/src/server/speaking.c
+index bd27008..f2dc289 100644
+--- a/src/server/speaking.c
++++ b/src/server/speaking.c
+@@ -29,6 +29,7 @@
+ #include <glib.h>
+ #include <poll.h>
+ #include <unistd.h>
++#include <safe_io.h>
+ #include "speechd.h"
+ #include "server.h"
+ #include "index_marking.h"
+@@ -88,9 +89,7 @@ void *speak(void *data)
+ MSG(5,
+ "wait_for_poll: activity in Speech Dispatcher");
+ const ssize_t rd_bytes =
+- TEMP_FAILURE_RETRY(read
+- (poll_fds[0].fd, buf,
+- 1));
++ safe_read(poll_fds[0].fd, buf, 1);
+ if (rd_bytes != 1)
+ FATAL
+ ("read from polled fd: could not read 1 byte");
+--
+2.4.0
+