This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgMax has uploaded this change for review. ( https://gerrit.osmocom.org/11911 Change subject: IPA: move duplicated error handling into inline function ...................................................................... IPA: move duplicated error handling into inline function The code is re-ordered to put error handling upfront similar to te way we do it in oter places. Change-Id: Ic0147bffaf04b0baf97e5cca22948bd0e116668f --- M src/gsm/ipa.c 1 file changed, 32 insertions(+), 23 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/11/11911/1 diff --git a/src/gsm/ipa.c b/src/gsm/ipa.c index d423c26..6ee003d 100644 --- a/src/gsm/ipa.c +++ b/src/gsm/ipa.c @@ -541,6 +541,33 @@ return rc; } +/*! Attempt to recv() message and analyse return value + * \param[out] ret result of recv() will be stored in here. + * \param[in] fd The fd for the socket to read from. + * \param[in] msg Message buffer to read into. + * \param[in] needed Home many bytes we have to read. + * \returns boolean indicating whether message should be discarded. + */ +static inline bool recv_discard_msg(int *ret, int fd, struct msgb *msg, int needed) +{ + *ret = recv(fd, msg->tail, needed, 0); + + if (*ret == 0) /* the socket is properly closed or we've requested to receive 0 bytes */ + return true; + + if (*ret > 0) /* some data was obtained */ + return false; + + if (errno == EAGAIN || errno == EINTR) { + *ret = 0; + return false; + } + + /* errors indicated by -1 return value, let's save the actual error code */ + *ret = -errno; + return true; +} + /*! Read one ipa message from socket fd or store part if still not fully received. * \param[in] fd The fd for the socket to read from. * \param[out] rmsg internally allocated msgb containing a fully received ipa message. @@ -566,6 +593,7 @@ struct ipaccess_head *hh; int len, ret; int needed; + bool discard; if (msg == NULL) { msg = ipa_msg_alloc(0); @@ -579,19 +607,10 @@ if (msg->l2h == NULL) { /* first read our 3-byte header */ needed = sizeof(*hh) - msg->len; - ret = recv(fd, msg->tail, needed, 0); - if (ret == 0) + discard = recv_discard_msg(&ret, fd, msg, needed); + if (discard) goto discard_msg; - if (ret < 0) { - if (errno == EAGAIN || errno == EINTR) - ret = 0; - else { - ret = -errno; - goto discard_msg; - } - } - msgb_put(msg, ret); if (ret < needed) { @@ -629,20 +648,10 @@ needed = len - msgb_l2len(msg); if (needed > 0) { - ret = recv(fd, msg->tail, needed, 0); - - if (ret == 0) + discard = recv_discard_msg(&ret, fd, msg, needed); + if (discard) goto discard_msg; - if (ret < 0) { - if (errno == EAGAIN || errno == EINTR) - ret = 0; - else { - ret = -errno; - goto discard_msg; - } - } - msgb_put(msg, ret); if (ret < needed) { -- To view, visit https://gerrit.osmocom.org/11911 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: Ic0147bffaf04b0baf97e5cca22948bd0e116668f Gerrit-Change-Number: 11911 Gerrit-PatchSet: 1 Gerrit-Owner: Max <msuraev at sysmocom.de> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181123/513237f5/attachment.htm>