… | |
… | |
952 | static void |
952 | static void |
953 | ptr_nuke (SV *sv) |
953 | ptr_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 | |
|
|
959 | static int |
|
|
960 | errno_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 | |
|
|
972 | static MGVTBL vtbl_errno; |
|
|
973 | |
|
|
974 | // this wonderful hack :( patches perl's $! variable to support our errno values |
|
|
975 | static void |
|
|
976 | patch_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 | |
959 | MODULE = BDB PACKAGE = BDB |
995 | MODULE = BDB PACKAGE = BDB |
960 | |
996 | |
961 | PROTOTYPES: ENABLE |
997 | PROTOTYPES: 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 | |
1166 | void |
1203 | void |
1167 | max_poll_reqs (int nreqs) |
1204 | max_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 | |