0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 
0032 
0033 
0034 #ifndef _INICFG_H
0035 #define _INICFG_H
0036 
0037 #ifdef  __cplusplus
0038 extern "C" {
0039 #endif
0040 
0041 
0042 #include <sys/stat.h>
0043 #include <stdint.h>
0044 #include <exhash.h>
0045 #include <sys_unix.h>
0046 #include <limits.h>
0047 
0048 #define NDRX_INICFG_SUBSECT_SPERATOR '/' 
0049 #define NDRX_INICFG_SUBSECT_SPERATOR_STR "/" 
0050 #define NDRX_INICFG_RESOURCES_MAX   5
0051 
0052 
0053 
0054 
0055 
0056 
0057 
0058 typedef struct ndrx_inicfg_section_keyval ndrx_inicfg_section_keyval_t;
0059 struct ndrx_inicfg_section_keyval
0060 {
0061     char *section; 
0062     char *key; 
0063     char *val; 
0064     
0065     EX_hash_handle hh;         
0066 };
0067 
0068 
0069 
0070     
0071 struct ndrx_inicfg_section
0072 {
0073     char *section; 
0074     
0075     ndrx_inicfg_section_keyval_t *values; 
0076     
0077     EX_hash_handle hh;         
0078 };
0079 typedef struct ndrx_inicfg_section ndrx_inicfg_section_t;
0080 
0081 
0082 
0083 
0084 struct ndrx_inicfg_file
0085 {
0086     
0087     char fullname[PATH_MAX+1];
0088     
0089     char resource[PATH_MAX+1];
0090     
0091     struct stat attr; 
0092     
0093     ndrx_inicfg_section_t *sections;
0094     
0095     int refreshed; 
0096     EX_hash_handle hh;         
0097 };
0098 
0099 typedef struct ndrx_inicfg_file ndrx_inicfg_file_t;
0100 
0101 
0102 
0103 
0104 
0105 struct ndrx_inicfg
0106 {
0107     int load_global_env; 
0108     
0109     
0110     string_hash_t *resource_hash;
0111     ndrx_inicfg_file_t *cfgfile;
0112 };
0113 
0114 typedef struct ndrx_inicfg ndrx_inicfg_t;
0115 
0116 
0117 
0118 
0119 
0120 extern NDRX_API  ndrx_inicfg_t * ndrx_inicfg_new(void);
0121 extern NDRX_API ndrx_inicfg_t * ndrx_inicfg_new2(int load_global_env);
0122 extern NDRX_API  int ndrx_inicfg_load_single_file(ndrx_inicfg_t *cfg, 
0123         char *resource, char *fullname, char **section_start_with);
0124 extern NDRX_API  int ndrx_inicfg_update_single_file(ndrx_inicfg_t *cfg, 
0125         char *resource, char *fullname, char **section_start_with);
0126 extern NDRX_API  int ndrx_inicfg_add(ndrx_inicfg_t *cfg, char *resource, char **section_start_with);
0127 extern NDRX_API  int ndrx_inicfg_reload(ndrx_inicfg_t *cfg, char **section_start_with);
0128 extern NDRX_API  int ndrx_keyval_hash_add(ndrx_inicfg_section_keyval_t **h, 
0129             ndrx_inicfg_section_keyval_t *src);
0130 extern NDRX_API  ndrx_inicfg_section_keyval_t * ndrx_keyval_hash_get(
0131         ndrx_inicfg_section_keyval_t *h, char *key);
0132 extern NDRX_API  void ndrx_keyval_hash_free(ndrx_inicfg_section_keyval_t *h);
0133 extern NDRX_API  int ndrx_inicfg_resolve(ndrx_inicfg_t *cfg, char **resources, char *section, 
0134         ndrx_inicfg_section_keyval_t **out);
0135 extern NDRX_API  int ndrx_inicfg_get_subsect(ndrx_inicfg_t *cfg, 
0136         char **resources, char *section, ndrx_inicfg_section_keyval_t **out);
0137 extern NDRX_API  int ndrx_inicfg_iterate(ndrx_inicfg_t *cfg, 
0138         char **resources,
0139         char **section_start_with, 
0140         ndrx_inicfg_section_t **out);
0141 extern NDRX_API  void ndrx_inicfg_sections_free(ndrx_inicfg_section_t *sections);
0142 extern NDRX_API  void ndrx_inicfg_file_free(ndrx_inicfg_t *cfg, ndrx_inicfg_file_t *cfgfile);
0143 extern NDRX_API  void ndrx_inicfg_free(ndrx_inicfg_t *cfg);
0144 
0145 #ifdef  __cplusplus
0146 }
0147 #endif
0148 
0149 #endif  
0150 
0151