From: Tilghman Lesher Date: Mon, 1 Feb 2010 23:30:19 +0000 (+0000) Subject: Merged revisions 244243 via svnmerge from X-Git-Tag: 1.6.0.23~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7a578371686ab6fc881b44b2d748f2b6806b22c;p=thirdparty%2Fasterisk.git Merged revisions 244243 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r244243 | tilghman | 2010-02-01 17:16:12 -0600 (Mon, 01 Feb 2010) | 18 lines Merged revisions 244242 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r244242 | tilghman | 2010-02-01 17:13:44 -0600 (Mon, 01 Feb 2010) | 11 lines Backup and restore original textfile, for prosthesis (gerund of prepend). Also, fix menuselect such that changing voicemail build options correctly causes rebuild. (closes issue #16415) Reported by: tomo1657 Patches: prepention.patch uploaded by tomo1657 (license 484) (with modifications by me to backport to 1.4) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@244303 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index ad1b4a10b0..881f33f35e 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -5508,15 +5508,17 @@ leave_vm_out: struct ast_flags config_flags = { CONFIG_FLAG_NOCACHE }; struct ast_config *msg_cfg; const char *duration_str; - char msgfile[PATH_MAX], backup[PATH_MAX]; + char msgfile[PATH_MAX], backup[PATH_MAX], backup_textfile[PATH_MAX]; char textfile[PATH_MAX]; /* Must always populate duration correctly */ make_file(msgfile, sizeof(msgfile), curdir, curmsg); strcpy(textfile, msgfile); strcpy(backup, msgfile); + strcpy(backup_textfile, msgfile); strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1); strncat(backup, "-bak", sizeof(backup) - strlen(backup) - 1); + strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1); if ((msg_cfg = ast_config_load(textfile, config_flags)) && (duration_str = ast_variable_retrieve(msg_cfg, "message", "duration"))) { *duration = atoi(duration_str); @@ -5539,10 +5541,13 @@ leave_vm_out: } /* Back up the original file, so we can retry the prepend */ - if (already_recorded) + if (already_recorded) { ast_filecopy(backup, msgfile, NULL); - else + copy(backup_textfile, textfile); + } else { ast_filecopy(msgfile, backup, NULL); + copy(textfile,backup_textfile); + } already_recorded = 1; if (record_gain) @@ -5590,10 +5595,12 @@ leave_vm_out: if (msg_cfg) ast_config_destroy(msg_cfg); - if (already_recorded) - ast_filedelete(backup, NULL); if (prepend_duration) *duration = prepend_duration; + if (already_recorded) { + ast_filerename(backup, msgfile, NULL); + rename(backup_textfile, textfile); + } if (cmd == 't' || cmd == 'S') cmd = 0; @@ -5691,6 +5698,8 @@ leave_vm_out: #ifdef IMAP_STORAGE int todircount = 0; struct vm_state *dstvms; +#else + char textfile[PATH_MAX], backup[PATH_MAX], backup_textfile[PATH_MAX]; #endif char username[70] = ""; char fn[PATH_MAX]; /* for playback of name greeting */ @@ -5911,7 +5920,21 @@ leave_vm_out: if (!res) res = ast_play_and_wait(chan, "vm-saved"); */ res = ast_play_and_wait(chan, "vm-msgsaved"); - } + } +#ifndef IMAP_STORAGE + /* Restore original message without prepended message if backup exists */ + make_file(msgfile, sizeof(msgfile), dir, curmsg); + strcpy(textfile, msgfile); + strcpy(backup, msgfile); + strcpy(backup_textfile, msgfile); + strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1); + strncat(backup, "-bak", sizeof(backup) - strlen(backup) - 1); + strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1); + if (ast_fileexists(backup, NULL, NULL) > 0) { + ast_filerename(backup, msgfile, NULL); + rename(backup_textfile, textfile); + } +#endif } /* Remove surrogate file */ DISPOSE(dir, curmsg);