@@ -1293,6 +1293,113 @@ BOOT:
1293
1293
MUTEX_INIT (& darwin_time_mutex );
1294
1294
# endif
1295
1295
#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
+ }
1296
1403
}
1297
1404
1298
1405
#if defined(USE_ITHREADS ) && defined(MY_CXT_KEY )
@@ -1792,10 +1899,10 @@ PROTOTYPE: $$@
1792
1899
tot ++ ;
1793
1900
}
1794
1901
} else {
1795
- croak ("%s unimplemented in this platform" , "futimens" );
1902
+ croak ("%s unimplemented in this platform" , "d_futimens" + 2 );
1796
1903
}
1797
1904
# else /* HAS_FUTIMENS */
1798
- croak ("%s unimplemented in this platform" , "futimens" );
1905
+ croak ("%s unimplemented in this platform" , "d_futimens" + 2 );
1799
1906
# endif /* HAS_FUTIMENS */
1800
1907
}
1801
1908
}
@@ -1810,10 +1917,10 @@ PROTOTYPE: $$@
1810
1917
tot ++ ;
1811
1918
}
1812
1919
} else {
1813
- croak ("%s unimplemented in this platform" , "utimensat" );
1920
+ croak ("%s unimplemented in this platform" , "d_utimensat" + 2 );
1814
1921
}
1815
1922
# else /* HAS_UTIMENSAT */
1816
- croak ("%s unimplemented in this platform" , "utimensat" );
1923
+ croak ("%s unimplemented in this platform" , "d_utimensat" + 2 );
1817
1924
# endif /* HAS_UTIMENSAT */
1818
1925
}
1819
1926
} /* while items */
0 commit comments