Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

config.h File Reference

Go to the source code of this file.

Data Structures

struct  ast_comment
struct  ast_variable

Functions

ast_configast_load (char *configfile)
 Load a config file.
void ast_destroy (struct ast_config *config)
 Removes a config.
char * ast_category_browse (struct ast_config *config, char *prev)
 Goes through categories.
ast_variableast_variable_browse (struct ast_config *config, char *category)
 Goes through variables.
char * ast_variable_retrieve (struct ast_config *config, char *category, char *value)
 Gets a variable.
int ast_true (char *val)
 Make sure something is true.
int ast_false (char *val)
 Make sure something is false.
int ast_category_exist (struct ast_config *config, char *category_name)
 Check for category duplicates.
ast_variableast_variable_append_modify (struct ast_config *cfg, char *category, char *variable, char *newvalue, int newcat, int newvar, int move)
int ast_category_delete (struct ast_config *cfg, char *category)
int ast_variable_delete (struct ast_config *cfg, char *category, char *variable, char *value)
int ast_save (char *filename, struct ast_config *cfg, char *generator)


Function Documentation

char* ast_category_browse struct ast_config config,
char *  prev
 

Goes through categories.

Parameters:
config Which config file you wish to "browse"
prev A pointer to a previous category. This funtion is kind of non-intuitive in it's use. To begin, one passes NULL as the second arguement. It will return a pointer to the string of the first category in the file. From here on after, one must then pass the previous usage's return value as the second pointer, and it will return a pointer to the category name afterwards. Note: If you manually strcpy a string into a character array and pass it thinking it will return your category, it will not; the comparisons are not done doing strcmp, they are done by checking whether the value of the string POINTER is the same. Returns a category on success, or NULL on failure/no-more-categories
Definition at line 928 of file config.c.

References ast_category::name, ast_category::next, and ast_config::root.

00929 { 00930 struct ast_category *cat; 00931 if (!prev) { 00932 if (config->root) 00933 return config->root->name; 00934 else 00935 return NULL; 00936 } 00937 cat = config->root; 00938 while(cat) { 00939 if (cat->name == prev) { 00940 if (cat->next) 00941 return cat->next->name; 00942 else 00943 return NULL; 00944 } 00945 cat = cat->next; 00946 } 00947 cat = config->root; 00948 while(cat) { 00949 if (!strcasecmp(cat->name, prev)) { 00950 if (cat->next) 00951 return cat->next->name; 00952 else 00953 return NULL; 00954 } 00955 cat = cat->next; 00956 } 00957 return NULL; 00958 }

int ast_category_delete struct ast_config cfg,
char *  category
 

int ast_category_exist struct ast_config config,
char *  category_name
 

Check for category duplicates.

Parameters:
config which config to use
category_name name of the category you're looking for This will search through the categories within a given config file and search for a match. The passed category_name can be a regular string (as opposed to a pointer of an existent string, lol) Browse config structure and check for category duplicity Return non-zero if found
Definition at line 397 of file config.c.

References ast_category::next, and ast_config::root.

00398 { 00399 struct ast_category *category = NULL; 00400 00401 category = config->root; 00402 00403 while(category) { 00404 if (!strcasecmp(category->name,category_name)) 00405 return 1; 00406 category = category->next; 00407 } 00408 00409 return 0; 00410 }

void ast_destroy struct ast_config config  ) 
 

Removes a config.

Parameters:
config config data structure associated with the config. Free memory associated with a given config Returns nothing
Definition at line 67 of file config.c.

References free, ast_category::root, and ast_config::root.

Referenced by ast_enum_init(), ast_load_resource(), ast_rtp_reload(), init_manager(), load_modules(), and read_ast_cust_config().

