On Tue, Nov 08, 2005 at 05:59:23PM +0300, Ivan Vershigora wrote:
> how to use #include to all files in /etc/asterisk/customdir   ?
> in v1.0.9
> 
> #include /etc/asterisk/customdir/*.conf
> 
> doesnt work

That is indeed a new feature in 1.2. 

To use it in Asterisk 1.0, apply the attached patch (or use the packages
from Xorcom Rapid ;-) )

-- 
Tzafrir Cohen         | [EMAIL PROTECTED] | VIM is
http://tzafrir.org.il |                           | a Mutt's  
[EMAIL PROTECTED] |                           |  best
ICQ# 16849755         |                           | friend
#! /bin/sh /usr/share/dpatch/dpatch-run
## 80_rapid-globinclude.dpatch by  <[EMAIL PROTECTED]>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: No description.

@DPATCH@
diff -urNad asterisk-1.0.5/config.c /tmp/dpep.dFRSis/asterisk-1.0.5/config.c
--- asterisk-1.0.5/config.c     2004-09-03 18:36:13.000000000 +0300
+++ /tmp/dpep.dFRSis/asterisk-1.0.5/config.c    2005-01-27 13:40:39.000000000 
+0200
@@ -17,6 +17,10 @@
 #include <string.h>
 #include <errno.h>
 #include <time.h>
+#define AST_INCLUDE_GLOB 1
+#ifdef AST_INCLUDE_GLOB
+# include <glob.h>
+#endif
 #include <asterisk/config.h>
 #include <asterisk/config_pvt.h>
 #include <asterisk/cli.h>
@@ -778,6 +782,83 @@
        } else {
                snprintf(fn, sizeof(fn), "%s/%s", (char 
*)ast_config_AST_CONFIG_DIR, configfile);
        }
+#ifdef AST_INCLUDE_GLOB
+       {
+               /*
+                * The following block tries to glob-expand the file name from 
'fn'. 
+                * If at least one match is found, loop over found matches and 
set
+                * 'fn' to each of them in turn.
+                *
+                * In order to make the patch as least intrusive as possible it:
+                *
+                * 1. re-uses the variable 'fn'. This can be confusing, I guess.
+                * 2. does not touch the indentation of code between its two 
parts.
+                *    Just keep in mind that the first part opens two scopes 
which 
+                *    are closed by the second part
+                */
+               int glob_ret;
+               glob_t globbuf; /*pretend it is initilized to silent gcc */
+               globbuf.gl_offs = 0;
+               /* Options for glob(3):
+                * GLOB_NOCHECK: 
+                *   If no pattern matches, to return the original pattern.
+                *   See remark on ahndling of GLOB_NOMATCH
+                *
+                * GLOB_BRACE:
+                *   Allows '{a,b}' style brace expansion. This is a GNU 
extension and not 
+                *   part of POSIX
+                *
+                * Some options currently not used but worth considering:
+                * GLOB_ERR:
+                *   Return upon read error (because a directory does not have 
+                *   read permission, for example)
+                *
+                * GLOB_NOMAGIC:
+                *   The pattern is returned if it contains no metacharacters. 
A GNU 
+                *   extension.
+                */
+               glob_ret = glob(fn, GLOB_NOCHECK|GLOB_BRACE, NULL, &globbuf);
+               ast_log(LOG_DEBUG,
+                                       "Glob Expansion Results: Return: %d, 
Number of results: %d,"
+                                       " (config file: %s, full path: %s\n",
+                                       glob_ret, globbuf.gl_pathc, configfile, 
fn);
+
+               
+               if (glob_ret==GLOB_NOMATCH){
+                       /* The globbing found no matching file name.
+                        * 
+                        * Warn, but continue. Chances are that the user will 
get 
+                        * an error message later on fopen.
+                        *
+                        * Would it help to remember this error?
+                        */
+                       ast_log(LOG_WARNING,
+                                       "Glob Expansion of pattern '%s' ('%s') 
failed: no match. "
+                                       "But I'll use the original pattern.\n",
+                                       configfile, fn);
+               }
+               if (glob_ret==GLOB_NOSPACE){
+                       ast_log(LOG_WARNING,
+                                       "Glob Expansion of pattern '%s' ('%s') 
failed: Not enough memory\n",
+                                       configfile, fn);
+               } else if (glob_ret==GLOB_ABORTED){
+                       ast_log(LOG_WARNING,
+                                       "Glob Expansion of pattern '%s' ('%s) 
failed: Read error\n",
+                                       configfile, fn);
+               } else  {
+                       ast_log(LOG_DEBUG,
+                                       "Glob Expansion of pattern '%s' ('%s'): 
Success. "
+                                       "Starting to loop\n",
+                                       configfile, fn);
+       
+                       /* loop over expanded files 
+                        * overrides the original value of fn.
+                        */
+                       int i;
+                       for (i=0; i<globbuf.gl_pathc; i++) {
+                               strncpy(fn,globbuf.gl_pathv[i], sizeof(fn)-1);
+                               ast_log(LOG_DEBUG, "Now trying file '%s'\n", 
fn);
+#endif
        if ((option_verbose > 1) && !option_debug) {
                ast_verbose(  VERBOSE_PREFIX_2 "Parsing '%s': ", fn);
                fflush(stdout);
@@ -819,6 +900,12 @@
                else if (option_verbose > 1)
                        ast_verbose( "Not found (%s)\n", strerror(errno));
        }
+#ifdef AST_INCLUDE_GLOB
+                       }
+                       globfree(&globbuf);
+               }
+       }
+#endif
 #ifdef PRESERVE_COMMENTS
        if (master) {
                /* Keep trailing comments */
_______________________________________________
--Bandwidth and Colocation sponsored by Easynews.com --

Asterisk-Users mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to