diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/.cvsignore | 3 | ||||
-rw-r--r-- | src/Makefile.am | 17 | ||||
-rw-r--r-- | src/app.h | 13 | ||||
-rw-r--r-- | src/gettext.scm | 29 | ||||
-rw-r--r-- | src/gsql_conn.c | 78 | ||||
-rw-r--r-- | src/gsql_lib.c | 29 | ||||
-rw-r--r-- | src/guile-sql.h | 22 | ||||
-rw-r--r-- | src/mysql.c | 46 | ||||
-rw-r--r-- | src/pgsql.c | 44 |
9 files changed, 133 insertions, 148 deletions
diff --git a/src/.cvsignore b/src/.cvsignore index cff4dcc..822742d 100644 --- a/src/.cvsignore +++ b/src/.cvsignore @@ -10,6 +10,3 @@ guile-procedures.txt gsql_conn.inc gsql_lib.inc sql.scm -gettext.inc -gettext.scm - diff --git a/src/Makefile.am b/src/Makefile.am index 8b44d37..c5d713b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ # This file is part of guile-sql. -# Copyright (C) 2002, Sergey Poznyakoff +# Copyright (C) 2002, 2007, Sergey Poznyakoff # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without @@ -12,9 +12,8 @@ INCLUDES =-I$(top_builddir) -I$(srcdir) -I. @GUILE_INCLUDES@ @INCLUDEPATH@ LIB_SQL=libguile-sql.la -LIB_GETTEXT=libguile-gettext.la -EXTRA_LTLIBRARIES=libguile-sql.la libguile-gettext.la +EXTRA_LTLIBRARIES=libguile-sql.la lib_LTLIBRARIES=@BUILD_LIBS@ libguile_sql_la_LIBADD = @LTLIBOBJS@ @GUILE_LIBS@ @@ -24,27 +23,19 @@ libguile_sql_la_SOURCES=\ libguile_sql_la_LDFLAGS = -rpath $(libdir) -version-info 0:0:0 -libguile_gettext_la_LIBADD = @GUILE_LIBS@ @LTLIBINTL@ -libguile_gettext_la_SOURCES = gettext.c - -libguile_gettext_la_LDFLAGS = -rpath $(libdir) -version-info 0:0:0 - - -noinst_HEADERS=guile-sql.h app.h gettext.h -EXTRA_DIST=sql.sci gettext.sci +noinst_HEADERS=guile-sql.h app.h +EXTRA_DIST=sql.sci gettext.scm .sci.scm: m4 -DVERSION=$(VERSION) -DLIBDIR=$(libdir) \ -DBUILDDIR="`pwd`" $< > $@ sql.scm: Makefile $(libguile_sql_la_SOURCES:.c=.inc) -gettext.scm: Makefile $(libguile_gettext_la_SOURCES:.c=.inc) SCM_SQL=sql.scm X_SQL=gsql_conn.x SCM_GETTEXT=gettext.scm -X_GETTEXT=gettext.x guiledir=$(GUILE_SITE)/$(PACKAGE) guile_DATA=guile-procedures.txt @BUILD_DATA@ @@ -1,19 +1,18 @@ /* This file is part of guile-sql. Copyright (C) 2002 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef USE_SQL_MYSQL extern struct sql_iface mysql_iface; diff --git a/src/gettext.scm b/src/gettext.scm new file mode 100644 index 0000000..a60bd59 --- /dev/null +++ b/src/gettext.scm @@ -0,0 +1,29 @@ +;;;; This file is part of gettext interface for guile. +;;;; Copyright (C) 2004, 2007 Sergey Poznyakoff +;;;; +;;;; This program is free software; you can redistribute it and/or modify it +;;;; under the terms of the GNU General Public License as published by the +;;;; Free Software Foundation; either version 3 of the License, or (at your +;;;; option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License along +;;;; with this program. If not, see <http://www.gnu.org/licenses/>. + + +(define-module (gamma gettext)) + +(define (_ msgid) + (gettext msgid)) + +(define (N_ msgid) + msgid) + +(export _) +(export N_) + +;;;; EOF diff --git a/src/gsql_conn.c b/src/gsql_conn.c index 3a44c18..4a78094 100644 --- a/src/gsql_conn.c +++ b/src/gsql_conn.c @@ -1,19 +1,18 @@ /* This file is part of guile-sql. Copyright (C) 2002, 2005 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -21,14 +20,14 @@ #include <string.h> #include <guile-sql.h> #include <app.h> +#include <stdio.h> static int num_iface; -struct sql_iface sql_iftab[MAX_IFACES]; +static struct sql_iface sql_iftab[MAX_IFACES]; SCM_GLOBAL_SYMBOL (gsql_error, "gsql-error"); - -long sql_connect_tag; +static long sql_connect_tag = -1; /* SMOB functions: */ static SCM @@ -50,7 +49,7 @@ sql_connect_free (SCM connect_smob) free(conn->username); if (conn->database) free(conn->database); - free(conn); + scm_gc_free(conn, sizeof *conn, "SQL connection"); return size; } @@ -76,8 +75,8 @@ sql_connect_print (SCM connect_smob, SCM port, scm_print_state * pstate) return 1; } -int -sql_find_iface(char *name) +static int +sql_find_iface(const char *name) { int iface; @@ -95,15 +94,15 @@ sql_connect_create (char *name) if (iface < 0) scm_misc_error("sql_connect_create", "Unknown SQL interface ~S", - SCM_LIST1(scm_makfrom0str(name))); + scm_list_1(scm_makfrom0str(name))); - conn = scm_must_malloc (sizeof (*conn), "sql_connect"); + conn = scm_gc_malloc (sizeof (*conn), "sql_connect"); memset(conn, 0, sizeof *conn); conn->iface = iface; SCM_RETURN_NEWSMOB (sql_connect_tag, conn); } -int +static int scm_is_sql_connect (SCM scm) { return SCM_NIMP (scm) && SCM_CAR (scm) == (SCM) sql_connect_tag; @@ -117,18 +116,18 @@ SCM_DEFINE (sql_connect, "sql-connect", 5, 1, 0, #define FUNC_NAME s_sql_connect { SCM smob; - char *hostname; + const char *hostname; int port; - char *dbname; - char *user; - char *pass; + const char *dbname; + const char *user; + const char *pass; int iface; struct sql_connect *conn; - if (SCM_IMP(IFACE) && SCM_INUMP(IFACE)) - iface = SCM_INUM(IFACE); - else if (SCM_STRINGP(IFACE)) - iface = sql_find_iface(SCM_CHARS(IFACE)); + if (scm_is_integer(IFACE)) + iface = scm_to_int(IFACE); + else if (scm_is_string(IFACE)) + iface = sql_find_iface(scm_i_string_chars(IFACE)); else { SCM_ASSERT(IFACE == SCM_BOOL_T || IFACE == SCM_BOOL_F, IFACE, SCM_ARG1, FUNC_NAME); @@ -137,26 +136,25 @@ SCM_DEFINE (sql_connect, "sql-connect", 5, 1, 0, if (iface < 0 || iface >= num_iface) scm_misc_error(FUNC_NAME, "Argument ~S (~S) out of range", - SCM_LIST2(SCM_MAKINUM(1), + scm_list_2(scm_from_int(1), IFACE)); - SCM_ASSERT(SCM_STRINGP(HOST), HOST, SCM_ARG1, FUNC_NAME); - hostname = SCM_ROCHARS(HOST); + SCM_ASSERT(scm_is_string(HOST), HOST, SCM_ARG1, FUNC_NAME); + hostname = scm_i_string_chars(HOST); - SCM_ASSERT(SCM_IMP(PORT) && SCM_INUMP(PORT), - PORT, SCM_ARG2, FUNC_NAME); - port = SCM_INUM(PORT); + SCM_ASSERT(scm_is_number(PORT), PORT, SCM_ARG2, FUNC_NAME); + port = scm_to_int(PORT); - SCM_ASSERT(SCM_STRINGP(DB), DB, SCM_ARG3, FUNC_NAME); - dbname = SCM_ROCHARS(DB); + SCM_ASSERT(scm_is_string(DB), DB, SCM_ARG3, FUNC_NAME); + dbname = scm_i_string_chars(DB); - SCM_ASSERT(SCM_STRINGP(USER), USER, SCM_ARG4, FUNC_NAME); - user = SCM_ROCHARS(USER); + SCM_ASSERT(scm_is_string(USER), USER, SCM_ARG4, FUNC_NAME); + user = scm_i_string_chars(USER); if (SCM_UNBNDP(PASS)) pass = NULL; - else if (SCM_STRINGP(USER)) - pass = SCM_ROCHARS(PASS); + else if (scm_is_string(USER)) + pass = scm_i_string_chars(PASS); smob = sql_iftab[iface].connect(hostname, port, dbname, user, pass, @@ -192,12 +190,12 @@ SCM_DEFINE (sql_query, "sql-query", 2, 0, 0, { struct sql_connect *conn; void *ptr; - char *query; + const char *query; SCM_ASSERT(scm_is_sql_connect(CONN), CONN, SCM_ARG1, FUNC_NAME); - SCM_ASSERT(SCM_STRINGP(QUERY), QUERY, SCM_ARG2, FUNC_NAME); + SCM_ASSERT(scm_is_string(QUERY), QUERY, SCM_ARG2, FUNC_NAME); conn = (struct sql_connect *)SCM_CDR(CONN); - query = SCM_ROCHARS(QUERY); + query = scm_i_string_chars(QUERY); return sql_iftab[conn->iface].query(conn, query); } #undef FUNC_NAME @@ -220,11 +218,13 @@ sql_register_iface(struct sql_iface *ifp) void gsql_conn_init() { + if (sql_connect_tag == -1) { sql_connect_tag = scm_make_smob_type ("sql_connect", sizeof (struct sql_connect)); scm_set_smob_mark (sql_connect_tag, sql_connect_mark); scm_set_smob_free (sql_connect_tag, sql_connect_free); scm_set_smob_print (sql_connect_tag, sql_connect_print); + } #ifndef SCM_MAGIC_SNARFER # include <gsql_conn.x> #endif diff --git a/src/gsql_lib.c b/src/gsql_lib.c index c988b2e..a6103b2 100644 --- a/src/gsql_lib.c +++ b/src/gsql_lib.c @@ -1,19 +1,18 @@ /* This file is part of guile-sql. Copyright (C) 2002 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -26,7 +25,7 @@ scm_makenum (unsigned long val) #ifndef HAVE_SCM_LONG2NUM { if (SCM_FIXABLE ((long) val)) - return SCM_MAKINUM (val); + return scm_from_int (val); #ifdef SCM_BIGDIG return scm_i_long2big (val); @@ -40,20 +39,6 @@ scm_makenum (unsigned long val) } #endif -/* - * Chop off trailing whitespace. Return length of the resulting string - */ -int -chop(char *str) -{ - int len; - - for (len = strlen(str); len > 0 && isspace(str[len-1]); len--) - ; - str[len] = 0; - return len; -} - extern void sql_init() { diff --git a/src/guile-sql.h b/src/guile-sql.h index 5203123..154b322 100644 --- a/src/guile-sql.h +++ b/src/guile-sql.h @@ -1,19 +1,18 @@ /* This file is part of guile-sql. - Copyright (C) 2002 Sergey Poznyakoff + Copyright (C) 2002, 2007 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/socket.h> #include <netinet/in.h> @@ -41,10 +40,11 @@ struct sql_iface { char *name; SCM (*mark) (struct sql_connect *); scm_sizet (*free) (struct sql_connect *); - SCM (*connect) (char *hostname, int port, - char *dbname, char *user, char *pass, const char *why); + SCM (*connect) (const char *hostname, int port, + const char *dbname, const char *user, + const char *pass, const char *why); void (*close) (struct sql_connect *); - SCM (*query) (struct sql_connect *, char *query); + SCM (*query) (struct sql_connect *, const char *query); }; extern struct sql_iface sql_iftab[]; diff --git a/src/mysql.c b/src/mysql.c index d788a92..ac7e0f7 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -1,19 +1,18 @@ /* This file is part of guile-sql. Copyright (C) 2002, 2004, 2005 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -22,13 +21,13 @@ #include <guile-sql.h> #include <mysql/mysql.h> -SCM +static SCM s_mysql_mark(struct sql_connect *conn) { return SCM_BOOL_F; } -scm_sizet +static scm_sizet s_mysql_free(struct sql_connect *conn) { MYSQL *mysql = (MYSQL*) conn->data; @@ -38,14 +37,15 @@ s_mysql_free(struct sql_connect *conn) return sizeof(MYSQL); } -SCM -s_mysql_connect (char *hostname, int port, - char *dbname, char *user, char *pass, const char *why) +static SCM +s_mysql_connect (const char *hostname, int port, + const char *dbname, const char *user, const char *pass, + const char *why) { MYSQL *mysql; SCM smob; struct sql_connect *conn; - char *socket_path = NULL; + const char *socket_path = NULL; mysql = mysql_init(NULL); if (!mysql) @@ -72,8 +72,8 @@ s_mysql_connect (char *hostname, int port, return smob; } -SCM -s_mysql_query(struct sql_connect *conn, char *query) +static SCM +s_mysql_query(struct sql_connect *conn, const char *query) { MYSQL *mysql = conn->data; MYSQL_RES *result; @@ -99,9 +99,8 @@ s_mysql_query(struct sql_connect *conn, char *query) if (!row) break; for (j = 0; j < nfields; j++) { - SCM new_elt; - SCM_NEWCELL(new_elt); - SCM_SETCAR(new_elt, scm_makfrom0str(row[j])); + SCM new_elt = scm_cons(scm_makfrom0str(row[j]), + SCM_EOL); if (head == SCM_EOL) head = new_elt; else @@ -109,20 +108,13 @@ s_mysql_query(struct sql_connect *conn, char *query) tail = new_elt; } - if (head != SCM_EOL) - SCM_SETCDR(tail, SCM_EOL); - - SCM_NEWCELL(new_row); - SCM_SETCAR(new_row, head); - + new_row = scm_cons(head, SCM_EOL); if (row_head == SCM_EOL) row_head = new_row; else SCM_SETCDR(row_tail, new_row); row_tail = new_row; } - if (row_head != SCM_EOL) - SCM_SETCDR(row_tail, SCM_EOL); cell = row_head; mysql_free_result(result); } else { /* should it have returned something? */ @@ -137,7 +129,7 @@ s_mysql_query(struct sql_connect *conn, char *query) return cell; } -void +static void s_mysql_close(struct sql_connect *conn) { if (conn->data) diff --git a/src/pgsql.c b/src/pgsql.c index 44b1fa6..011a4b7 100644 --- a/src/pgsql.c +++ b/src/pgsql.c @@ -1,19 +1,18 @@ /* This file is part of guile-sql. Copyright (C) 2002 Sergey Poznyakoff - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ + You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> @@ -22,13 +21,13 @@ #include <guile-sql.h> #include <libpq-fe.h> -SCM +static SCM s_pgsql_mark(struct sql_connect *conn) { return SCM_BOOL_F; } -scm_sizet +static scm_sizet s_pgsql_free(struct sql_connect *conn) { PGconn *pgconn = (PGconn*) conn->data; @@ -38,9 +37,10 @@ s_pgsql_free(struct sql_connect *conn) return sizeof(pgconn); } -SCM -s_pgsql_connect (char *hostname, int port, - char *dbname, char *user, char *pass, const char *why) +static SCM +s_pgsql_connect (const char *hostname, int port, + const char *dbname, const char *user, const char *pass, + const char *why) { PGconn *pgconn; char buf[24]; @@ -62,7 +62,7 @@ s_pgsql_connect (char *hostname, int port, return smob; } -SCM +static SCM result_to_list(PGresult *res) { int i, j; @@ -75,10 +75,8 @@ result_to_list(PGresult *res) SCM head = SCM_EOL, tail; for (j = 0; j < nfields; j++) { - SCM new_elt; char *val = PQgetvalue(res, i, j); - SCM_NEWCELL(new_elt); - SCM_SETCAR(new_elt, scm_makfrom0str(val)); + SCM new_elt = scm_cons(scm_makfrom0str(val), SCM_EOL); if (head == SCM_EOL) head = new_elt; else @@ -86,11 +84,7 @@ result_to_list(PGresult *res) tail = new_elt; } - if (head != SCM_EOL) - SCM_SETCDR(tail, SCM_EOL); - - SCM_NEWCELL(new_row); - SCM_SETCAR(new_row, head); + new_row = scm_cons(head, SCM_EOL); if (row_head == SCM_EOL) row_head = new_row; @@ -98,13 +92,11 @@ result_to_list(PGresult *res) SCM_SETCDR(row_tail, new_row); row_tail = new_row; } - if (row_head != SCM_EOL) - SCM_SETCDR(row_tail, SCM_EOL); return row_head; } -SCM -s_pgsql_query(struct sql_connect *conn, char *query) +static SCM +s_pgsql_query(struct sql_connect *conn, const char *query) { PGconn *pgconn = (PGconn*) conn->data; PGresult *res; @@ -137,7 +129,7 @@ s_pgsql_query(struct sql_connect *conn, char *query) return cell; } -void +static void s_pgsql_close(struct sql_connect *conn) { PGconn *pgconn = (PGconn*) conn->data; |