Merge "BuildSystem: For consistency, avoid double-checking via if clauses."
[asterisk/asterisk.git] / apps / app_voicemail.c
index 87f482d..82fa3b3 100644 (file)
@@ -6089,22 +6089,33 @@ static int has_voicemail(const char *mailbox, const char *folder)
        return 0;
 }
 
-
+/*!
+ * \brief Check the given mailbox's message count.
+ * \param mailbox The @ delimited string for user@context. If no context is found, uses 'default' for the context.
+ * \param urgentmsgs  urgent message count.
+ * \param newmsgs new message count.
+ * \param oldmsgs old message count pointer
+ * \return -1 if error occurred, 0 otherwise.
+ */
 static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int *oldmsgs)
 {
        char tmp[256];
        char *context;
 
        /* If no mailbox, return immediately */
-       if (ast_strlen_zero(mailbox))
+       if (ast_strlen_zero(mailbox)) {
                return 0;
+       }
 
-       if (newmsgs)
+       if (newmsgs) {
                *newmsgs = 0;
-       if (oldmsgs)
+       }
+       if (oldmsgs) {
                *oldmsgs = 0;
-       if (urgentmsgs)
+       }
+       if (urgentmsgs) {
                *urgentmsgs = 0;
+       }
 
        if (strchr(mailbox, ',')) {
                int tmpnew, tmpold, tmpurgent;
@@ -6114,15 +6125,18 @@ static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int *
                mb = tmp;
                while ((cur = strsep(&mb, ", "))) {
                        if (!ast_strlen_zero(cur)) {
-                               if (inboxcount2(cur, urgentmsgs ? &tmpurgent : NULL, newmsgs ? &tmpnew : NULL, oldmsgs ? &tmpold : NULL))
+                               if (inboxcount2(cur, urgentmsgs ? &tmpurgent : NULL, newmsgs ? &tmpnew : NULL, oldmsgs ? &tmpold : NULL)) {
                                        return -1;
-                               else {
-                                       if (newmsgs)
+                               } else {
+                                       if (newmsgs) {
                                                *newmsgs += tmpnew;
-                                       if (oldmsgs)
+                                       }
+                                       if (oldmsgs) {
                                                *oldmsgs += tmpold;
-                                       if (urgentmsgs)
+                                       }
+                                       if (urgentmsgs) {
                                                *urgentmsgs += tmpurgent;
+                                       }
                                }
                        }
                }
@@ -6131,17 +6145,21 @@ static int inboxcount2(const char *mailbox, int *urgentmsgs, int *newmsgs, int *
 
        ast_copy_string(tmp, mailbox, sizeof(tmp));
 
-       if ((context = strchr(tmp, '@')))
+       if ((context = strchr(tmp, '@'))) {
                *context++ = '\0';
-       else
+       } else {
                context = "default";
+       }
 
-       if (newmsgs)
+       if (newmsgs) {
                *newmsgs = __has_voicemail(context, tmp, "INBOX", 0);
-       if (oldmsgs)
+       }
+       if (oldmsgs) {
                *oldmsgs = __has_voicemail(context, tmp, "Old", 0);
-       if (urgentmsgs)
+       }
+       if (urgentmsgs) {
                *urgentmsgs = __has_voicemail(context, tmp, "Urgent", 0);
+       }
 
        return 0;
 }
@@ -13241,7 +13259,10 @@ static void stop_poll_thread(void)
        poll_thread = AST_PTHREADT_NULL;
 }
 
-/*! \brief Append vmu info string into given astman with event_name. */
+/*!
+ * \brief Append vmu info string into given astman with event_name.
+ * \return 0 failed. 1 otherwise.
+*/
 static int append_vmu_info_astman(
                struct mansession *s,
                struct ast_vm_user *vmu,
@@ -13251,14 +13272,33 @@ static int append_vmu_info_astman(
 {
        int new;
        int old;
+       char *mailbox;
+       int ret;
 
        if((s == NULL) || (vmu == NULL) || (event_name == NULL) || (actionid == NULL)) {
                ast_log(LOG_ERROR, "Wrong input parameter.");
                return 0;
        }
 
+       /* create mailbox string */
+       if (!ast_strlen_zero(vmu->context)) {
+               ret = ast_asprintf(&mailbox, "%s@%s", vmu->mailbox, vmu->context);
+       } else {
+               ret = ast_asprintf(&mailbox, "%s", vmu->mailbox);
+       }
+       if (ret == -1) {
+               ast_log(LOG_ERROR, "Could not create mailbox string. err[%s]\n", strerror(errno));
+               return 0;
+       }
+
        /* get mailbox count */
-       inboxcount(vmu->mailbox, &new, &old);
+       ret = inboxcount(mailbox, &new, &old);
+       ast_free(mailbox);
+       if (ret == -1) {
+               ast_log(LOG_ERROR, "Could not get mailbox count. user[%s], context[%s]\n",
+                       vmu->mailbox ?: "", vmu->context ?: "");
+               return 0;
+       }
 
        astman_append(s,
                "Event: %s\r\n"