/[LeafOK_CVS]/pvpgn-1.7.4/src/bnetd/sql_mysql.c
ViewVC logotype

Annotation of /pvpgn-1.7.4/src/bnetd/sql_mysql.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Tue Jun 6 03:41:37 2006 UTC (19 years, 9 months ago) by sysadm
Branch: GNU, MAIN
CVS Tags: pvpgn_1-7-4-0_MIL, arelease, HEAD
Changes since 1.1: +0 -0 lines
Content type: text/x-csrc
no message

1 sysadm 1.1 /*
2     * Copyright (C) 2002,2003 Mihai RUSU (dizzy@rdsnet.ro)
3     *
4     * This program is free software; you can redistribute it and/or
5     * modify it under the terms of the GNU General Public License
6     * as published by the Free Software Foundation; either version 2
7     * of the License, or (at your option) any later version.
8     *
9     * This program is distributed in the hope that it will be useful,
10     * but WITHOUT ANY WARRANTY; without even the implied warranty of
11     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     * GNU General Public License for more details.
13     *
14     * You should have received a copy of the GNU General Public License
15     * along with this program; if not, write to the Free Software
16     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17     */
18    
19     #ifdef WITH_SQL_MYSQL
20     #include "common/setup_before.h"
21     #ifdef WIN32
22     #include <windows.h>
23     #include <mysql/mysql.h>
24     #else
25     #include <mysql.h>
26     #endif
27     #include <stdlib.h>
28     #include "common/eventlog.h"
29     #include "common/xalloc.h"
30     #include "storage_sql.h"
31     #include "sql_mysql.h"
32     #include "common/setup_after.h"
33    
34     static int sql_mysql_init(const char *, const char *, const char *, const char *, const char *, const char *);
35     static int sql_mysql_close(void);
36     static t_sql_res * sql_mysql_query_res(const char *);
37     static int sql_mysql_query(const char *);
38     static t_sql_row * sql_mysql_fetch_row(t_sql_res *);
39     static void sql_mysql_free_result(t_sql_res *);
40     static unsigned int sql_mysql_num_rows(t_sql_res *);
41     static unsigned int sql_mysql_num_fields(t_sql_res *);
42     static unsigned int sql_mysql_affected_rows(void);
43     static t_sql_field * sql_mysql_fetch_fields(t_sql_res *);
44     static int sql_mysql_free_fields(t_sql_field *);
45     static void sql_mysql_escape_string(char *, const char *, int);
46    
47     t_sql_engine sql_mysql = {
48     sql_mysql_init,
49     sql_mysql_close,
50     sql_mysql_query_res,
51     sql_mysql_query,
52     sql_mysql_fetch_row,
53     sql_mysql_free_result,
54     sql_mysql_num_rows,
55     sql_mysql_num_fields,
56     sql_mysql_affected_rows,
57     sql_mysql_fetch_fields,
58     sql_mysql_free_fields,
59     sql_mysql_escape_string
60     };
61    
62     static MYSQL *mysql = NULL;
63    
64     static int sql_mysql_init(const char *host, const char *port, const char *socket, const char *name, const char *user, const char *pass)
65     {
66     if (name == NULL || user == NULL) {
67     eventlog(eventlog_level_error, __FUNCTION__, "got NULL parameter");
68     return -1;
69     }
70    
71     if ((mysql = mysql_init(NULL)) == NULL) {
72     eventlog(eventlog_level_error, __FUNCTION__, "got error from mysql_init");
73     return -1;
74     }
75    
76     if (mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) {
77     eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
78     mysql_close(mysql);
79     return -1;
80     }
81    
82     return 0;
83     }
84    
85     static int sql_mysql_close(void)
86     {
87     if (mysql) {
88     mysql_close(mysql);
89     mysql = NULL;
90     }
91    
92     return 0;
93     }
94    
95     static t_sql_res * sql_mysql_query_res(const char * query)
96     {
97     t_sql_res *res;
98    
99     if (mysql == NULL) {
100     eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
101     return NULL;
102     }
103    
104     if (query == NULL) {
105     eventlog(eventlog_level_error, __FUNCTION__, "got NULL query");
106     return NULL;
107     }
108    
109     if (mysql_query(mysql, query)) {
110     // eventlog(eventlog_level_debug, __FUNCTION__, "got error from query (%s)", query);
111     return NULL;
112     }
113    
114     res = mysql_store_result(mysql);
115     if (res == NULL) {
116     eventlog(eventlog_level_error, __FUNCTION__, "got error from store result");
117     return NULL;
118     }
119    
120     return res;
121     }
122    
123     static int sql_mysql_query(const char * query)
124     {
125     if (mysql == NULL) {
126     eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
127     return -1;
128     }
129    
130     if (query == NULL) {
131     eventlog(eventlog_level_error, __FUNCTION__, "got NULL query");
132     return -1;
133     }
134    
135     return mysql_query(mysql, query) == 0 ? 0 : -1;
136     }
137    
138     static t_sql_row * sql_mysql_fetch_row(t_sql_res *result)
139     {
140     if (result == NULL) {
141     eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
142     return NULL;
143     }
144    
145     return mysql_fetch_row((MYSQL_RES *)result);
146     }
147    
148     static void sql_mysql_free_result(t_sql_res *result)
149     {
150     if (result == NULL) {
151     eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
152     return;
153     }
154    
155     mysql_free_result((MYSQL_RES *)result);
156     }
157    
158     static unsigned int sql_mysql_num_rows(t_sql_res *result)
159     {
160     if (result == NULL) {
161     eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
162     return 0;
163     }
164    
165     return mysql_num_rows((MYSQL_RES *)result);
166     }
167    
168     static unsigned int sql_mysql_num_fields(t_sql_res *result)
169     {
170     if (result == NULL) {
171     eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
172     return 0;
173     }
174    
175     return mysql_num_fields((MYSQL_RES *)result);
176     }
177    
178     static unsigned int sql_mysql_affected_rows(void)
179     {
180     return mysql_affected_rows(mysql);
181     }
182    
183     static t_sql_field * sql_mysql_fetch_fields(t_sql_res *result)
184     {
185     MYSQL_FIELD *fields;
186     unsigned fieldno, i;
187     t_sql_field *rfields;
188    
189     if (result == NULL) {
190     eventlog(eventlog_level_error, __FUNCTION__, "got NULL result");
191     return NULL;
192     }
193    
194     fieldno = mysql_num_fields((MYSQL_RES *)result);
195     fields = mysql_fetch_fields((MYSQL_RES *)result);
196    
197     rfields = xmalloc(sizeof(t_sql_field) * (fieldno + 1));
198     for(i = 0; i < fieldno; i++)
199     rfields[i] = fields[i].name;
200     rfields[i] = NULL;
201    
202     return rfields;
203     }
204    
205     static int sql_mysql_free_fields(t_sql_field *fields)
206     {
207     if (fields == NULL) {
208     eventlog(eventlog_level_error, __FUNCTION__, "got NULL fields");
209     return -1;
210     }
211    
212     xfree((void*)fields);
213     return 0; /* mysql_free_result() should free the rest properly */
214     }
215    
216     static void sql_mysql_escape_string(char *escape, const char *from, int len)
217     {
218     if (mysql == NULL) {
219     eventlog(eventlog_level_error, __FUNCTION__, "mysql driver not initilized");
220     return;
221     }
222     mysql_real_escape_string(mysql, escape, from, len);
223     }
224    
225     #endif /* WITH_SQL_MYSQL */

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1