mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-12-31 14:22:14 +01:00
73 lines
3.0 KiB
Diff
73 lines
3.0 KiB
Diff
From 3d7089121731a1122e1306e631adaf5004ac323c Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
|
Date: Fri, 11 Nov 2016 08:29:40 +0200
|
|
Subject: [PATCH] addons/chan_mobile: do not use strerror_r
|
|
|
|
The two reasons why it might be used are that some systems do not
|
|
implement strerror in thread safe manner, and that strerror_r returns
|
|
the error code in the string in case there's no error message.
|
|
|
|
However, all of asterisk elsewhere uses strerror() and assumes it
|
|
to be thread safe. And in chan_mobile the errno is also explicitly
|
|
printed so neither of the above reasons are valid.
|
|
|
|
The reasoning to remove usage is that there are actually two versions
|
|
of strerror_r: XSI and GNU. They are incompatible in their return
|
|
value, and there's no easy way to figure out which one is being
|
|
used. glibc gives you the GNU version if _GNU_SOURCE is defined,
|
|
but the same feature test macro is needed for other symbols. On
|
|
all other systems you assumedly get XSI symbol, and compilation warnings
|
|
as well as non-working error printing.
|
|
|
|
Thus the easiest solution is to just remove strerror_r and use
|
|
strerror as rest of the code. Alternative is to introduce ast_strerror
|
|
in separate translation unit so it can request the XSI symbol in
|
|
glibc case, and replace all usage of strerror.
|
|
|
|
Change-Id: I84d35225b5642d85d48bc35fdf399afbae28a91d
|
|
---
|
|
addons/chan_mobile.c | 13 +++----------
|
|
1 file changed, 3 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/addons/chan_mobile.c b/addons/chan_mobile.c
|
|
index 64d53b7..8d13c96 100644
|
|
--- a/addons/chan_mobile.c
|
|
+++ b/addons/chan_mobile.c
|
|
@@ -3855,10 +3855,7 @@ static void *do_monitor_phone(void *data)
|
|
}
|
|
|
|
if ((at_msg = at_read_full(hfp->rsock, buf, sizeof(buf))) < 0) {
|
|
- /* XXX gnu specific strerror_r is assummed here, this
|
|
- * is not really safe. See the strerror(3) man page
|
|
- * for more info. */
|
|
- ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
|
|
+ ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
|
break;
|
|
}
|
|
|
|
@@ -3995,7 +3992,7 @@ static void *do_monitor_phone(void *data)
|
|
ast_debug(1, "[%s] error parsing message\n", pvt->id);
|
|
goto e_cleanup;
|
|
case AT_READ_ERROR:
|
|
- ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
|
|
+ ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
|
goto e_cleanup;
|
|
default:
|
|
break;
|
|
@@ -4073,11 +4070,7 @@ static void *do_monitor_headset(void *data)
|
|
continue;
|
|
|
|
if ((at_msg = at_read_full(pvt->rfcomm_socket, buf, sizeof(buf))) < 0) {
|
|
- if (strerror_r(errno, buf, sizeof(buf)))
|
|
- ast_debug(1, "[%s] error reading from device\n", pvt->id);
|
|
- else
|
|
- ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, buf, errno);
|
|
-
|
|
+ ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
|
goto e_cleanup;
|
|
}
|
|
ast_debug(1, "[%s] %s\n", pvt->id, buf);
|
|
--
|
|
2.10.2
|
|
|