mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-01 20:13:43 +02:00
160 lines
6.0 KiB
ObjectPascal
160 lines
6.0 KiB
ObjectPascal
{
|
|
Contains the MySQL_com functions calls
|
|
|
|
Call InitialiseMysql4_com before using any of the calls, and call ReleaseMysql4_com
|
|
when finished.
|
|
}
|
|
unit mysql4_comdyn;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses dynlibs, sysutils;
|
|
|
|
{$PACKRECORDS C}
|
|
|
|
const
|
|
Mysqllib = 'libmysqlclient.so';
|
|
|
|
{$i mysql4_comtypes.inc}
|
|
|
|
{ Copyright (C) 2000 MySQL AB
|
|
|
|
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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA }
|
|
|
|
|
|
var
|
|
my_net_init : function (net:PNET; vio:PVio):longint;cdecl;
|
|
net_end : procedure (net:PNET);cdecl;
|
|
net_clear : procedure (net:PNET);cdecl;
|
|
net_flush : function (net:PNET):longint;cdecl;
|
|
(* Const before type ignored *)
|
|
my_net_write : function (net:PNET; packet:Pchar; len:dword):longint;cdecl;
|
|
(* Const before type ignored *)
|
|
net_write_command : function (net:PNET; command:byte; packet:Pchar; len:dword):longint;cdecl;
|
|
(* Const before type ignored *)
|
|
net_real_write : function (net:PNET; packet:Pchar; len:dword):longint;cdecl;
|
|
my_net_read : function (net:PNET):dword;cdecl;
|
|
{ The following function is not meant for normal usage }
|
|
{
|
|
struct sockaddr;
|
|
int my_connect(my_socket s, const struct sockaddr name, unsigned int namelen,
|
|
unsigned int timeout);
|
|
}
|
|
randominit : procedure (_para1:Prand_struct; seed1:dword; seed2:dword);cdecl;
|
|
rnd : function (_para1:Prand_struct):double;cdecl;
|
|
(* Const before type ignored *)
|
|
make_scrambled_password : procedure (_to:Pchar; password:Pchar);cdecl;
|
|
(* Const before type ignored *)
|
|
get_salt_from_password : procedure (res:Pdword; password:Pchar);cdecl;
|
|
make_password_from_salt : procedure (_to:Pchar; hash_res:Pdword);cdecl;
|
|
(* Const before type ignored *)
|
|
(* Const before type ignored *)
|
|
scramble : function (_to:Pchar; message:Pchar; password:Pchar; old_ver:my_bool):Pchar;cdecl;
|
|
(* Const before type ignored *)
|
|
(* Const before type ignored *)
|
|
check_scramble : function (_para1:Pchar; message:Pchar; salt:Pdword; old_ver:my_bool):my_bool;cdecl;
|
|
get_tty_password : function (opt_message:Pchar):Pchar;cdecl;
|
|
(* Const before type ignored *)
|
|
hash_password : procedure (result:Pdword; password:Pchar);cdecl;
|
|
{ Some other useful functions }
|
|
my_init : procedure;cdecl;
|
|
(* Const before type ignored *)
|
|
(* Const before type ignored *)
|
|
load_defaults : procedure (conf_file:Pchar; groups:PPchar; argc:Plongint; argv:PPPchar);cdecl;
|
|
my_thread_init : function : my_bool;cdecl;
|
|
my_thread_end : procedure ;cdecl;
|
|
|
|
function packet_error : longint;
|
|
{ For net_store_length }
|
|
{ was #define dname def_expr }
|
|
function NULL_LENGTH : dword;
|
|
|
|
|
|
Procedure InitialiseMysql4_com;
|
|
Procedure ReleaseMysql4_com;
|
|
|
|
var Mysql4_comLibraryHandle : TLibHandle;
|
|
|
|
implementation
|
|
|
|
var RefCount : integer;
|
|
|
|
Procedure InitialiseMysql4_com;
|
|
|
|
begin
|
|
inc(RefCount);
|
|
if RefCount = 1 then
|
|
begin
|
|
Mysql4_comLibraryHandle := loadlibrary(Mysqllib);
|
|
if Mysql4_comLibraryHandle = nilhandle then
|
|
begin
|
|
RefCount := 0;
|
|
Raise EInOutError.Create('Can not load MySQL client. Is it installed? ('+Mysqllib+')');
|
|
end;
|
|
|
|
pointer(my_net_init) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_net_init');
|
|
pointer(net_end) := GetProcedureAddress(Mysql4_comLibraryHandle,'net_end');
|
|
pointer(net_clear) := GetProcedureAddress(Mysql4_comLibraryHandle,'net_clear');
|
|
pointer(net_flush) := GetProcedureAddress(Mysql4_comLibraryHandle,'net_flush');
|
|
pointer(my_net_write) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_net_write');
|
|
pointer(net_write_command) := GetProcedureAddress(Mysql4_comLibraryHandle,'net_write_command');
|
|
pointer(net_real_write) := GetProcedureAddress(Mysql4_comLibraryHandle,'net_real_write');
|
|
pointer(my_net_read) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_net_read');
|
|
pointer(randominit) := GetProcedureAddress(Mysql4_comLibraryHandle,'randominit');
|
|
pointer(rnd) := GetProcedureAddress(Mysql4_comLibraryHandle,'rnd');
|
|
pointer(make_scrambled_password) := GetProcedureAddress(Mysql4_comLibraryHandle,'make_scrambled_password');
|
|
pointer(get_salt_from_password) := GetProcedureAddress(Mysql4_comLibraryHandle,'get_salt_from_password');
|
|
pointer(make_password_from_salt) := GetProcedureAddress(Mysql4_comLibraryHandle,'make_password_from_salt');
|
|
pointer(scramble) := GetProcedureAddress(Mysql4_comLibraryHandle,'scramble');
|
|
pointer(check_scramble) := GetProcedureAddress(Mysql4_comLibraryHandle,'check_scramble');
|
|
pointer(get_tty_password) := GetProcedureAddress(Mysql4_comLibraryHandle,'get_tty_password');
|
|
pointer(hash_password) := GetProcedureAddress(Mysql4_comLibraryHandle,'hash_password');
|
|
pointer(my_init) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_init');
|
|
pointer(load_defaults) := GetProcedureAddress(Mysql4_comLibraryHandle,'load_defaults');
|
|
pointer(my_thread_init) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_thread_init');
|
|
pointer(my_thread_end) := GetProcedureAddress(Mysql4_comLibraryHandle,'my_thread_end');
|
|
end;
|
|
end;
|
|
|
|
Procedure ReleaseMysql4_com;
|
|
|
|
begin
|
|
if RefCount > 0 then dec(RefCount);
|
|
if RefCount = 0 then
|
|
begin
|
|
if not UnloadLibrary(Mysql4_comLibraryHandle) then inc(RefCount);
|
|
end;
|
|
end;
|
|
|
|
// Next function also defined in mysql4_com
|
|
{ was #define dname def_expr }
|
|
function packet_error : longint;
|
|
{ return type might be wrong }
|
|
begin
|
|
packet_error:= not (dword(0));
|
|
end;
|
|
|
|
// Next function also defined in mysql4_com
|
|
{ was #define dname def_expr }
|
|
function NULL_LENGTH : dword;
|
|
begin
|
|
NULL_LENGTH:=dword( not (0));
|
|
end;
|
|
|
|
|
|
end.
|