ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.xs
(Generate patch)

Comparing BDB/BDB.xs (file contents):
Revision 1.30 by root, Sun Jan 13 09:43:21 2008 UTC vs.
Revision 1.33 by root, Sun Mar 30 04:57:55 2008 UTC

47typedef DBC DBC_ornuked; 47typedef DBC DBC_ornuked;
48typedef DB DB_ornuked; 48typedef DB DB_ornuked;
49typedef DB_SEQUENCE DB_SEQUENCE_ornuked; 49typedef DB_SEQUENCE DB_SEQUENCE_ornuked;
50 50
51typedef SV SV8; /* byte-sv, used for argument-checking */ 51typedef SV SV8; /* byte-sv, used for argument-checking */
52typedef char *octetstring; 52typedef char *bdb_filename;
53 53
54static SV *prepare_cb; 54static SV *prepare_cb;
55 55
56#if DB_VERSION_MINOR >= 6 56#if DB_VERSION_MINOR >= 6
57# define c_close close 57# define c_close close
952static void 952static void
953ptr_nuke (SV *sv) 953ptr_nuke (SV *sv)
954{ 954{
955 assert (SvROK (sv)); 955 assert (SvROK (sv));
956 sv_setiv (SvRV (sv), 0); 956 sv_setiv (SvRV (sv), 0);
957}
958
959static int
960errno_get (pTHX_ SV *sv, MAGIC *mg)
961{
962 if (*mg->mg_ptr == '!') // should always be the case
963 if (-30999 <= errno && errno <= -30800)
964 {
965 sv_setnv (sv, (NV)errno);
966 sv_setpv (sv, db_strerror (errno));
967 SvNOK_on (sv); /* what a wonderful hack! */
968 // ^^^ copied from perl sources
969 return 0;
970 }
971
972 return PL_vtbl_sv.svt_get (aTHX_ sv, mg);
973}
974
975static MGVTBL vtbl_errno;
976
977// this wonderful hack :( patches perl's $! variable to support our errno values
978static void
979patch_errno (void)
980{
981 SV *sv;
982 MAGIC *mg;
983
984 if (!(sv = get_sv ("!", 1)))
985 return;
986
987 if (!(mg = mg_find (sv, PERL_MAGIC_sv)))
988 return;
989
990 if (mg->mg_virtual != &PL_vtbl_sv)
991 return;
992
993 vtbl_errno = PL_vtbl_sv;
994 vtbl_errno.svt_get = errno_get;
995 mg->mg_virtual = &vtbl_errno;
957} 996}
958 997
959MODULE = BDB PACKAGE = BDB 998MODULE = BDB PACKAGE = BDB
960 999
961PROTOTYPES: ENABLE 1000PROTOTYPES: ENABLE
1159 X_MUTEX_CHECK (reslock); 1198 X_MUTEX_CHECK (reslock);
1160 X_MUTEX_CHECK (reqlock); 1199 X_MUTEX_CHECK (reqlock);
1161 1200
1162 X_COND_CHECK (reqwait); 1201 X_COND_CHECK (reqwait);
1163#endif 1202#endif
1203 patch_errno ();
1164} 1204}
1165 1205
1166void 1206void
1167max_poll_reqs (int nreqs) 1207max_poll_reqs (int nreqs)
1168 PROTOTYPE: $ 1208 PROTOTYPE: $
1326} 1366}
1327 OUTPUT: 1367 OUTPUT:
1328 RETVAL 1368 RETVAL
1329 1369
1330void 1370void
1331db_env_open (DB_ENV *env, octetstring db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef) 1371db_env_open (DB_ENV *env, bdb_filename db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef)
1332 CODE: 1372 CODE:
1333{ 1373{
1334 dREQ (REQ_ENV_OPEN); 1374 dREQ (REQ_ENV_OPEN);
1335 1375
1336 req->env = env; 1376 req->env = env;
1407} 1447}
1408 OUTPUT: 1448 OUTPUT:
1409 RETVAL 1449 RETVAL
1410 1450
1411void 1451void
1412db_open (DB *db, DB_TXN_ornull *txnid, octetstring file, octetstring database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef) 1452db_open (DB *db, DB_TXN_ornull *txnid, bdb_filename file, bdb_filename database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef)
1413 CODE: 1453 CODE:
1414{ 1454{
1415 dREQ (REQ_DB_OPEN); 1455 dREQ (REQ_DB_OPEN);
1416 req->db = db; 1456 req->db = db;
1417 req->txn = txnid; 1457 req->txn = txnid;
1457 req->uint1 = flags; 1497 req->uint1 = flags;
1458 REQ_SEND; 1498 REQ_SEND;
1459} 1499}
1460 1500
1461void 1501void
1462db_upgrade (DB *db, octetstring file, U32 flags = 0, SV *callback = &PL_sv_undef) 1502db_upgrade (DB *db, bdb_filename file, U32 flags = 0, SV *callback = &PL_sv_undef)
1463 CODE: 1503 CODE:
1464{ 1504{
1465 dREQ (REQ_DB_SYNC); 1505 dREQ (REQ_DB_SYNC);
1466 req->db = db; 1506 req->db = db;
1467 req->buf1 = strdup (file); 1507 req->buf1 = strdup (file);
2045 CODE: 2085 CODE:
2046 RETVAL = seq->set_range (seq, min, max); 2086 RETVAL = seq->set_range (seq, min, max);
2047 OUTPUT: 2087 OUTPUT:
2048 RETVAL 2088 RETVAL
2049 2089
2090

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines