@@ -1293,6 +1293,113 @@ BOOT:
12931293 MUTEX_INIT (& darwin_time_mutex );
12941294# endif
12951295#endif
1296+ #if defined(HAS_GETITIMER ) && defined(HAS_SETITIMER )
1297+ # define GETITIMER_SUBSTR "Time::HiRes::getitimer"+13
1298+ # define SETITIMER_SUBSTR "Time::HiRes::setitimer"+13
1299+ #else
1300+ # define GETITIMER_SUBSTR "d_getitimer"+2
1301+ # define SETITIMER_SUBSTR "d_setitimer"+2
1302+ #endif
1303+ #define INIT1 INIT2(sym_usleep, "Time::HiRes::usleep"+13, sizeof("usleep")-1, NULL, 0) \
1304+ INIT2(sym_sleep, "Time::HiRes::sleep"+13, sizeof("sleep")-1, NULL, 0) \
1305+ INIT2(sym_ualarm, "Time::HiRes::ualarm"+13, sizeof("ualarm")-1, NULL, 0) \
1306+ INIT2(sym_alarm, "Time::HiRes::alarm"+13, sizeof("alarm")-1, NULL, 0) \
1307+ INIT2(sym_gettimeofday, "Time::HiRes::gettimeofday"+13, sizeof("gettimeofday")-1, NULL, 0) \
1308+ INIT2(sym_time, "Time::HiRes::time"+13, sizeof("time")-1, NULL, 0) \
1309+ INIT2(sym_tv_interval, "tv_interval", sizeof("tv_interval")-1, NULL, 0) \
1310+ INIT2(sym_getitimer, GETITIMER_SUBSTR, sizeof("getitimer")-1, NULL, 0) \
1311+ INIT2(sym_setitimer, SETITIMER_SUBSTR, sizeof("setitimer")-1, NULL, 0) \
1312+ INIT2(sym_nanosleep, "Time::HiRes::nanosleep"+13, sizeof("nanosleep")-1, NULL, 0) \
1313+ INIT2(sym_clock_gettime, "Time::HiRes::clock_gettime"+13, sizeof("clock_gettime")-1, NULL, 0) \
1314+ INIT2(sym_clock_getres, "Time::HiRes::clock_getres"+13, sizeof("clock_getres")-1, NULL, 0) \
1315+ INIT2(sym_clock, "Time::HiRes::clock"+13, sizeof("clock")-1, NULL, 0) \
1316+ INIT2(sym_clock_nanosleep, "Time::HiRes::clock_nanosleep"+13, sizeof("clock_nanosleep")-1, NULL, 0) \
1317+ INIT2(sym_CLOCKS_PER_SEC, "CLOCKS_PER_SEC", sizeof("CLOCKS_PER_SEC")-1, NULL, 0) \
1318+ INIT2(sym_CLOCK_BOOTTIME, "CLOCK_BOOTTIME", sizeof("CLOCK_BOOTTIME")-1, NULL, 0) \
1319+ INIT2(sym_CLOCK_HIGHRES, "CLOCK_HIGHRES", sizeof("CLOCK_HIGHRES")-1, NULL, 0) \
1320+ INIT2(sym_CLOCK_MONOTONIC, "CLOCK_MONOTONIC", sizeof("CLOCK_MONOTONIC")-1, NULL, 0) \
1321+ INIT2(sym_CLOCK_MONOTONIC_COARSE, "CLOCK_MONOTONIC_COARSE", sizeof("CLOCK_MONOTONIC_COARSE")-1, NULL, 0) \
1322+ INIT2(sym_CLOCK_MONOTONIC_FAST, "CLOCK_MONOTONIC_FAST", sizeof("CLOCK_MONOTONIC_FAST")-1, NULL, 0) \
1323+ INIT2(sym_CLOCK_MONOTONIC_PRECISE, "CLOCK_MONOTONIC_PRECISE", sizeof("CLOCK_MONOTONIC_PRECISE")-1, NULL, 0) \
1324+ INIT2(sym_CLOCK_MONOTONIC_RAW, "CLOCK_MONOTONIC_RAW", sizeof("CLOCK_MONOTONIC_RAW")-1, NULL, 0) \
1325+ INIT2(sym_CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID", sizeof("CLOCK_PROCESS_CPUTIME_ID")-1, NULL, 0) \
1326+ INIT2(sym_CLOCK_PROF, "CLOCK_PROF", sizeof("CLOCK_PROF")-1, NULL, 0) \
1327+ INIT2(sym_CLOCK_REALTIME, "CLOCK_REALTIME", sizeof("CLOCK_REALTIME")-1, NULL, 0) \
1328+ INIT2(sym_CLOCK_REALTIME_COARSE, "CLOCK_REALTIME_COARSE", sizeof("CLOCK_REALTIME_COARSE")-1, NULL, 0) \
1329+ INIT2(sym_CLOCK_REALTIME_FAST, "CLOCK_REALTIME_FAST", sizeof("CLOCK_REALTIME_FAST")-1, NULL, 0) \
1330+ INIT2(sym_CLOCK_REALTIME_PRECISE, "CLOCK_REALTIME_PRECISE", sizeof("CLOCK_REALTIME_PRECISE")-1, NULL, 0) \
1331+ INIT2(sym_CLOCK_REALTIME_RAW, "CLOCK_REALTIME_RAW", sizeof("CLOCK_REALTIME_RAW")-1, NULL, 0) \
1332+ INIT2(sym_CLOCK_SECOND, "CLOCK_SECOND", sizeof("CLOCK_SECOND")-1, NULL, 0) \
1333+ INIT2(sym_CLOCK_SOFTTIME, "CLOCK_SOFTTIME", sizeof("CLOCK_SOFTTIME")-1, NULL, 0) \
1334+ INIT2(sym_CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID", sizeof("CLOCK_THREAD_CPUTIME_ID")-1, NULL, 0) \
1335+ INIT2(sym_CLOCK_TIMEOFDAY, "CLOCK_TIMEOFDAY", sizeof("CLOCK_TIMEOFDAY")-1, NULL, 0) \
1336+ INIT2(sym_CLOCK_UPTIME, "CLOCK_UPTIME", sizeof("CLOCK_UPTIME")-1, NULL, 0) \
1337+ INIT2(sym_CLOCK_UPTIME_COARSE, "CLOCK_UPTIME_COARSE", sizeof("CLOCK_UPTIME_COARSE")-1, NULL, 0) \
1338+ INIT2(sym_CLOCK_UPTIME_FAST, "CLOCK_UPTIME_FAST", sizeof("CLOCK_UPTIME_FAST")-1, NULL, 0) \
1339+ INIT2(sym_CLOCK_UPTIME_PRECISE, "CLOCK_UPTIME_PRECISE", sizeof("CLOCK_UPTIME_PRECISE")-1, NULL, 0) \
1340+ INIT2(sym_CLOCK_UPTIME_RAW, "CLOCK_UPTIME_RAW", sizeof("CLOCK_UPTIME_RAW")-1, NULL, 0) \
1341+ INIT2(sym_CLOCK_VIRTUAL, "CLOCK_VIRTUAL", sizeof("CLOCK_VIRTUAL")-1, NULL, 0) \
1342+ INIT2(sym_ITIMER_PROF, "ITIMER_PROF", sizeof("ITIMER_PROF")-1, NULL, 0) \
1343+ INIT2(sym_ITIMER_REAL, "ITIMER_REAL", sizeof("ITIMER_REAL")-1, NULL, 0) \
1344+ INIT2(sym_ITIMER_REALPROF, "ITIMER_REALPROF", sizeof("ITIMER_REALPROF")-1, NULL, 0) \
1345+ INIT2(sym_ITIMER_VIRTUAL, "ITIMER_VIRTUAL", sizeof("ITIMER_VIRTUAL")-1, NULL, 0) \
1346+ INIT2(sym_TIMER_ABSTIME, "TIMER_ABSTIME", sizeof("TIMER_ABSTIME")-1, NULL, 0) \
1347+ INIT2(sym_d_usleep, "d_usleep", sizeof("d_usleep")-1, "Time::HiRes::usleep"+13, 1) \
1348+ INIT2(sym_d_ualarm, "d_ualarm", sizeof("d_ualarm")-1, "Time::HiRes::ualarm"+13, 1) \
1349+ INIT2(sym_d_gettimeofday, "d_gettimeofday", sizeof("d_gettimeofday")-1, "Time::HiRes::gettimeofday"+13, 1) \
1350+ INIT2(sym_d_getitimer, "d_getitimer", sizeof("d_getitimer")-1, GETITIMER_SUBSTR, 1) \
1351+ INIT2(sym_d_setitimer, "d_setitimer", sizeof("d_setitimer")-1, SETITIMER_SUBSTR, 1) \
1352+ INIT2(sym_d_nanosleep, "d_nanosleep", sizeof("d_nanosleep")-1, "Time::HiRes::nanosleep"+13, 1) \
1353+ INIT2(sym_d_clock_gettime, "d_clock_gettime", sizeof("d_clock_gettime")-1, "Time::HiRes::clock_gettime"+13, 1) \
1354+ INIT2(sym_d_clock_getres, "d_clock_getres", sizeof("d_clock_getres")-1, "Time::HiRes::clock_getres"+13, 1) \
1355+ INIT2(sym_d_clock, "d_clock", sizeof("d_clock")-1, "Time::HiRes::clock"+13, 1) \
1356+ INIT2(sym_d_clock_nanosleep, "d_clock_nanosleep", sizeof("d_clock_nanosleep")-1, "Time::HiRes::clock_nanosleep"+13, 1) \
1357+ INIT2(sym_d_hires_stat, "d_hires_stat", sizeof("d_hires_stat")-1, NULL, 0) \
1358+ INIT2(sym_d_futimens, "d_futimens", sizeof("d_futimens")-1, NULL, 0) \
1359+ INIT2(sym_d_utimensat, "d_utimensat", sizeof("d_utimensat")-1, NULL, 0) \
1360+ INIT2(sym_d_hires_utime, "d_hires_utime", sizeof("d_hires_utime")-1, NULL, 0) \
1361+ INIT2(sym_stat, "Time::HiRes::stat"+13, sizeof("stat")-1, NULL, 0) \
1362+ INIT2(sym_lstat, "Time::HiRes::lstat"+13, sizeof("lstat")-1, NULL, 0) \
1363+ INIT2(sym_utime, "Time::HiRes::utime"+13, sizeof("utime")-1, NULL, 0)
1364+ /* A test inside ../dist/XSLoader/t/XSLoader.t, doesn't allow us to
1365+ pass any args from our .pm to .xs. So this idea is rejected:
1366+ XSLoader::load( 'Time::HiRes', $XS_VERSION, \@EXPORT_OK );
1367+ if (items != 3 || !SvROK((rv=ST(2))) || (SvTYPE(SvRV(rv))!=SVt_PVAV)
1368+ croak_xs_usage(cv, "class, version, export_ok"); */
1369+ #undef INIT2
1370+ #define INIT2 (_s , _str , _l , _d , _db ) ((_db) ? (_d) : (_str)),
1371+ { /* All C strings are shared with EU::PXS's or constant()'s codegen. */
1372+ static const char * const expokpv [] = {
1373+ INIT1
1374+ };
1375+ #undef INIT2
1376+ #define INIT2 (_s , _str , _l , _d , _db ) ((_db) ? -((I8)(_l)) : (_l)),
1377+ static const I8 expoklen [] = {
1378+ INIT1
1379+ };
1380+ #undef INIT2
1381+ char buf [64 ];
1382+ GV * gv = gv_fetchpvs ("Time::HiRes::EXPORT_OK" , GV_ADDMULTI , SVt_PVAV );
1383+ AV * av = GvAV (gv );
1384+ int i = 0 ;
1385+ buf [0 ] = 'd' ;
1386+ buf [1 ] = '_' ;
1387+ av_extend (av , C_ARRAY_LENGTH (expoklen ));
1388+ for (;i < C_ARRAY_LENGTH (expoklen ); i ++ ) {
1389+ I8 l = expoklen [i ];
1390+ const char * pv = expokpv [i ];
1391+ if (l < 0 ) { /* neg val is a "d_" prefixed identifier */
1392+ l = - l ; /* +1 for "\0" -2 for "d_" */
1393+ Copy (pv , & buf [2 ], (l + 1 )- 2 , char );
1394+ pv = buf ;
1395+ }
1396+ #ifdef av_store_simple
1397+ av_store_simple (av , i , newSVpvn_share (pv , l , 0 ));
1398+ #else
1399+ av_store (av , i , newSVpvn_share (pv , l , 0 ));
1400+ #endif
1401+ }
1402+ }
12961403 }
12971404
12981405#if defined(USE_ITHREADS ) && defined(MY_CXT_KEY )
@@ -1792,10 +1899,10 @@ PROTOTYPE: $$@
17921899 tot ++ ;
17931900 }
17941901 } else {
1795- croak ("%s unimplemented in this platform" , "futimens" );
1902+ croak ("%s unimplemented in this platform" , "d_futimens" + 2 );
17961903 }
17971904# else /* HAS_FUTIMENS */
1798- croak ("%s unimplemented in this platform" , "futimens" );
1905+ croak ("%s unimplemented in this platform" , "d_futimens" + 2 );
17991906# endif /* HAS_FUTIMENS */
18001907 }
18011908 }
@@ -1810,10 +1917,10 @@ PROTOTYPE: $$@
18101917 tot ++ ;
18111918 }
18121919 } else {
1813- croak ("%s unimplemented in this platform" , "utimensat" );
1920+ croak ("%s unimplemented in this platform" , "d_utimensat" + 2 );
18141921 }
18151922# else /* HAS_UTIMENSAT */
1816- croak ("%s unimplemented in this platform" , "utimensat" );
1923+ croak ("%s unimplemented in this platform" , "d_utimensat" + 2 );
18171924# endif /* HAS_UTIMENSAT */
18181925 }
18191926 } /* while items */
0 commit comments