]> sjero.net Git - linphone/blobdiff - coreapi/lpconfig.c
Add the linphone_core_new_with_config() function to instantiate a LinphoneCore given...
[linphone] / coreapi / lpconfig.c
index 4608beecfff09cde860a8d0d3b4b19ec477ab8f4..ca65fd1ffcd5ca4158d8e5425df06b485a985fb5 100644 (file)
@@ -190,6 +190,7 @@ void lp_config_parse(LpConfig *lpconfig, FILE *file){
 
                                        if (pos2-pos1>=0){
                                                /* found a pair key,value */
+                                               
                                                if (cur!=NULL){
                                                        LpItem *item=lp_section_find_item(cur,key);
                                                        if (item==NULL){
@@ -198,7 +199,7 @@ void lp_config_parse(LpConfig *lpconfig, FILE *file){
                                                                ms_free(item->value);
                                                                item->value=strdup(pos1);
                                                        }
-                                                       /*printf("Found %s %s={%s}\n",cur->name,key,pos1);*/
+                                                       /*ms_message("Found %s=%s",key,pos1);*/
                                                }else{
                                                        ms_warning("found key,item but no sections");
                                                }
@@ -210,18 +211,23 @@ void lp_config_parse(LpConfig *lpconfig, FILE *file){
 }
 
 LpConfig * lp_config_new(const char *filename){
+       return lp_config_new_with_factory(filename, NULL);
+}
+
+LpConfig *lp_config_new_with_factory(const char *config_filename, const char *factory_config_filename) {
        LpConfig *lpconfig=lp_new0(LpConfig,1);
-       if (filename!=NULL){
-               lpconfig->filename=ortp_strdup(filename);
-               lpconfig->file=fopen(filename,"rw");
+       if (config_filename!=NULL){
+               ms_message("Using (r/w) config information from %s", config_filename);
+               lpconfig->filename=ortp_strdup(config_filename);
+               lpconfig->file=fopen(config_filename,"r+");
                if (lpconfig->file!=NULL){
                        struct stat fileStat;
                        lp_config_parse(lpconfig,lpconfig->file);
                        fclose(lpconfig->file);
 #if !defined(_WIN32_WCE)
-                       if ((stat(filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
+                       if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) {
                                /* make existing configuration files non-group/world-accessible */
-                               if (chmod(filename, S_IRUSR | S_IWUSR) == -1) {
+                               if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) {
                                        ms_warning("unable to correct permissions on "
                                        "configuration file: %s", strerror(errno));
                                }
@@ -231,12 +237,16 @@ LpConfig * lp_config_new(const char *filename){
                        lpconfig->modified=0;
                }
        }
+       if (factory_config_filename != NULL) {
+               lp_config_read_file(lpconfig, factory_config_filename);
+       }
        return lpconfig;
 }
 
 int lp_config_read_file(LpConfig *lpconfig, const char *filename){
        FILE* f=fopen(filename,"r");
        if (f!=NULL){
+               ms_message("Reading config information from %s", filename);
                lp_config_parse(lpconfig,f);
                fclose(f);
                return 0;