From: Jeff Peeler Date: Wed, 24 Feb 2010 22:58:54 +0000 (+0000) Subject: Make deletion of temporary greetings work properly with IMAP_STORAGE X-Git-Tag: 1.4.30-rc3~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e896cc88cf29c4d9726d4ca3a71fe525a34aef13;p=thirdparty%2Fasterisk.git Make deletion of temporary greetings work properly with IMAP_STORAGE This same patch was merged in 220833, but was skipped in this branch erroneously. (closes issue #16170) Reported by: francesco_r git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@248668 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index ce8509cabc..1f176a2861 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -133,7 +133,7 @@ static int init_mailstream (struct vm_state *vms, int box); static void write_file (char *filename, char *buffer, unsigned long len); /*static void status (MAILSTREAM *stream); */ /* No need for this. */ static char *get_header_by_tag(char *header, char *tag); -static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu); +static void vm_imap_delete(char *file, int msgnum, struct ast_vm_user *vmu); static char *get_user_by_mailbox(char *mailbox); static struct vm_state *get_vm_state_by_imapuser(char *user, int interactive); static struct vm_state *get_vm_state_by_mailbox(const char *mailbox, const char *context, int interactive); @@ -477,7 +477,7 @@ static char odbc_table[80]; #define EXISTS(a,b,c,d) (ast_fileexists(c,NULL,d) > 0) #define RENAME(a,b,c,d,e,f,g,h) (rename_file(g,h)); #define COPY(a,b,c,d,e,f,g,h) (copy_file(g,h)); -#define DELETE(a,b,c,d) (vm_imap_delete(b,d)) +#define DELETE(a,b,c,d) (vm_imap_delete(a,b,d)) #else #define RETRIEVE(a,b,c) #define DISPOSE(a,b) @@ -1062,14 +1062,15 @@ static void free_user(struct ast_vm_user *vmu) /* All IMAP-specific functions should go in this block. This * keeps them from being spread out all over the code */ #ifdef IMAP_STORAGE -static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu) +static void vm_imap_delete(char *file, int msgnum, struct ast_vm_user *vmu) { char arg[10]; struct vm_state *vms; unsigned long messageNum; - /* Greetings aren't stored in IMAP, so we can't delete them there */ + /* Greetings aren't stored in IMAP, so we delete them from disk */ if (msgnum < 0) { + ast_filedelete(file, NULL); return; } @@ -1091,6 +1092,7 @@ static void vm_imap_delete(int msgnum, struct ast_vm_user *vmu) snprintf (arg, sizeof(arg), "%lu",messageNum); ast_mutex_lock(&vms->lock); mail_setflag (vms->mailstream,arg,"\\DELETED"); + mail_expunge(vms->mailstream); ast_mutex_unlock(&vms->lock); }