aboutsummaryrefslogtreecommitdiff
path: root/src/pgsql.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pgsql.c')
-rw-r--r--src/pgsql.c39
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;
}

Return to:

Send suggestions and report system problems to the System administrator.