00068 { 00069 struct ast_category *cat, *catn; 00070 struct ast_variable *v, *vn; 00071 00072 if (!ast) 00073 return; 00074 00075 cat = ast->root; 00076 while(cat) { 00077 v = cat->root; 00078 while(v) { 00079 vn = v; 00080 free(v->name); 00081 free(v->value); 00082 #ifdef PRESERVE_COMMENTS 00083 free_comments(v->precomments); 00084 free_comments(v->sameline); 00085 #endif 00086 v = v->next; 00087 free(vn); 00088 } 00089 catn = cat; 00090 #ifdef PRESERVE_COMMENTS 00091 free_comments(cat->precomments); 00092 free_comments(cat->sameline); 00093 #endif 00094 cat = cat->next; 00095 free(catn); 00096 } 00097 #ifdef PRESERVE_COMMENTS 00098 free_comments(ast->trailingcomments); 00099 #endif 00100 free(ast); 00101 }

int ast_false char *  val  ) 
 

Make sure something is false.

Determine falseness of a boolean value. This function checks to see whether a string passed to it is an indication of a negatirve value. It checks to see if the string is "no", "false", "n", "f", and "0". Returns 0 if the value of s is a NULL pointer, 0 on "truth", and -1 on falsehood. Definition at line 117 of file config.c.

References s.

00118 { 00119 if (!s) 00120 return 0; 00121 /* Determine if this is a false value */ 00122 if (!strcasecmp(s, "no") || 00123 !strcasecmp(s, "false") || 00124 !strcasecmp(s, "n") || 00125 !strcasecmp(s, "f") || 00126 !strcasecmp(s, "0")) 00127 return -1; 00128 return 0; 00129 }

struct ast_config* ast_load char *  configfile  ) 
 

Load a config file.

Parameters:
configfile path of file to open. If no preceding '/' character, path is considered relative to AST_CONFIG_DIR Create a config structure from a given configuration file. Returns NULL on error, or an ast_config data structure on success
Definition at line 910 of file config.c.

Referenced by ast_enum_init(), ast_load_resource(), ast_rtp_reload(), init_manager(), load_modules(), and read_ast_cust_config().

00911 { 00912 struct ast_category *tmpc=NULL; 00913 struct ast_variable *last = NULL; 00914 00915 00916 #ifdef PRESERVE_COMMENTS 00917 struct ast_comment_struct acs = { NULL, NULL }; 00918 #endif 00919 00920 00921 return __ast_load(configfile, NULL, &tmpc, &last, 0 00922 #ifdef PRESERVE_COMMENTS 00923 ,&acs 00924 #endif 00925 ); 00926 }

int ast_save char *  filename,
struct ast_config cfg,
char *  generator
 

Definition at line 645 of file config.c.

00646 { 00647 FILE *f; 00648 char fn[256]; 00649 char date[256]=""; 00650 time_t t; 00651 struct ast_variable *var; 00652 struct ast_category *cat; 00653 int blanklines = 0; 00654 if (configfile[0] == '/') { 00655 strncpy(fn, configfile, sizeof(fn)-1); 00656 } else { 00657 snprintf(fn, sizeof(fn), "%s/%s", AST_CONFIG_DIR, configfile); 00658 } 00659 time(&t); 00660 strncpy(date, ctime(&t), sizeof(date) - 1); 00661 if ((f = fopen(fn, "w"))) { 00662 if ((option_verbose > 1) && !option_debug) 00663 ast_verbose( VERBOSE_PREFIX_2 "Saving '%s': ", fn); 00664 fprintf(f, ";!\n"); 00665 fprintf(f, ";! Automatically generated configuration file\n"); 00666 fprintf(f, ";! Filename: %s (%s)\n", configfile, fn); 00667 fprintf(f, ";! Generator: %s\n", generator); 00668 fprintf(f, ";! Creation Date: %s", date); 00669 fprintf(f, ";!\n"); 00670 cat = cfg->root; 00671 while(cat) { 00672 #ifdef PRESERVE_COMMENTS 00673 /* Dump any precomments */ 00674 dump_comments(f, cat->precomments); 00675 #endif 00676 /* Dump section with any appropriate comment */ 00677 #ifdef PRESERVE_COMMENTS 00678 if (cat->sameline) 00679 fprintf(f, "[%s] ; %s\n", cat->name, cat->sameline->cmt); 00680 else 00681 #endif 00682 fprintf(f, "[%s]\n", cat->name); 00683 var = cat->root; 00684 while(var) { 00685 #ifdef PRESERVE_COMMENTS 00686 dump_comments(f, var->precomments); 00687 #endif 00688 if (var->sameline) 00689 fprintf(f, "%s %s %s ; %s\n", var->name, (var->object ? "=>" : "="), var->value, var->sameline->cmt); 00690 else 00691 fprintf(f, "%s %s %s\n", var->name, (var->object ? "=>" : "="), var->value); 00692 if (var->blanklines) { 00693 blanklines = var->blanklines; 00694 while (blanklines) { 00695 fprintf(f, "\n"); 00696 blanklines--; 00697 } 00698 } 00699 00700 var = var->next; 00701 } 00702 #if 0 00703 /* Put an empty line */ 00704 fprintf(f, "\n"); 00705 #endif 00706 cat = cat->next; 00707 } 00708 #ifdef PRESERVE_COMMENTS 00709 dump_comments(f, cfg->trailingcomments); 00710 #endif 00711 } else { 00712 if (option_debug) 00713 printf("Unable to open for writing: %s\n", fn); 00714 else if (option_verbose > 1) 00715 printf( "Unable to write (%s)", strerror(errno)); 00716 return -1; 00717 } 00718 fclose(f); 00719 return 0; 00720 }

int ast_true char *  val  ) 
 

Make sure something is true.

Determine affermativeness of a boolean value. This function checks to see whether a string passed to it is an indication of an affirmitave value. It checks to see if the string is "yes", "true", "y", "t", and "1". Returns 0 if the value of s is a NULL pointer, 0 on "truth", and -1 on falsehood. Definition at line 103 of file config.c.

References s.

Referenced by ast_load_resource(), init_manager(), and load_modules().

00104 { 00105 if (!s) 00106 return 0; 00107 /* Determine if this is a true value */ 00108 if (!strcasecmp(s, "yes") || 00109 !strcasecmp(s, "true") || 00110 !strcasecmp(s, "y") || 00111 !strcasecmp(s, "t") || 00112 !strcasecmp(s, "1")) 00113 return -1; 00114 return 0; 00115 }

struct ast_variable* ast_variable_append_modify struct ast_config cfg,
char *  category,
char *  variable,
char *  newvalue,
int  newcat,
int  newvar,
int  move
 

struct ast_variable* ast_variable_browse struct ast_config config,
char *  category
 

Goes through variables.

Somewhat similar in intent as the ast_category_browse. The category MUST be an actual pointer to an actual category (such as one obtained by using ast_category_browse()). List variables of config file Returns ast_variable list on success, or NULL on failure Definition at line 131 of file config.c.

References ast_variable::next, ast_category::root, and ast_config::root.

Referenced by ast_enum_init(), ast_variable_retrieve(), load_modules(), and read_ast_cust_config().

00132 { 00133 struct ast_category *cat; 00134 cat = config->root; 00135 while(cat) { 00136 if (cat->name == category) 00137 return cat->root; 00138 cat = cat->next; 00139 } 00140 cat = config->root; 00141 while(cat) { 00142 if (!strcasecmp(cat->name, category)) 00143 return cat->root; 00144 cat = cat->next; 00145 } 00146 return NULL; 00147 }

int ast_variable_delete struct ast_config cfg,
char *  category,
char *  variable,
char *  value
 

char* ast_variable_retrieve struct ast_config config,
char *  category,
char *  value
 

Gets a variable.

Parameters:
config which (opened) config to use
category category under which the variable lies (must be a pointer to the category, such as one given by ast_category_browse)
value which variable you wish to get the data for Goes through a given config file in the given category and searches for the given variable Returns the variable value on success, or NULL if unable to find it. Retrieve a specific variable
Definition at line 149 of file config.c.

References ast_variable_browse(), ast_category::root, ast_config::root, and ast_variable::value.

Referenced by ast_load_resource(), ast_rtp_reload(), init_manager(), and load_modules().

00150 { 00151 struct ast_variable *v; 00152 if (category) { 00153 v = ast_variable_browse(config, category); 00154 while (v) { 00155 if (value == v->name) 00156 return v->value; 00157 v=v->next; 00158 } 00159 v = ast_variable_browse(config, category); 00160 while (v) { 00161 if (!strcasecmp(value, v->name)) 00162 return v->value; 00163 v=v->next; 00164 } 00165 } else { 00166 struct ast_category *cat; 00167 cat = config->root; 00168 while(cat) { 00169 v = cat->root; 00170 while (v) { 00171 if (!strcasecmp(value, v->name)) 00172 return v->value; 00173 v=v->next; 00174 } 00175 cat = cat->next; 00176 } 00177 } 00178 return NULL; 00179 }


Generated on Tue Aug 17 16:13:55 2004 for Asterisk by doxygen 1.3.8