diff options
author | citats <citats@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-02-27 06:15:49 +0000 |
---|---|---|
committer | citats <citats@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-02-27 06:15:49 +0000 |
commit | f080d88eb8a7eaf5fac8898547dc309c7d75ab29 (patch) | |
tree | 1270b50ac008379ff718c225171242b923cc0eb7 /channel.c | |
parent | f22f6a73db4599f715f5a15c75a7e1530cfdea43 (diff) |
Move ast_get_group from res_parking.c to channel.c
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2263 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channel.c')
-rwxr-xr-x | channel.c | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -2496,3 +2496,36 @@ int ast_tonepair(struct ast_channel *chan, int freq1, int freq2, int duration, i return 0; } +unsigned int ast_get_group(char *s) +{ + char *copy; + char *piece; + char *c=NULL; + int start=0, finish=0,x; + unsigned int group = 0; + copy = ast_strdupa(s); + if (!copy) { + ast_log(LOG_ERROR, "Out of memory\n"); + return 0; + } + c = copy; + + while((piece = strsep(&c, ","))) { + if (sscanf(piece, "%d-%d", &start, &finish) == 2) { + /* Range */ + } else if (sscanf(piece, "%d", &start)) { + /* Just one */ + finish = start; + } else { + ast_log(LOG_ERROR, "Syntax error parsing '%s' at '%s'. Using '0'\n", s,piece); + return 0; + } + for (x=start;x<=finish;x++) { + if ((x > 31) || (x < 0)) { + ast_log(LOG_WARNING, "Ignoring invalid group %d\n", x); + } else + group |= (1 << x); + } + } + return group; +} |