@ -1,4 +1,4 @@
/*
/*
* Asterisk - - An open source telephony toolkit .
*
* Copyright ( C ) 2006 , Digium , Inc .
@ -86,7 +86,7 @@ void ast_verbose(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
# endif
# define AST_API_MODULE 1 /* gimme the inline defs! */
struct ast_channel
struct ast_channel
{
char x ; /* basically empty! */
} ;
@ -245,7 +245,7 @@ static void __attribute__((constructor)) init_empty_mutex(void)
static inline int __ast_pthread_mutex_init_attr ( const char * filename , int lineno , const char * func ,
const char * mutex_name , ast_mutex_t * t ,
pthread_mutexattr_t * attr )
pthread_mutexattr_t * attr )
{
# ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
int canlog = strcmp ( filename , " logger.c " ) ;
@ -464,7 +464,7 @@ static inline int __ast_pthread_mutex_unlock(const char *filename, int lineno, c
}
if ( ( res = pthread_mutex_unlock ( & t - > mutex ) ) ) {
__ast_mutex_logger ( " %s line %d (%s): Error releasing mutex: %s \n " ,
__ast_mutex_logger ( " %s line %d (%s): Error releasing mutex: %s \n " ,
filename , lineno , func , strerror ( res ) ) ;
DO_THREAD_CRASH ;
}
@ -505,7 +505,7 @@ static void __attribute__((constructor)) init_##mutex(void) \
ast_mutex_init ( & mutex ) ; \
}
# else /* !AST_MUTEX_INIT_W_CONSTRUCTORS */
/* By default, use static initialization of mutexes. */
/* By default, use static initialization of mutexes. */
# define __AST_MUTEX_DEFINE(scope, mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VALUE
# endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
@ -618,7 +618,7 @@ AST_INLINE_API(int ast_atomic_fetchadd_int(volatile int *p, int v),
{
__asm __volatile (
" lock xaddl %0, %1 ; "
: " +r " ( v ) , /* 0 (result) */
: " +r " ( v ) , /* 0 (result) */
" =m " ( * p ) /* 1 */
: " m " ( * p ) ) ; /* 2 */
return ( v ) ;
@ -864,7 +864,7 @@ char * attribute_malloc _ast_strdup(const char *str, const char *file, int linen
* message in the case that the allocation fails .
*
* ast_strndup ( ) , unlike strndup ( ) , can safely accept a NULL argument for the
* string to duplicate . If a NULL argument is provided , ast_strdup will return
* string to duplicate . If a NULL argument is provided , ast_strdup will return
* NULL without generating any kind of error log message .
*
* The arguments and return value are the same as strndup ( )
@ -1033,19 +1033,19 @@ static void LLB_ADD(char *str)
int siz = strlen ( str ) ;
if ( rem < siz + 1 ) {
lline_buffer = ast_realloc ( lline_buffer , lline_buffer_size + CB_INCR + siz + 1 ) ;
if ( ! lline_buffer )
if ( ! lline_buffer )
return ;
lline_buffer_size + = CB_INCR + siz + 1 ;
}
strcat ( lline_buffer , str ) ;
}
static void CB_RESET ( void )
{
comment_buffer [ 0 ] = 0 ;
static void CB_RESET ( void )
{
comment_buffer [ 0 ] = 0 ;
lline_buffer [ 0 ] = 0 ;
}
/*! \brief Keep track of how many threads are currently trying to wait*() on
* a child process */
static unsigned int safe_system_level = 0 ;
@ -1108,7 +1108,7 @@ int ast_safe_system(const char *s)
pid = fork ( ) ;
# else
pid = vfork ( ) ;
# endif
# endif
if ( pid = = 0 ) {
# ifdef HAVE_WORKING_FORK
@ -1124,7 +1124,7 @@ int ast_safe_system(const char *s)
if ( res > - 1 ) {
res = WIFEXITED ( status ) ? WEXITSTATUS ( status ) : - 1 ;
break ;
} else if ( errno ! = EINTR )
} else if ( errno ! = EINTR )
break ;
}
} else {
@ -1141,7 +1141,7 @@ int ast_safe_system(const char *s)
}
static struct ast_comment * ALLOC_COMMENT ( const char * buffer )
{
{
struct ast_comment * x = ast_calloc ( 1 , sizeof ( struct ast_comment ) + strlen ( buffer ) + 1 ) ;
strcpy ( x - > cmt , buffer ) ;
return x ;
@ -1164,7 +1164,7 @@ static struct ast_config_engine *config_engine_list;
struct ast_category {
char name [ 80 ] ;
int ignored ; /*!< do not let user of the config see this category */
int include_level ;
int include_level ;
char * file ; /*!< the file name from whence this declaration was read */
int lineno ;
struct ast_comment * precomments ;
@ -1257,7 +1257,7 @@ char *ast_trim_blanks(char *str),
if ( work ) {
work + = strlen ( work ) - 1 ;
/* It's tempting to only want to erase after we exit this loop,
/* It's tempting to only want to erase after we exit this loop,
but since ast_trim_blanks * could * receive a constant string
( which we presumably wouldn ' t have to touch ) , we shouldn ' t
actually set anything unless we must , and it ' s easier just
@ -1286,7 +1286,7 @@ char *ast_strip(char *s),
if ( s )
ast_trim_blanks ( s ) ;
return s ;
}
}
)
@ -1319,15 +1319,15 @@ void localized_ast_include_rename(struct ast_config *conf, const char *from_file
static struct ast_variable * ast_variable_new ( const char * name , const char * value , const char * filename ) ;
static struct ast_variable * ast_variable_new ( const char * name , const char * value , const char * filename )
static struct ast_variable * ast_variable_new ( const char * name , const char * value , const char * filename )
{
struct ast_variable * variable ;
int name_len = strlen ( name ) + 1 ;
int name_len = strlen ( name ) + 1 ;
if ( ( variable = ast_calloc ( 1 , name_len + strlen ( value ) + 1 + strlen ( filename ) + 1 + sizeof ( * variable ) ) ) ) {
variable - > name = variable - > stuff ;
variable - > value = variable - > stuff + name_len ;
variable - > file = variable - > value + strlen ( value ) + 1 ;
variable - > value = variable - > stuff + name_len ;
variable - > file = variable - > value + strlen ( value ) + 1 ;
strcpy ( variable - > name , name ) ;
strcpy ( variable - > value , value ) ;
strcpy ( variable - > file , filename ) ;
@ -1339,11 +1339,11 @@ static struct ast_variable *ast_variable_new(const char *name, const char *value
static struct ast_config_include * ast_include_new ( struct ast_config * conf , const char * from_file , const char * included_file , int is_exec , const char * exec_file , int from_lineno , char * real_included_file_name , int real_included_file_name_size )
{
/* a file should be included ONCE. Otherwise, if one of the instances is changed,
then all be changed . - - how do we know to include it ? - - Handling modified
then all be changed . - - how do we know to include it ? - - Handling modified
instances is possible , I ' d have
to create a new master for each instance . */
struct ast_config_include * inc ;
inc = ast_include_find ( conf , included_file ) ;
if ( inc )
{
@ -1352,7 +1352,7 @@ static struct ast_config_include *ast_include_new(struct ast_config *conf, const
ast_log ( LOG_WARNING , " '%s', line %d: Same File included more than once! This data will be saved in %s if saved back to disk. \n " , from_file , from_lineno , real_included_file_name ) ;
} else
* real_included_file_name = 0 ;
inc = ast_calloc ( 1 , sizeof ( struct ast_config_include ) ) ;
inc - > include_location_file = ast_strdup ( from_file ) ;
inc - > include_location_lineno = from_lineno ;
@ -1360,15 +1360,15 @@ static struct ast_config_include *ast_include_new(struct ast_config *conf, const
inc - > included_file = ast_strdup ( real_included_file_name ) ;
else
inc - > included_file = ast_strdup ( included_file ) ;
inc - > exec = is_exec ;
if ( is_exec )
inc - > exec_file = ast_strdup ( exec_file ) ;
/* attach this new struct to the conf struct */
inc - > next = conf - > includes ;
conf - > includes = inc ;
return inc ;
}
@ -1377,13 +1377,13 @@ void localized_ast_include_rename(struct ast_config *conf, const char *from_file
struct ast_config_include * incl ;
struct ast_category * cat ;
struct ast_variable * v ;
int from_len = strlen ( from_file ) ;
int to_len = strlen ( to_file ) ;
if ( strcmp ( from_file , to_file ) = = 0 ) /* no use wasting time if the name is the same */
return ;
/* the manager code allows you to read in one config file, then
write it back out under a different name . But , the new arrangement
ties output lines to the file name . So , before you try to write
@ -1392,7 +1392,7 @@ void localized_ast_include_rename(struct ast_config *conf, const char *from_file
*/
/* file names are on categories, includes (of course), and on variables. So,
traverse all this and swap names */
for ( incl = conf - > includes ; incl ; incl = incl - > next ) {
if ( strcmp ( incl - > include_location_file , from_file ) = = 0 ) {
if ( from_len > = to_len )
@ -1523,7 +1523,7 @@ static struct ast_variable *variable_clone(const struct ast_variable *old)
return new ;
}
static void ast_variables_destroy ( struct ast_variable * v )
{
struct ast_variable * vn ;
@ -1538,7 +1538,7 @@ static void ast_variables_destroy(struct ast_variable *v)
static void ast_includes_destroy ( struct ast_config_include * incls )
{
struct ast_config_include * incl , * inclnext ;
for ( incl = incls ; incl ; incl = inclnext ) {
inclnext = incl - > next ;
if ( incl - > include_location_file )
@ -1559,7 +1559,7 @@ static void ast_config_destroy(struct ast_config *cfg)
return ;
ast_includes_destroy ( cfg - > includes ) ;
cat = cfg - > root ;
while ( cat ) {
ast_variables_destroy ( cat - > root ) ;
@ -1695,7 +1695,7 @@ extern int ast_language_is_prefix;
*/
# define AST_RWLIST_RDLOCK(head) \
ast_rwlock_rdlock ( & ( head ) - > lock )
/*!
\ brief Attempts to unlock a read / write based list .
\ param head This is a pointer to the list head structure
@ -1969,7 +1969,7 @@ struct { \
}
# define AST_RWLIST_ENTRY AST_LIST_ENTRY
/*!
\ brief Returns the first entry contained in a list .
\ param head This is a pointer to the list head structure
@ -2381,7 +2381,7 @@ struct ast_switch {
AST_LIST_ENTRY ( ast_switch ) list ;
const char * name ; /*!< Name of the switch */
const char * description ; /*!< Description of the switch */
ast_switch_f * exists ;
ast_switch_f * canmatch ;
ast_switch_f * exec ;
@ -2455,7 +2455,7 @@ static const char *ast_var_name(const struct ast_var_t *var)
}
/* experiment 1: see if it's easier just to use existing config code
* to read in the extensions . conf file . In this scenario ,
* to read in the extensions . conf file . In this scenario ,
I have to rip / copy code from other modules , because they
are staticly declared as - is . A solution would be to move
the ripped code to another location and make them available
@ -2467,7 +2467,7 @@ static void ast_log(int level, const char *file, int line, const char *function,
{
va_list vars ;
va_start ( vars , fmt ) ;
printf ( " LOG: lev:%d file:%s line:%d func: %s " ,
level , file , line , function ) ;
vprintf ( fmt , vars ) ;
@ -2479,7 +2479,7 @@ void __attribute__((format(printf, 1, 2))) ast_verbose(const char *fmt, ...)
{
va_list vars ;
va_start ( vars , fmt ) ;
printf ( " VERBOSE: " ) ;
vprintf ( fmt , vars ) ;
fflush ( stdout ) ;
@ -2697,7 +2697,7 @@ struct ast_state_cb {
/*! \brief Structure for dial plan hints
\ note Hints are pointers from an extension in the dialplan to one or
more devices ( tech / name )
more devices ( tech / name )
- See \ ref AstExtState
*/
struct ast_hint {
@ -2725,7 +2725,7 @@ AST_LIST_HEAD(store_hints, store_hint);
# define STATUS_SUCCESS 5
static struct ast_var_t * ast_var_assign ( const char * name , const char * value )
{
{
struct ast_var_t * var ;
int name_len = strlen ( name ) + 1 ;
int value_len = strlen ( value ) + 1 ;
@ -2737,10 +2737,10 @@ static struct ast_var_t *ast_var_assign(const char *name, const char *value)
ast_copy_string ( var - > name , name , name_len ) ;
var - > value = var - > name + name_len ;
ast_copy_string ( var - > value , value , value_len ) ;
return var ;
}
}
static void ast_var_delete ( struct ast_var_t * var )
{
free ( var ) ;
@ -3017,7 +3017,7 @@ static void null_datad(void *foo)
}
/*! \brief Find realtime engine for realtime family */
static struct ast_config_engine * find_engine ( const char * family , char * database , int dbsiz , char * table , int tabsiz )
static struct ast_config_engine * find_engine ( const char * family , char * database , int dbsiz , char * table , int tabsiz )
{
struct ast_config_engine * eng , * ret = NULL ;
struct ast_config_map * map ;
@ -3040,12 +3040,12 @@ static struct ast_config_engine *find_engine(const char *family, char *database,
ret = eng ;
}
}
/* if we found a mapping, but the engine is not available, then issue a warning */
if ( map & & ! ret )
ast_log ( LOG_WARNING , " Realtime mapping for '%s' found to engine '%s', but the engine is not available \n " , map - > name , map - > driver ) ;
return ret ;
}
@ -3120,7 +3120,7 @@ static void ast_category_destroy(struct ast_category *cat)
ast_variables_destroy ( cat - > root ) ;
if ( cat - > file )
free ( cat - > file ) ;
free ( cat ) ;
}
@ -3137,7 +3137,7 @@ static struct ast_config *ast_config_internal_load(const char *filename, struct
char db [ 256 ] ;
char table [ 256 ] ;
struct ast_config_engine * loader = & text_file_engine ;
struct ast_config * result ;
struct ast_config * result ;
if ( cfg - > include_level = = cfg - > max_include_level ) {
ast_log ( LOG_WARNING , " Maximum Include level (%d) exceeded \n " , cfg - > max_include_level ) ;
@ -3165,7 +3165,7 @@ static struct ast_config *ast_config_internal_load(const char *filename, struct
}
result = loader - > load_func ( db , table , filename , cfg , withcomments , suggested_incl_file ) ;
/* silence is golden
/* silence is golden
ast_log ( LOG_WARNING , " finished internal loading file %s level=%d \n " , filename , cfg - > include_level ) ;
*/
@ -3204,7 +3204,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
return - 1 ;
}
( * cat ) - > lineno = lineno ;
/* add comments */
if ( withcomments & & comment_buffer & & comment_buffer [ 0 ] ) {
newcat - > precomments = ALLOC_COMMENT ( comment_buffer ) ;
@ -3214,7 +3214,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
}
if ( withcomments )
CB_RESET ( ) ;
/* If there are options or categories to inherit from, process them now */
if ( c ) {
if ( ! ( cur = strchr ( c , ' ) ' ) ) ) {
@ -3241,7 +3241,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
}
} else {
struct ast_category * base ;
base = category_get ( cfg , cur , 1 ) ;
if ( ! base ) {
ast_log ( LOG_WARNING , " Inheritance requested, but category '%s' does not exist, line %d of %s \n " , cur , lineno , configfile ) ;
@ -3264,7 +3264,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
c = ast_skip_blanks ( c + 1 ) ;
if ( ! * c )
c = NULL ;
} else
} else
c = NULL ;
do_include = ! strcasecmp ( cur , " include " ) ;
if ( ! do_include )
@ -3279,7 +3279,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
if ( c ) {
char * cur2 ;
char real_inclusion_name [ 256 ] ;
/* Strip off leading and trailing "'s and <>'s */
while ( ( * c = = ' < ' ) | | ( * c = = ' > ' ) | | ( * c = = ' \" ' ) ) c + + ;
/* Get rid of leading mess */
@ -3294,7 +3294,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
}
/* #exec </path/to/executable>
We create a tmp file , then we # include it , then we delete it . */
if ( do_exec ) {
if ( do_exec ) {
snprintf ( exec_file , sizeof ( exec_file ) , " /var/tmp/exec.%d.%ld " , ( int ) time ( NULL ) , ( long ) pthread_self ( ) ) ;
snprintf ( cmd , sizeof ( cmd ) , " %s > %s 2>&1 " , cur , exec_file ) ;
ast_safe_system ( cmd ) ;
@ -3303,26 +3303,26 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
exec_file [ 0 ] = ' \0 ' ;
/* A #include */
/* ast_log(LOG_WARNING, "Reading in included file %s withcomments=%d\n", cur, withcomments); */
/* record this inclusion */
ast_include_new ( cfg , configfile , cur , do_exec , cur2 , lineno , real_inclusion_name , sizeof ( real_inclusion_name ) ) ;
do_include = ast_config_internal_load ( cur , cfg , withcomments , real_inclusion_name ) ? 1 : 0 ;
if ( ! ast_strlen_zero ( exec_file ) )
unlink ( exec_file ) ;
if ( ! do_include )
return 0 ;
/* ast_log(LOG_WARNING, "Done reading in included file %s withcomments=%d\n", cur, withcomments); */
} else {
ast_log ( LOG_WARNING , " Directive '#%s' needs an argument (%s) at line %d of %s \n " ,
ast_log ( LOG_WARNING , " Directive '#%s' needs an argument (%s) at line %d of %s \n " ,
do_exec ? " exec " : " include " ,
do_exec ? " /path/to/executable " : " filename " ,
lineno ,
configfile ) ;
}
}
else
else
ast_log ( LOG_WARNING , " Unknown directive '%s' at line %d of %s \n " , cur , lineno , configfile ) ;
} else {
/* Just a line (variable = value) */
@ -3356,7 +3356,7 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
}
if ( withcomments )
CB_RESET ( ) ;
} else {
return - 1 ;
}
@ -3394,7 +3394,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
struct ast_category * cat = NULL ;
int count = 0 ;
struct stat statbuf ;
cat = ast_config_get_current_category ( cfg ) ;
if ( filename [ 0 ] = = ' / ' ) {
@ -3409,7 +3409,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
if ( withcomments & & cfg & & cfg - > include_level < 2 ) {
CB_INIT ( ) ;
}
# ifdef AST_INCLUDE_GLOB
{
int glob_ret ;
@ -3460,17 +3460,17 @@ static struct ast_config *config_text_file_load(const char *database, const char
while ( ! feof ( f ) ) {
lineno + + ;
if ( fgets ( buf , sizeof ( buf ) , f ) ) {
if ( withcomments ) {
if ( withcomments ) {
CB_ADD ( lline_buffer ) ; /* add the current lline buffer to the comment buffer */
lline_buffer [ 0 ] = 0 ; /* erase the lline buffer */
}
new_buf = buf ;
if ( comment )
if ( comment )
process_buf = NULL ;
else
process_buf = buf ;
while ( ( comment_p = strchr ( new_buf , COMMENT_META ) ) ) {
if ( ( comment_p > new_buf ) & & ( * ( comment_p - 1 ) = = ' \\ ' ) ) {
/* Yuck, gotta memmove */
@ -3502,7 +3502,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
CB_ADD ( " ; " ) ;
CB_ADD_LEN ( oldptr + 1 , new_buf - oldptr - 1 ) ;
}
memmove ( oldptr , new_buf , strlen ( new_buf ) + 1 ) ;
new_buf = oldptr ;
} else
@ -3510,12 +3510,12 @@ static struct ast_config *config_text_file_load(const char *database, const char
}
} else {
if ( ! comment ) {
/* If ; is found, and we are not nested in a comment,
/* If ; is found, and we are not nested in a comment,
we immediately stop all comment processing */
if ( withcomments ) {
LLB_ADD ( comment_p ) ;
}
* comment_p = ' \0 ' ;
* comment_p = ' \0 ' ;
new_buf = comment_p ;
} else
new_buf = comment_p + 1 ;
@ -3525,7 +3525,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
{
CB_ADD ( buf ) ; /* the whole line is a comment, store it */
}
if ( process_buf ) {
char * stripped_process_buf = ast_strip ( process_buf ) ;
if ( ! ast_strlen_zero ( stripped_process_buf ) ) {
@ -3537,7 +3537,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
}
}
}
fclose ( f ) ;
fclose ( f ) ;
} while ( 0 ) ;
if ( comment ) {
ast_log ( LOG_WARNING , " Unterminated comment detected beginning on line %d \n " , nest [ comment ] ) ;
@ -3551,12 +3551,12 @@ static struct ast_config *config_text_file_load(const char *database, const char
}
# endif
if ( cfg & & cfg - > include_level = = 1 & & withcomments & & comment_buffer ) {
if ( comment_buffer ) {
if ( comment_buffer ) {
free ( comment_buffer ) ;
free ( lline_buffer ) ;
comment_buffer = 0 ;
lline_buffer = 0 ;
comment_buffer_size = 0 ;
comment_buffer = 0 ;
lline_buffer = 0 ;
comment_buffer_size = 0 ;
lline_buffer_size = 0 ;
}
}
@ -3569,7 +3569,7 @@ static struct ast_config *config_text_file_load(const char *database, const char
static struct ast_config * ast_config_new ( void ) ;
static struct ast_config * ast_config_new ( void )
static struct ast_config * ast_config_new ( void )
{
struct ast_config * config ;
@ -3622,7 +3622,7 @@ static struct ast_category *next_available_category(struct ast_category *cat)
}
static char * ast_category_browse ( struct ast_config * config , const char * prev )
{
{
struct ast_category * cat = NULL ;
if ( prev & & config - > last_browse & & ( config - > last_browse - > name = = prev ) )
@ -3645,7 +3645,7 @@ static char *ast_category_browse(struct ast_config *config, const char *prev)
}
}
}
if ( cat )
cat = next_available_category ( cat ) ;
@ -3666,21 +3666,21 @@ void ast_config_set_current_category(struct ast_config *cfg, const struct ast_ca
/* NOTE: categories and variables each have a file and lineno attribute. On a save operation, these are used to determine
which file and line number to write out to . Thus , an entire hierarchy of config files ( via # include statements ) can be
recreated . BUT , care must be taken to make sure that every cat and var has the proper file name stored , or you may
be shocked and mystified as to why things are not showing up in the files !
be shocked and mystified as to why things are not showing up in the files !
Also , All # include / # exec statements are recorded in the " includes " LL in the ast_config structure . The file name
and line number are stored for each include , plus the name of the file included , so that these statements may be
included in the output files on a file_save operation .
included in the output files on a file_save operation .
The lineno ' s are really just for relative placement in the file . There is no attempt to make sure that blank lines
are included to keep the lineno ' s the same between input and output . The lineno fields are used mainly to determine
the position of the # include and # exec directives . So , blank lines tend to disappear from a read / rewrite operation ,
and a header gets added .
vars and category heads are output in the order they are stored in the config file . So , if the software
shuffles these at all , then the placement of # include directives might get a little mixed up , because the
file / lineno data probably won ' t get changed .
*/
static void gen_header ( FILE * f1 , const char * configfile , const char * fn , const char * generator )
@ -3689,7 +3689,7 @@ static void gen_header(FILE *f1, const char *configfile, const char *fn, const c
time_t t ;
time ( & t ) ;
ast_copy_string ( date , ctime ( & t ) , sizeof ( date ) ) ;
fprintf ( f1 , " ;! \n " ) ;
fprintf ( f1 , " ;! Automatically generated configuration file \n " ) ;
if ( strcmp ( configfile , fn ) )
@ -3708,7 +3708,7 @@ static void set_fn(char *fn, int fn_size, const char *file, const char *configfi
ast_copy_string ( fn , configfile , fn_size ) ;
else
snprintf ( fn , fn_size , " %s/%s " , ast_config_AST_CONFIG_DIR , configfile ) ;
} else if ( file [ 0 ] = = ' / ' )
} else if ( file [ 0 ] = = ' / ' )
ast_copy_string ( fn , file , fn_size ) ;
else
snprintf ( fn , fn_size , " %s/%s " , ast_config_AST_CONFIG_DIR , file ) ;
@ -3725,20 +3725,20 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
struct ast_comment * cmt ;
struct ast_config_include * incl ;
int blanklines = 0 ;
/* reset all the output flags, in case this isn't our first time saving this data */
for ( incl = cfg - > includes ; incl ; incl = incl - > next )
incl - > output = 0 ;
/* go thru all the inclusions and make sure all the files involved (configfile plus all its inclusions)
are all truncated to zero bytes and have that nice header */
for ( incl = cfg - > includes ; incl ; incl = incl - > next )
{
if ( ! incl - > exec ) { /* leave the execs alone -- we'll write out the #exec directives, but won't zero out the include files or exec files*/
FILE * f1 ;
set_fn ( fn , sizeof ( fn ) , incl - > included_file , configfile ) ; /* normally, fn is just set to incl->included_file, prepended with config dir if relative */
f1 = fopen ( fn , " w " ) ;
if ( f1 ) {
@ -3749,24 +3749,24 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
}
}
}
set_fn ( fn , sizeof ( fn ) , 0 , configfile ) ; /* just set fn to absolute ver of configfile */
# ifdef __CYGWIN__
# ifdef __CYGWIN__
if ( ( f = fopen ( fn , " w+ " ) ) ) {
# else
if ( ( f = fopen ( fn , " w " ) ) ) {
# endif
# endif
if ( option_verbose > 1 )
ast_verbose ( VERBOSE_PREFIX_2 " Saving '%s': " , fn ) ;
gen_header ( f , configfile , fn , generator ) ;
cat = cfg - > root ;
fclose ( f ) ;
/* from here out, we open each involved file and concat the stuff we need to add to the end and immediately close... */
/* since each var, cat, and associated comments can come from any file, we have to be
/* since each var, cat, and associated comments can come from any file, we have to be
mobile , and open each file , print , and close it on an entry - by - entry basis */
while ( cat ) {
set_fn ( fn , sizeof ( fn ) , cat - > file , configfile ) ;
f = fopen ( fn , " a " ) ;
@ -3775,7 +3775,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
ast_verbose ( VERBOSE_PREFIX_2 " Unable to write %s (%s) " , fn , strerror ( errno ) ) ;
return - 1 ;
}
/* dump any includes that happen before this category header */
for ( incl = cfg - > includes ; incl ; incl = incl - > next ) {
if ( strcmp ( incl - > include_location_file , cat - > file ) = = 0 ) {
@ -3788,7 +3788,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
}
}
}
/* Dump section with any appropriate comment */
for ( cmt = cat - > precomments ; cmt ; cmt = cmt - > next ) {
if ( cmt - > cmt [ 0 ] ! = ' ; ' | | cmt - > cmt [ 1 ] ! = ' ! ' )
@ -3803,7 +3803,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
if ( ! cat - > sameline )
fprintf ( f , " \n " ) ;
fclose ( f ) ;
var = cat - > root ;
while ( var ) {
set_fn ( fn , sizeof ( fn ) , var - > file , configfile ) ;
@ -3813,7 +3813,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
ast_verbose ( VERBOSE_PREFIX_2 " Unable to write %s (%s) " , fn , strerror ( errno ) ) ;
return - 1 ;
}
/* dump any includes that happen before this category header */
for ( incl = cfg - > includes ; incl ; incl = incl - > next ) {
if ( strcmp ( incl - > include_location_file , var - > file ) = = 0 ) {
@ -3826,24 +3826,24 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
}
}
}
for ( cmt = var - > precomments ; cmt ; cmt = cmt - > next ) {
if ( cmt - > cmt [ 0 ] ! = ' ; ' | | cmt - > cmt [ 1 ] ! = ' ! ' )
fprintf ( f , " %s " , cmt - > cmt ) ;
}
if ( var - > sameline )
if ( var - > sameline )
fprintf ( f , " %s %s %s %s " , var - > name , ( var - > object ? " => " : " = " ) , var - > value , var - > sameline - > cmt ) ;
else
else
fprintf ( f , " %s %s %s \n " , var - > name , ( var - > object ? " => " : " = " ) , var - > value ) ;
if ( var - > blanklines ) {
blanklines = var - > blanklines ;
while ( blanklines - - )
fprintf ( f , " \n " ) ;
}
fclose ( f ) ;
var = var - > next ;
}
cat = cat - > next ;
@ -3860,7 +3860,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
/* Now, for files with trailing #include/#exec statements,
we have to make sure every entry is output */
for ( incl = cfg - > includes ; incl ; incl = incl - > next ) {
if ( ! incl - > output ) {
/* open the respective file */
@ -3871,7 +3871,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
ast_verbose ( VERBOSE_PREFIX_2 " Unable to write %s (%s) " , fn , strerror ( errno ) ) ;
return - 1 ;
}
/* output the respective include */
if ( incl - > exec )
fprintf ( f , " #exec \" %s \" \n " , incl - > exec_file ) ;
@ -3881,7 +3881,7 @@ int localized_config_text_file_save(const char *configfile, const struct ast_con
incl - > output = 1 ;
}
}
return 0 ;
}
@ -4207,7 +4207,7 @@ static int ext_cmp1(const char **p)
break ;
}
/* locate end of set */
end = strchr ( * p , ' ] ' ) ;
end = strchr ( * p , ' ] ' ) ;
if ( end = = NULL ) {
ast_log ( LOG_WARNING , " Wrong usage of [] in the extension \n " ) ;
@ -4566,24 +4566,24 @@ static inline int include_valid(struct ast_include *i)
static struct ast_exten * pbx_find_extension ( struct ast_channel * chan ,
struct ast_context * bypass ,
struct ast_context * bypass ,
struct pbx_find_info * q ,
const char * context ,
const char * exten ,
const char * context ,
const char * exten ,
int priority ,
const char * label ,
const char * callerid ,
const char * label ,
const char * callerid ,
enum ext_match_t action ) ;
static struct ast_exten * pbx_find_extension ( struct ast_channel * chan ,
struct ast_context * bypass ,
struct ast_context * bypass ,
struct pbx_find_info * q ,
const char * context ,
const char * exten ,
const char * context ,
const char * exten ,
int priority ,
const char * label ,
const char * callerid ,
const char * label ,
const char * callerid ,
enum ext_match_t action )
{
int x ;
@ -4667,7 +4667,7 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
continue ;
}
/* No need to Substitute variables now; we shouldn't be here if there's any */
/* equivalent of extension_match_core() at the switch level */
if ( action = = E_CANMATCH )
aswf = asw - > canmatch ;
@ -4701,20 +4701,20 @@ static struct ast_exten *pbx_find_extension(struct ast_channel *chan,
struct ast_exten * localized_find_extension ( struct ast_context * bypass ,
struct pbx_find_info * q ,
const char * context ,
const char * exten ,
const char * context ,
const char * exten ,
int priority ,
const char * label ,
const char * callerid ,
const char * label ,
const char * callerid ,
enum ext_match_t action ) ;
struct ast_exten * localized_find_extension ( struct ast_context * bypass ,
struct pbx_find_info * q ,
const char * context ,
const char * exten ,
const char * context ,
const char * exten ,
int priority ,
const char * label ,
const char * callerid ,
const char * label ,
const char * callerid ,
enum ext_match_t action )
{
return pbx_find_extension ( NULL , bypass , q , context , exten , priority , label , callerid , action ) ;
@ -5328,7 +5328,7 @@ static void pbx_retrieve_variable(struct ast_channel *c, const char *var, char *
int offset , length ;
int i , need_substring ;
struct varshead * places [ 2 ] = { headp , & globals } ; /* list of places where we may look */
/*
* Make a copy of var because parse_variable_name ( ) modifies the string .
* Then if called directly , we might need to run substring ( ) on the result ;
@ -5336,7 +5336,7 @@ static void pbx_retrieve_variable(struct ast_channel *c, const char *var, char *
*/
tmpvar = ast_strdupa ( var ) ; /* parse_variable_name modifies the string */
need_substring = parse_variable_name ( tmpvar , & offset , & length , & i /* ignored */ ) ;
/*
* Look first into predefined variables , then into variable lists .
* Variable ' s ' points to the result , according to the following rules :
@ -5357,7 +5357,7 @@ static void pbx_retrieve_variable(struct ast_channel *c, const char *var, char *
if ( ! strcmp ( var , " EPOCH " ) ) {
snprintf ( workspace , workspacelen , " %u " , ( int ) time ( NULL ) ) ;
}
s = workspace ;
}
/* if not found, look into chanvars or global vars */
@ -5600,11 +5600,11 @@ static int pbx_load_config(const char *config_file)
autofallthrough_config = ast_true ( aft ) ;
clearglobalvars_config = ast_true ( ast_variable_retrieve ( cfg , " general " , " clearglobalvars " ) ) ;
if ( ( cxt = ast_variable_retrieve ( cfg , " general " , " userscontext " ) ) )
if ( ( cxt = ast_variable_retrieve ( cfg , " general " , " userscontext " ) ) )
ast_copy_string ( userscontext , cxt , sizeof ( userscontext ) ) ;
else
ast_copy_string ( userscontext , " default " , sizeof ( userscontext ) ) ;
for ( v = ast_variable_browse ( cfg , " globals " ) ; v ; v = v - > next ) {
memset ( realvalue , 0 , sizeof ( realvalue ) ) ;
pbx_substitute_variables_helper ( NULL , v - > value , realvalue , sizeof ( realvalue ) - 1 ) ;
@ -5905,7 +5905,7 @@ int localized_pbx_load_module(void)
printf ( " Context: %s \n " , con - > name ) ;
}
printf ( " ========= \n " ) ;
return 0 ;
}