Merged revisions 102576 via svnmerge from
[asterisk/asterisk.git] / apps / app_voicemail.c
index be3e5db..8d16906 100644 (file)
@@ -1626,6 +1626,41 @@ static void rename_file(char *sfn, char *dfn)
 }
 #endif
 
+#ifndef IMAP_STORAGE
+/*! \brief
+ * A negative return value indicates an error.
+ * \note Should always be called with a lock already set on dir.
+ */
+static int last_message_index(struct ast_vm_user *vmu, char *dir)
+{
+       int x;
+       unsigned char map[MAXMSGLIMIT] = "";
+       DIR *msgdir;
+       struct dirent *msgdirent;
+       int msgdirint;
+
+       /* Reading the entire directory into a file map scales better than
+        * doing a stat repeatedly on a predicted sequence.  I suspect this
+        * is partially due to stat(2) internally doing a readdir(2) itself to
+        * find each file. */
+       msgdir = opendir(dir);
+       while ((msgdirent = readdir(msgdir))) {
+               if (sscanf(msgdirent->d_name, "msg%d", &msgdirint) == 1 && msgdirint < MAXMSGLIMIT)
+                       map[msgdirint] = 1;
+       }
+       closedir(msgdir);
+
+       for (x = 0; x < vmu->maxmsg; x++) {
+               if (map[x] == 0)
+                       break;
+       }
+
+       return x - 1;
+}
+
+#endif /*#ifndef IMAP_STORAGE*/
+#endif /*#else of #ifdef ODBC_STORAGE*/
+
 static int copy(char *infile, char *outfile)
 {
        int ifd;
@@ -1718,41 +1753,6 @@ static void copy_plain_file(char *frompath, char *topath)
        ast_variables_destroy(var);
 }
 
-#ifndef IMAP_STORAGE
-/*! \brief
- * A negative return value indicates an error.
- * \note Should always be called with a lock already set on dir.
- */
-static int last_message_index(struct ast_vm_user *vmu, char *dir)
-{
-       int x;
-       unsigned char map[MAXMSGLIMIT] = "";
-       DIR *msgdir;
-       struct dirent *msgdirent;
-       int msgdirint;
-
-       /* Reading the entire directory into a file map scales better than
-        * doing a stat repeatedly on a predicted sequence.  I suspect this
-        * is partially due to stat(2) internally doing a readdir(2) itself to
-        * find each file. */
-       msgdir = opendir(dir);
-       while ((msgdirent = readdir(msgdir))) {
-               if (sscanf(msgdirent->d_name, "msg%d", &msgdirint) == 1 && msgdirint < MAXMSGLIMIT)
-                       map[msgdirint] = 1;
-       }
-       closedir(msgdir);
-
-       for (x = 0; x < vmu->maxmsg; x++) {
-               if (map[x] == 0)
-                       break;
-       }
-
-       return x - 1;
-}
-
-#endif /*#ifndef IMAP_STORAGE*/
-#endif /*#else of #ifdef ODBC_STORAGE*/
-#ifndef ODBC_STORAGE
 static int vm_delete(char *file)
 {
        char *txt;
@@ -1770,7 +1770,6 @@ static int vm_delete(char *file)
        unlink(txt);
        return ast_filedelete(file, NULL);
 }
-#endif
 
 static int inbuf(struct baseio *bio, FILE *fi)
 {
@@ -4521,7 +4520,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
                }
 
                /* Remove surrogate file */
-               DELETE(tmpdir, curmsg, msgfile);
+               vm_delete(msgfile);
        }
 
        /* If anything failed above, we still have this list to free */