rem: ** str = aug_strdup(string, CON_SQLURL(_h))
context: static int connect_db(db_con_t* _h, const char* _db_url){	char* user, *password, *host, *port, *database;	if(! _h)	{		PLOG("connect_db", "must pass db_con_t!");		return(-1);	}	if(CON_CONNECTED(_h))	{		DLOG("connect_db", "disconnect first!");		disconnect_db(_h);	}	/*	** CON_CONNECTED(_h) is now 0, set by disconnect_db()	*/	/*	** Note :	** Make a scratch pad copy of given SQL URL.	** all memory allocated to this connection is rooted	** from this.	** This is an important concept.	** as long as you always allocate memory using the function:	** mem = aug_alloc(size, CON_SQLURL(_h)) or	** str = aug_strdup(string, CON_SQLURL(_h))	** where size is the amount of memory, then in the future	** when CON_SQLURL(_h) is freed (in the function disconnect_db())	** all other memory allocated in this manner is freed.	** this will keep memory leaks from happening.	*/	CON_SQLURL(_h) = aug_strdup((char *) _db_url, (char *) _h);	/*	** get the connection parameters parsed from the db_url string	** it looks like: postgres://username:userpass@dbhost:dbport/dbname	** username/userpass : name and password for the database	** dbhost :            the host name or ip address hosting the database	** dbport :            the port to connect to database on	** dbname :            the name of the database	*/	if(parse_sql_url(CON_SQLURL(_h),		&user,&password,&host,&port,&database) < 0)	{		char buf[256];		sprintf(buf, "Error while parsing %s", _db_url);		PLOG("connect_db", buf);		aug_free(CON_SQLURL(_h));		return -3;	}	/*	** finally, actually connect to the database	*/	CON_CONNECTION(_h) =		PQsetdbLogin(host,port,NULL,NULL,database,user, password);	if(CON_CONNECTION(_h) == 0	    || PQstatus(CON_CONNECTION(_h)) != CONNECTION_OK)	{		PLOG("connect_db", PQerrorMessage(CON_CONNECTION(_h)));		PQfinish(CON_CONNECTION(_h));		aug_free(CON_SQLURL(_h));		return -4;	}	CON_PID(_h) = getpid();	/*	** all is well, database was connected, we can now submit_query's	*/	CON_CONNECTED(_h) = 1;	return 0;}