[xiph-cvs] cvs commit: icecast/src config.c

Michael Smith msmith at xiph.org
Fri Aug 9 07:36:12 PDT 2002



msmith      02/08/09 10:36:12

  Modified:    src      config.c
  Log:
  Redo memory-management in config.c so that xmlFree() is called instead of
  free(), hopefully fixing win32 segfaults.

Revision  Changes    Path
1.12      +55 -50    icecast/src/config.c

Index: config.c
===================================================================
RCS file: /usr/local/cvsroot/icecast/src/config.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- config.c	9 Aug 2002 08:11:37 -0000	1.11
+++ config.c	9 Aug 2002 14:36:12 -0000	1.12
@@ -58,28 +58,38 @@
 void config_shutdown(void)
 {
         ice_config_dir_t *dirnode, *nextdirnode;
+    ice_config_t *c = &_configuration;
 
         if (_config_filename) free(_config_filename);
-	if (_configuration.location) free(_configuration.location);
-	if (_configuration.admin) free(_configuration.admin);
-	if (_configuration.source_password) free(_configuration.source_password);
-	if (_configuration.hostname) free(_configuration.hostname);
-	if (_configuration.base_dir) free(_configuration.base_dir);
-	if (_configuration.log_dir) free(_configuration.log_dir);
-	if (_configuration.access_log) free(_configuration.access_log);
-	if (_configuration.error_log) free(_configuration.error_log);
-    if (_configuration.bind_address) free(_configuration.bind_address);
-    if (_configuration.user) free(_configuration.user);
-    if (_configuration.group) free(_configuration.group);
+
+	if (c->location && c->location != CONFIG_DEFAULT_LOCATION) 
+        xmlFree(c->location);
+	if (c->admin && c->admin != CONFIG_DEFAULT_ADMIN) 
+        xmlFree(c->admin);
+	if (c->source_password && c->source_password != CONFIG_DEFAULT_SOURCE_PASSWORD)
+        xmlFree(c->source_password);
+	if (c->hostname && c->hostname != CONFIG_DEFAULT_HOSTNAME) 
+        xmlFree(c->hostname);
+	if (c->base_dir && c->base_dir != CONFIG_DEFAULT_BASE_DIR) 
+        xmlFree(c->base_dir);
+	if (c->log_dir && c->log_dir != CONFIG_DEFAULT_LOG_DIR) 
+        xmlFree(c->log_dir);
+	if (c->access_log && c->access_log != CONFIG_DEFAULT_ACCESS_LOG) 
+        xmlFree(c->access_log);
+	if (c->error_log && c->error_log != CONFIG_DEFAULT_ERROR_LOG) 
+        xmlFree(c->error_log);
+    if (c->bind_address) xmlFree(c->bind_address);
+    if (c->user) xmlFree(c->user);
+    if (c->group) xmlFree(c->group);
     dirnode = _configuration.dir_list;
     while(dirnode) {
         nextdirnode = dirnode->next;
-        free(dirnode->host);
+        xmlFree(dirnode->host);
         free(dirnode);
         dirnode = nextdirnode;
     }
 
-    memset(&_configuration, 0, sizeof(ice_config_t));
+    memset(c, 0, sizeof(ice_config_t));
 }
 
 int config_parse_file(const char *filename)
