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.31 by root, Sun Mar 30 04:34:20 2008 UTC

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_setpv (sv, db_strerror (errno));
966 return 0;
967 }
968
969 return PL_vtbl_sv.svt_get (aTHX_ sv, mg);
970}
971
972static MGVTBL vtbl_errno;
973
974// this wonderful hack :( patches perl's $! variable to support our errno values
975static void
976patch_errno (void)
977{
978 SV *sv;
979 MAGIC *mg;
980
981 if (!(sv = get_sv ("!", 1)))
982 return;
983
984 if (!(mg = mg_find (sv, PERL_MAGIC_sv)))
985 return;
986
987 if (mg->mg_virtual != &PL_vtbl_sv)
988 return;
989
990 vtbl_errno = PL_vtbl_sv;
991 vtbl_errno.svt_get = errno_get;
992 mg->mg_virtual = &vtbl_errno;
957} 993}
958 994
959MODULE = BDB PACKAGE = BDB 995MODULE = BDB PACKAGE = BDB
960 996
961PROTOTYPES: ENABLE 997PROTOTYPES: ENABLE
1159 X_MUTEX_CHECK (reslock); 1195 X_MUTEX_CHECK (reslock);
1160 X_MUTEX_CHECK (reqlock); 1196 X_MUTEX_CHECK (reqlock);
1161 1197
1162 X_COND_CHECK (reqwait); 1198 X_COND_CHECK (reqwait);
1163#endif 1199#endif
1200 patch_errno ();
1164} 1201}
1165 1202
1166void 1203void
1167max_poll_reqs (int nreqs) 1204max_poll_reqs (int nreqs)
1168 PROTOTYPE: $ 1205 PROTOTYPE: $
2045 CODE: 2082 CODE:
2046 RETVAL = seq->set_range (seq, min, max); 2083 RETVAL = seq->set_range (seq, min, max);
2047 OUTPUT: 2084 OUTPUT:
2048 RETVAL 2085 RETVAL
2049 2086
2087

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines