Move ast_get_group from res_parking.c to channel.c
[asterisk/asterisk.git] / channel.c
index b05ea75..e4a572a 100755 (executable)
--- a/channel.c
+++ b/channel.c
@@ -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;
+}