@@ -131,27 +141,27 @@
 
 static void _set_defaults(void)
 {
-	_configuration.location = (char *)strdup(CONFIG_DEFAULT_LOCATION);
-	_configuration.admin = (char *)strdup(CONFIG_DEFAULT_ADMIN);
+	_configuration.location = CONFIG_DEFAULT_LOCATION;
+	_configuration.admin = CONFIG_DEFAULT_ADMIN;
         _configuration.client_limit = CONFIG_DEFAULT_CLIENT_LIMIT;
         _configuration.source_limit = CONFIG_DEFAULT_SOURCE_LIMIT;
         _configuration.threadpool_size = CONFIG_DEFAULT_THREADPOOL_SIZE;
         _configuration.client_timeout = CONFIG_DEFAULT_CLIENT_TIMEOUT;
         _configuration.header_timeout = CONFIG_DEFAULT_HEADER_TIMEOUT;
         _configuration.source_timeout = CONFIG_DEFAULT_SOURCE_TIMEOUT;
-	_configuration.source_password = (char *)strdup(CONFIG_DEFAULT_SOURCE_PASSWORD);
+	_configuration.source_password = CONFIG_DEFAULT_SOURCE_PASSWORD;
         _configuration.touch_freq = CONFIG_DEFAULT_TOUCH_FREQ;
         _configuration.dir_list = NULL;
-	_configuration.hostname = (char *)strdup(CONFIG_DEFAULT_HOSTNAME);
+	_configuration.hostname = CONFIG_DEFAULT_HOSTNAME;
         _configuration.port = CONFIG_DEFAULT_PORT;
         _configuration.bind_address = NULL;
         _configuration.master_server = NULL;
         _configuration.master_server_port = CONFIG_DEFAULT_PORT;
     _configuration.master_update_interval = CONFIG_MASTER_UPDATE_INTERVAL;
-	_configuration.base_dir = (char *)strdup(CONFIG_DEFAULT_BASE_DIR);
-	_configuration.log_dir = (char *)strdup(CONFIG_DEFAULT_LOG_DIR);
-	_configuration.access_log = (char *)strdup(CONFIG_DEFAULT_ACCESS_LOG);
-	_configuration.error_log = (char *)strdup(CONFIG_DEFAULT_ERROR_LOG);
+	_configuration.base_dir = CONFIG_DEFAULT_BASE_DIR;
+	_configuration.log_dir = CONFIG_DEFAULT_LOG_DIR;
+	_configuration.access_log = CONFIG_DEFAULT_ACCESS_LOG;
+	_configuration.error_log = CONFIG_DEFAULT_ERROR_LOG;
         _configuration.loglevel = CONFIG_DEFAULT_LOG_LEVEL;
     _configuration.chroot = CONFIG_DEFAULT_CHROOT;
     _configuration.chuid = CONFIG_DEFAULT_CHUID;
@@ -168,10 +178,10 @@
                 if (xmlIsBlankNode(node)) continue;
 
                 if (strcmp(node->name, "location") == 0) {
-			if (_configuration.location) free(_configuration.location);
+			if (_configuration.location && _configuration.location != CONFIG_DEFAULT_LOCATION) xmlFree(_configuration.location);
                         _configuration.location = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "admin") == 0) {
-			if (_configuration.admin) free(_configuration.admin);
+			if (_configuration.admin && _configuration.admin != CONFIG_DEFAULT_ADMIN) xmlFree(_configuration.admin);
                         _configuration.admin = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "source-password") == 0) {
             char *mount, *pass;
@@ -180,21 +190,21 @@
                 /* FIXME: This is a placeholder for per-mount passwords */
             }
             else {
-			    if (_configuration.source_password) free(_configuration.source_password);
+			    if (_configuration.source_password && _configuration.source_password != CONFIG_DEFAULT_SOURCE_PASSWORD) xmlFree(_configuration.source_password);
                             _configuration.source_password = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
             }
                 } else if (strcmp(node->name, "hostname") == 0) {
-			if (_configuration.hostname) free(_configuration.hostname);
+			if (_configuration.hostname && _configuration.hostname != CONFIG_DEFAULT_HOSTNAME) xmlFree(_configuration.hostname);
                         _configuration.hostname = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "port") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.port = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "bind-address") == 0) {
-			if (_configuration.bind_address) free(_configuration.bind_address);
+			if (_configuration.bind_address) xmlFree(_configuration.bind_address);
                         _configuration.bind_address = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "master-server") == 0) {
-			if (_configuration.master_server) free(_configuration.master_server);
+			if (_configuration.master_server) xmlFree(_configuration.master_server);
                         _configuration.master_server = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "master-server-port") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
