diff options
Diffstat (limited to 'src/pgsql.c')
-rw-r--r-- | src/pgsql.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/pgsql.c b/src/pgsql.c index 011a4b7..398cacc 100644 --- a/src/pgsql.c +++ b/src/pgsql.c @@ -38,26 +38,49 @@ s_pgsql_free(struct sql_connect *conn) } static SCM -s_pgsql_connect (const char *hostname, int port, - const char *dbname, const char *user, const char *pass, - const char *why) +s_pgsql_connect (SCM parmlist, const char *func_name) { + char *hostname = NULL; + char *port = NULL; + char *dbname = NULL; + char *user = NULL; + char *pass = NULL; + struct gamma_parmdcl dcltab[] = { + { "iface", NULL, NULL }, + { "host", &hostname, gamma_cvt_string }, + { "port", &port, gamma_cvt_string }, + { "db", &dbname, gamma_cvt_string }, + { "user", &user, gamma_cvt_string }, + { "pass", &pass, gamma_cvt_string }, + { NULL } + }; + PGconn *pgconn; - char buf[24]; SCM smob; struct sql_connect *conn; - snprintf(buf, sizeof buf, "%d", port); - pgconn = PQsetdbLogin(hostname, buf, NULL, NULL, dbname, user, pass); + pgconn = PQsetdbLogin(hostname, port, NULL, NULL, dbname, user, pass); + if (PQstatus(pgconn) == CONNECTION_BAD) { - SCM args = scm_list_2(scm_makfrom0str("Cannot connect to the database"), - scm_makfrom0str(PQerrorMessage(pgconn))); + SCM args; + + free(hostname); + free(port); + free(user); + free(pass); + + args = scm_list_2(scm_makfrom0str("Cannot connect to the database"), + scm_makfrom0str(PQerrorMessage(pgconn))); PQfinish(pgconn); scm_throw(gsql_error, args); } smob = sql_connect_create("pgsql"); conn = (struct sql_connect *)SCM_CDR(smob); + conn->hostname = hostname; + conn->port = atoi (port); + conn->username = user; + conn->database = dbname; conn->data = pgconn; return smob; } |