diff options
author | Timo Teräs <timo.teras@iki.fi> | 2016-11-18 09:35:46 +0200 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2016-11-18 09:37:08 +0200 |
commit | e30b06dd6ea3c6330c2904973fb541fdbb630984 (patch) | |
tree | 20c9e34d6b6142be836cc27aee90c0a32771cf35 /main/asterisk/fix-strerror_r.patch | |
parent | 8cc23c434a914599ff1d806f405de7e76f0ffd07 (diff) | |
download | aports-e30b06dd6ea3c6330c2904973fb541fdbb630984.tar.bz2 aports-e30b06dd6ea3c6330c2904973fb541fdbb630984.tar.xz |
main/asterisk: add upstream submitted portability fixes
Diffstat (limited to 'main/asterisk/fix-strerror_r.patch')
-rw-r--r-- | main/asterisk/fix-strerror_r.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/main/asterisk/fix-strerror_r.patch b/main/asterisk/fix-strerror_r.patch new file mode 100644 index 0000000000..97894309bd --- /dev/null +++ b/main/asterisk/fix-strerror_r.patch @@ -0,0 +1,72 @@ +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 + |