@@ -227,27 +237,27 @@
                 if (strcmp(node->name, "clients") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.client_limit = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "sources") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.source_limit = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "threadpool") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.threadpool_size = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "client-timeout") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.client_timeout = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "header-timeout") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.header_timeout = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 } else if (strcmp(node->name, "source-timeout") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.source_timeout = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 }
         } while ((node = node->next));
 }
@@ -265,7 +275,7 @@
                 } else if (strcmp(node->name, "touch-freq") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         _configuration.touch_freq = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 }
         } while ((node = node->next));
 }
@@ -277,13 +287,13 @@
                 if (xmlIsBlankNode(node)) continue;
 
                 if (strcmp(node->name, "basedir") == 0) {
-			if (_configuration.base_dir) free(_configuration.base_dir);
+			if (_configuration.base_dir && _configuration.base_dir != CONFIG_DEFAULT_BASE_DIR) xmlFree(_configuration.base_dir);
                         _configuration.base_dir = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "logdir") == 0) {
-			if (_configuration.log_dir) free(_configuration.log_dir);
+			if (_configuration.log_dir && _configuration.log_dir != CONFIG_DEFAULT_LOG_DIR) xmlFree(_configuration.log_dir);
                         _configuration.log_dir = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "webroot") == 0) {
-			if (_configuration.webroot_dir) free(_configuration.webroot_dir);
+			if (_configuration.webroot_dir && _configuration.webroot_dir != CONFIG_DEFAULT_WEBROOT_DIR) xmlFree(_configuration.webroot_dir);
                         _configuration.webroot_dir = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 }
         } while ((node = node->next));
@@ -296,15 +306,15 @@
                 if (xmlIsBlankNode(node)) continue;
 
                 if (strcmp(node->name, "accesslog") == 0) {
-			if (_configuration.access_log) free(_configuration.access_log);
+			if (_configuration.access_log && _configuration.access_log != CONFIG_DEFAULT_ACCESS_LOG) xmlFree(_configuration.access_log);
                         _configuration.access_log = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "errorlog") == 0) {
-			if (_configuration.error_log) free(_configuration.error_log);
+			if (_configuration.error_log && _configuration.error_log != CONFIG_DEFAULT_ERROR_LOG) xmlFree(_configuration.error_log);
                         _configuration.error_log = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                 } else if (strcmp(node->name, "loglevel") == 0) {
            char *tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
            _configuration.loglevel = atoi(tmp);
-           if (tmp) free(tmp);
+           if (tmp) xmlFree(tmp);
         }
         } while ((node = node->next));
 }
@@ -321,7 +331,7 @@
        if (strcmp(node->name, "chroot") == 0) {
            tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
            _configuration.chroot = atoi(tmp);
-           if (tmp) free(tmp);
+           if (tmp) xmlFree(tmp);
        } else if (strcmp(node->name, "changeowner") == 0) {
            _configuration.chuid = 1;
            oldnode = node;
@@ -330,10 +340,10 @@
                if(node == NULL) break;
                if(xmlIsBlankNode(node)) continue;
                if(strcmp(node->name, "user") == 0) {
-                   if(_configuration.user) free(_configuration.user);
+                   if(_configuration.user) xmlFree(_configuration.user);
                    _configuration.user = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                } else if(strcmp(node->name, "group") == 0) {
-                   if(_configuration.group) free(_configuration.group);
+                   if(_configuration.group) xmlFree(_configuration.group);
                    _configuration.group = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                }
            } while((node = node->next));
@@ -363,7 +373,7 @@
                 } else if (strcmp(node->name, "touch-freq") == 0) {
                         tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
                         server->touch_freq = atoi(tmp);
-			if (tmp) free(tmp);
+			if (tmp) xmlFree(tmp);
                 }
                 server->next = NULL;
         } while ((node = node->next));
@@ -382,11 +392,6 @@
                 addnode = 0;
         }
         
-	if (server) {
-		if (server->host) free(server->host);
-		free(server);
-		server = NULL;
-	}
 }
 
 

<p><p>--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'cvs-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the commits mailing list