| 1 |
/* |
| 2 |
|
| 3 |
version.c -- Perl 5 interface to Berkeley DB |
| 4 |
|
| 5 |
written by Paul Marquess <Paul.Marquess@btinternet.com> |
| 6 |
last modified 2nd Jan 2002 |
| 7 |
version 1.802 |
| 8 |
|
| 9 |
All comments/suggestions/problems are welcome |
| 10 |
|
| 11 |
Copyright (c) 1995-2002 Paul Marquess. All rights reserved. |
| 12 |
This program is free software; you can redistribute it and/or |
| 13 |
modify it under the same terms as Perl itself. |
| 14 |
|
| 15 |
Changes: |
| 16 |
1.71 - Support for Berkeley DB version 3. |
| 17 |
Support for Berkeley DB 2/3's backward compatability mode. |
| 18 |
1.72 - No change. |
| 19 |
1.73 - Added support for threading |
| 20 |
1.74 - Added Perl core patch 7801. |
| 21 |
|
| 22 |
|
| 23 |
*/ |
| 24 |
|
| 25 |
#define PERL_NO_GET_CONTEXT |
| 26 |
#include "EXTERN.h" |
| 27 |
#include "perl.h" |
| 28 |
#include "XSUB.h" |
| 29 |
|
| 30 |
#include <db.h> |
| 31 |
|
| 32 |
void |
| 33 |
#ifdef CAN_PROTOTYPE |
| 34 |
__getBerkeleyDBInfo(void) |
| 35 |
#else |
| 36 |
__getBerkeleyDBInfo() |
| 37 |
#endif |
| 38 |
{ |
| 39 |
#ifdef dTHX |
| 40 |
dTHX; |
| 41 |
#endif |
| 42 |
SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ; |
| 43 |
SV * ver_sv = perl_get_sv("DB_File::db_ver", GV_ADD|GV_ADDMULTI) ; |
| 44 |
SV * compat_sv = perl_get_sv("DB_File::db_185_compat", GV_ADD|GV_ADDMULTI) ; |
| 45 |
|
| 46 |
#ifdef DB_VERSION_MAJOR |
| 47 |
int Major, Minor, Patch ; |
| 48 |
|
| 49 |
(void)db_version(&Major, &Minor, &Patch) ; |
| 50 |
|
| 51 |
/* Check that the versions of db.h and libdb.a are the same */ |
| 52 |
if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR |
| 53 |
|| Patch != DB_VERSION_PATCH) |
| 54 |
croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n", |
| 55 |
DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, |
| 56 |
Major, Minor, Patch) ; |
| 57 |
|
| 58 |
/* check that libdb is recent enough -- we need 2.3.4 or greater */ |
| 59 |
if (Major == 2 && (Minor < 3 || (Minor == 3 && Patch < 4))) |
| 60 |
croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n", |
| 61 |
Major, Minor, Patch) ; |
| 62 |
|
| 63 |
{ |
| 64 |
char buffer[40] ; |
| 65 |
sprintf(buffer, "%d.%d", Major, Minor) ; |
| 66 |
sv_setpv(version_sv, buffer) ; |
| 67 |
sprintf(buffer, "%d.%03d%03d", Major, Minor, Patch) ; |
| 68 |
sv_setpv(ver_sv, buffer) ; |
| 69 |
} |
| 70 |
|
| 71 |
#else /* ! DB_VERSION_MAJOR */ |
| 72 |
sv_setiv(version_sv, 1) ; |
| 73 |
sv_setiv(ver_sv, 1) ; |
| 74 |
#endif /* ! DB_VERSION_MAJOR */ |
| 75 |
|
| 76 |
#ifdef COMPAT185 |
| 77 |
sv_setiv(compat_sv, 1) ; |
| 78 |
#else /* ! COMPAT185 */ |
| 79 |
sv_setiv(compat_sv, 0) ; |
| 80 |
#endif /* ! COMPAT185 */ |
| 81 |
|
| 82 |
} |