mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 11:58:40 +00:00
Merged revisions 180032 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r180032 | dvossel | 2009-03-03 17:21:18 -0600 (Tue, 03 Mar 2009) | 14 lines app_read does not break from prompt loop with user terminated empty string In app.c, ast_app_getdata is called to stream the prompts and receive DTMF input. If ast_app_getdata() receives an empty string caused by the user inputing the end of string character, in this case '#', it should break from the prompt loop and return to app_read, but instead it cycles through all the prompts. I've added a return value for this special case in ast_readstring() which uses an enum I've delcared in apps.h. This enum is now used as a return value for ast_app_getdata(). (closes issue #14279) Reported by: Marquis Patches: fix_app_read.patch uploaded by Marquis (license 32) read-ampersanmd.patch2 uploaded by dvossel (license 671) Tested by: Marquis, dvossel Review: http://reviewboard.digium.com/r/177/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@180080 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -3683,20 +3683,25 @@ int ast_readstring_full(struct ast_channel *c, char *s, int len, int timeout, in
|
||||
d = ast_waitfordigit_full(c, to, audiofd, ctrlfd);
|
||||
}
|
||||
if (d < 0)
|
||||
return -1;
|
||||
return AST_GETDATA_FAILED;
|
||||
if (d == 0) {
|
||||
s[pos]='\0';
|
||||
return 1;
|
||||
s[pos] = '\0';
|
||||
return AST_GETDATA_TIMEOUT;
|
||||
}
|
||||
if (d == 1) {
|
||||
s[pos]='\0';
|
||||
return 2;
|
||||
s[pos] = '\0';
|
||||
return AST_GETDATA_INTERRUPTED;
|
||||
}
|
||||
if (!strchr(enders, d))
|
||||
if (strchr(enders, d) && (pos == 0)) {
|
||||
s[pos] = '\0';
|
||||
return AST_GETDATA_EMPTY_END_TERMINATED;
|
||||
}
|
||||
if (!strchr(enders, d)) {
|
||||
s[pos++] = d;
|
||||
}
|
||||
if (strchr(enders, d) || (pos >= len)) {
|
||||
s[pos]='\0';
|
||||
return 0;
|
||||
s[pos] = '\0';
|
||||
return AST_GETDATA_COMPLETE;
|
||||
}
|
||||
to = timeout;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user