remove complex malloc-avoidance (bug #4601)
authorKevin P. Fleming <kpfleming@digium.com>
Mon, 11 Jul 2005 21:06:27 +0000 (21:06 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Mon, 11 Jul 2005 21:06:27 +0000 (21:06 +0000)
remove resetting of variables during unload that will only be freed or set to known values on reload

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6085 65c4cc65-6c06-0410-ace0-fbb531ad65f3

cdr/cdr_odbc.c
cdr/cdr_pgsql.c

index 78971d4..c3f2a48 100755 (executable)
@@ -40,7 +40,6 @@ static char *desc = "ODBC CDR Backend";
 static char *name = "ODBC";
 static char *config = "cdr_odbc.conf";
 static char *dsn = NULL, *username = NULL, *password = NULL, *table = NULL;
-static int dsn_alloc = 0, username_alloc = 0, password_alloc = 0, table_alloc = 0;
 static int loguniqueid = 0;
 static int usegmtime = 0;
 static int dispositionstring = 0;
@@ -191,39 +190,27 @@ static int odbc_unload_module(void)
                SQLDisconnect(ODBC_con);
                SQLFreeHandle(SQL_HANDLE_DBC, ODBC_con);
                SQLFreeHandle(SQL_HANDLE_ENV, ODBC_env);
-               connected = 0;
        }
-       if (dsn && dsn_alloc) {
+       if (dsn) {
                if (option_verbose > 10)
                        ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free dsn\n");
                free(dsn);
-               dsn = NULL;
-               dsn_alloc = 0;
        }
-       if (username && username_alloc) {
+       if (username) {
                if (option_verbose > 10)
                        ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free username\n");
                free(username);
-               username = NULL;
-               username_alloc = 0;
        }
-       if (password && password_alloc) {
+       if (password) {
                if (option_verbose > 10)
                        ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free password\n");
                free(password);
-               password = NULL;
-               password_alloc = 0;
        }
-       if (table && table_alloc) {
+       if (table) {
                if (option_verbose > 10)
                        ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free table\n");
                free(table);
-               table = NULL;
-               table_alloc = 0;
        }
-       loguniqueid = 0;
-       usegmtime = 0;
-       dispositionstring = 0;
 
        ast_cdr_unregister(name);
        ast_mutex_unlock(&odbc_lock);
@@ -252,20 +239,15 @@ static int odbc_load_module(void)
        }
 
        tmp = ast_variable_retrieve(cfg,"global","dsn");
-       if (tmp) {
-               dsn = malloc(strlen(tmp) + 1);
-               if (dsn != NULL) {
-                       memset(dsn, 0, strlen(tmp) + 1);
-                       dsn_alloc = 1;
-                       strncpy(dsn, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
-                       res = -1;
-                       goto out;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"cdr_odbc: dsn not specified.  Assuming asteriskdb\n");
-               dsn = "asteriskdb";
+               tmp = "asteriskdb";
+       }
+       dsn = strdup(tmp);
+       if (dsn == NULL) {
+               ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
+               res = -1;
+               goto out;
        }
 
        tmp = ast_variable_retrieve(cfg,"global","dispositionstring");
@@ -277,12 +259,8 @@ static int odbc_load_module(void)
                
        tmp = ast_variable_retrieve(cfg,"global","username");
        if (tmp) {
-               username = malloc(strlen(tmp) + 1);
-               if (username != NULL) {
-                       memset(username, 0, strlen(tmp) + 1);
-                       username_alloc = 1;
-                       strncpy(username, tmp, strlen(tmp));
-               } else {
+               username = strdup(tmp);
+               if (username == NULL) {
                        ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
                        res = -1;
                        goto out;
@@ -291,12 +269,8 @@ static int odbc_load_module(void)
 
        tmp = ast_variable_retrieve(cfg,"global","password");
        if (tmp) {
-               password = malloc(strlen(tmp) + 1);
-               if (password != NULL) {
-                       memset(password, 0, strlen(tmp) + 1);
-                       password_alloc = 1;
-                       strncpy(password, tmp, strlen(tmp));
-               } else {
+               password = strdup(tmp);
+               if (password == NULL) {
                        ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
                        res = -1;
                        goto out;
@@ -330,20 +304,15 @@ static int odbc_load_module(void)
        }
 
        tmp = ast_variable_retrieve(cfg,"global","table");
-       if (tmp) {
-               table = malloc(strlen(tmp) + 1);
-               if (table != NULL) {
-                       memset(table, 0, strlen(tmp) + 1);
-                       table_alloc = 1;
-                       strncpy(table, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
-                       res = -1;
-                       goto out;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"cdr_odbc: table not specified.  Assuming cdr\n");
-               table = "cdr";
+               tmp = "cdr";
+       }
+       table = strdup(tmp);
+       if (table == NULL) {
+               ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
+               res = -1;
+               goto out;
        }
 
        ast_config_destroy(cfg);
@@ -437,6 +406,7 @@ static int odbc_init(void)
                SQLSetConnectAttr(ODBC_con, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)10, 0);    
        }
 
+       /* XXX note username and password could be NULL here */
        ODBC_res = SQLConnect(ODBC_con, (SQLCHAR*)dsn, SQL_NTS, (SQLCHAR*)username, SQL_NTS, (SQLCHAR*)password, SQL_NTS);
 
        if ((ODBC_res != SQL_SUCCESS) && (ODBC_res != SQL_SUCCESS_WITH_INFO)) {
index 99828ea..cfba0cb 100755 (executable)
@@ -42,7 +42,6 @@ static char *desc = "PostgreSQL CDR Backend";
 static char *name = "pgsql";
 static char *config = "cdr_pgsql.conf";
 static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword = NULL, *pgdbsock = NULL, *pgdbport = NULL, *table = NULL;
-static int hostname_alloc = 0, dbname_alloc = 0, dbuser_alloc = 0, password_alloc = 0, dbsock_alloc = 0, dbport_alloc = 0, table_alloc = 0;
 static int connected = 0;
 
 AST_MUTEX_DEFINE_STATIC(pgsql_lock);
@@ -166,43 +165,20 @@ static int my_unload_module(void)
 { 
        if (conn)
                PQfinish(conn);
-       conn = NULL;
-       connected = 0;
-       if (pghostname && hostname_alloc) {
+       if (pghostname)
                free(pghostname);
-               pghostname = NULL;
-               hostname_alloc = 0;
-       }
-       if (pgdbname && dbname_alloc) {
+       if (pgdbname)
                free(pgdbname);
-               pgdbname = NULL;
-               dbname_alloc = 0;
-       }
-       if (pgdbuser && dbuser_alloc) {
+       if (pgdbuser)
                free(pgdbuser);
-               pgdbuser = NULL;
-               dbuser_alloc = 0;
-       }
-       if (pgdbsock && dbsock_alloc) {
+       if (pgdbsock)
                free(pgdbsock);
-               pgdbsock = NULL;
-               dbsock_alloc = 0;
-       }
-       if (pgpassword && password_alloc) {
+       if (pgpassword)
                free(pgpassword);
-               pgpassword = NULL;
-               password_alloc = 0;
-       }
-       if (pgdbport && dbport_alloc) {
+       if (pgdbport)
                free(pgdbport);
-               pgdbport = NULL;
-               dbport_alloc = 0;
-       }
-       if (table && table_alloc) {
+       if (table)
                free(table);
-               table = NULL;
-               table_alloc = 0;
-       }
        ast_cdr_unregister(name);
        return 0;
 }
@@ -221,99 +197,69 @@ static int process_my_load_module(struct ast_config *cfg)
        }
 
        tmp = ast_variable_retrieve(cfg,"global","hostname");
-       if (tmp) {
-               pghostname = malloc(strlen(tmp) + 1);
-               if (pghostname != NULL) {
-                       memset(pghostname, 0, strlen(tmp) + 1);
-                       hostname_alloc = 1;
-                       strncpy(pghostname, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"PostgreSQL server hostname not specified.  Assuming localhost\n");
-               pghostname = "localhost";
+               tmp = "localhost";
+       }
+       pghostname = strdup(tmp);
+       if (pghostname == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
 
        tmp = ast_variable_retrieve(cfg,"global","dbname");
-       if (tmp) {
-               pgdbname = malloc(strlen(tmp) + 1);
-               if (pgdbname != NULL) {
-                       memset(pgdbname, 0, strlen(tmp) + 1);
-                       dbname_alloc = 1;
-                       strncpy(pgdbname, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"PostgreSQL database not specified.  Assuming asterisk\n");
-               pgdbname = "asteriskcdrdb";
+               tmp = "asteriskcdrdb";
+       }
+       pgdbname = strdup(tmp);
+       if (pgdbname == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
 
        tmp = ast_variable_retrieve(cfg,"global","user");
-       if (tmp) {
-               pgdbuser = malloc(strlen(tmp) + 1);
-               if (pgdbuser != NULL) {
-                       memset(pgdbuser, 0, strlen(tmp) + 1);
-                       dbuser_alloc = 1;
-                       strncpy(pgdbuser, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"PostgreSQL database user not specified.  Assuming root\n");
-               pgdbuser = "root";
+               tmp = "root";
+       }
+       pgdbuser = strdup(tmp);
+       if (pgdbuser == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
 
        tmp = ast_variable_retrieve(cfg,"global","password");
-       if (tmp) {
-               pgpassword = malloc(strlen(tmp) + 1);
-               if (pgpassword != NULL) {
-                       memset(pgpassword, 0, strlen(tmp) + 1);
-                       password_alloc = 1;
-                       strncpy(pgpassword, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"PostgreSQL database password not specified.  Assuming blank\n");
-               pgpassword = "";
+               tmp = "";
+       }
+       pgpassword = strdup(tmp);
+       if (pgpassword == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
 
        tmp = ast_variable_retrieve(cfg,"global","port");
-       if (tmp) {
-               pgdbport = malloc(strlen(tmp) + 1);
-               if (pgdbport != NULL) {
-                       memset(pgdbport, 0, strlen(tmp) + 1);
-                       dbport_alloc = 1;
-                       strncpy(pgdbport, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"PostgreSQL database port not specified.  Using default 5432.\n");
-               pgdbport = "5432";
+               tmp = "5432";
+       }
+       pgdbport = strdup(tmp);
+       if (pgdbport == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
-        /* Loading stuff for table name */
+
        tmp = ast_variable_retrieve(cfg,"global","table");
-       if (tmp) {
-               table = malloc(strlen(tmp) + 1);
-               if (table != NULL) {
-                       memset(table, 0, strlen(tmp) + 1);
-                       table_alloc = 1;
-                       strncpy(table, tmp, strlen(tmp));
-               } else {
-                       ast_log(LOG_ERROR,"Out of memory error.\n");
-                       return -1;
-               }
-       } else {
+       if (tmp == NULL) {
                ast_log(LOG_WARNING,"CDR table not specified.  Assuming cdr\n");
-               table = "cdr";
+               tmp = "cdr";
+       }
+       table = strdup(tmp);
+       if (table == NULL) {
+               ast_log(LOG_ERROR,"Out of memory error.\n");
+               return -1;
        }
 
        ast_log(LOG_DEBUG,"cdr_pgsql: got hostname of %s\n",pghostname);