@@ -1212,6 +1212,8 @@ PROTOTYPES: ENABLE
1212
1212
1213
1213
BOOT :
1214
1214
{
1215
+ if (items != 3 )
1216
+ croak_xs_usage (cv ,"cls,ver,exok" );
1215
1217
#ifdef MY_CXT_KEY
1216
1218
MY_CXT_INIT ;
1217
1219
#endif
@@ -1293,6 +1295,106 @@ BOOT:
1293
1295
MUTEX_INIT (& darwin_time_mutex );
1294
1296
# endif
1295
1297
#endif
1298
+ #if defined(HAS_GETITIMER ) && defined(HAS_SETITIMER )
1299
+ # define GETITIMER_SUBSTR "Time::HiRes::getitimer"+13
1300
+ # define SETITIMER_SUBSTR "Time::HiRes::setitimer"+13
1301
+ #else
1302
+ # define GETITIMER_SUBSTR "d_getitimer"+2
1303
+ # define SETITIMER_SUBSTR "d_setitimer"+2
1304
+ #endif
1305
+ #define INIT1 INIT2(sym_usleep, "Time::HiRes::usleep"+13, sizeof("usleep")-1, NULL, 0) \
1306
+ INIT2(sym_sleep, "Time::HiRes::sleep"+13, sizeof("sleep")-1, NULL, 0) \
1307
+ INIT2(sym_ualarm, "Time::HiRes::ualarm"+13, sizeof("ualarm")-1, NULL, 0) \
1308
+ INIT2(sym_alarm, "Time::HiRes::alarm"+13, sizeof("alarm")-1, NULL, 0) \
1309
+ INIT2(sym_gettimeofday, "Time::HiRes::gettimeofday"+13, sizeof("gettimeofday")-1, NULL, 0) \
1310
+ INIT2(sym_time, "Time::HiRes::time"+13, sizeof("time")-1, NULL, 0) \
1311
+ INIT2(sym_tv_interval, "tv_interval", sizeof("tv_interval")-1, NULL, 0) \
1312
+ INIT2(sym_getitimer, GETITIMER_SUBSTR, sizeof("getitimer")-1, NULL, 0) \
1313
+ INIT2(sym_setitimer, SETITIMER_SUBSTR, sizeof("setitimer")-1, NULL, 0) \
1314
+ INIT2(sym_nanosleep, "Time::HiRes::nanosleep"+13, sizeof("nanosleep")-1, NULL, 0) \
1315
+ INIT2(sym_clock_gettime, "Time::HiRes::clock_gettime"+13, sizeof("clock_gettime")-1, NULL, 0) \
1316
+ INIT2(sym_clock_getres, "Time::HiRes::clock_getres"+13, sizeof("clock_getres")-1, NULL, 0) \
1317
+ INIT2(sym_clock, "Time::HiRes::clock"+13, sizeof("clock")-1, NULL, 0) \
1318
+ INIT2(sym_clock_nanosleep, "Time::HiRes::clock_nanosleep"+13, sizeof("clock_nanosleep")-1, NULL, 0) \
1319
+ INIT2(sym_CLOCKS_PER_SEC, "CLOCKS_PER_SEC", sizeof("CLOCKS_PER_SEC")-1, NULL, 0) \
1320
+ INIT2(sym_CLOCK_BOOTTIME, "CLOCK_BOOTTIME", sizeof("CLOCK_BOOTTIME")-1, NULL, 0) \
1321
+ INIT2(sym_CLOCK_HIGHRES, "CLOCK_HIGHRES", sizeof("CLOCK_HIGHRES")-1, NULL, 0) \
1322
+ INIT2(sym_CLOCK_MONOTONIC, "CLOCK_MONOTONIC", sizeof("CLOCK_MONOTONIC")-1, NULL, 0) \
1323
+ INIT2(sym_CLOCK_MONOTONIC_COARSE, "CLOCK_MONOTONIC_COARSE", sizeof("CLOCK_MONOTONIC_COARSE")-1, NULL, 0) \
1324
+ INIT2(sym_CLOCK_MONOTONIC_FAST, "CLOCK_MONOTONIC_FAST", sizeof("CLOCK_MONOTONIC_FAST")-1, NULL, 0) \
1325
+ INIT2(sym_CLOCK_MONOTONIC_PRECISE, "CLOCK_MONOTONIC_PRECISE", sizeof("CLOCK_MONOTONIC_PRECISE")-1, NULL, 0) \
1326
+ INIT2(sym_CLOCK_MONOTONIC_RAW, "CLOCK_MONOTONIC_RAW", sizeof("CLOCK_MONOTONIC_RAW")-1, NULL, 0) \
1327
+ INIT2(sym_CLOCK_PROCESS_CPUTIME_ID, "CLOCK_PROCESS_CPUTIME_ID", sizeof("CLOCK_PROCESS_CPUTIME_ID")-1, NULL, 0) \
1328
+ INIT2(sym_CLOCK_PROF, "CLOCK_PROF", sizeof("CLOCK_PROF")-1, NULL, 0) \
1329
+ INIT2(sym_CLOCK_REALTIME, "CLOCK_REALTIME", sizeof("CLOCK_REALTIME")-1, NULL, 0) \
1330
+ INIT2(sym_CLOCK_REALTIME_COARSE, "CLOCK_REALTIME_COARSE", sizeof("CLOCK_REALTIME_COARSE")-1, NULL, 0) \
1331
+ INIT2(sym_CLOCK_REALTIME_FAST, "CLOCK_REALTIME_FAST", sizeof("CLOCK_REALTIME_FAST")-1, NULL, 0) \
1332
+ INIT2(sym_CLOCK_REALTIME_PRECISE, "CLOCK_REALTIME_PRECISE", sizeof("CLOCK_REALTIME_PRECISE")-1, NULL, 0) \
1333
+ INIT2(sym_CLOCK_REALTIME_RAW, "CLOCK_REALTIME_RAW", sizeof("CLOCK_REALTIME_RAW")-1, NULL, 0) \
1334
+ INIT2(sym_CLOCK_SECOND, "CLOCK_SECOND", sizeof("CLOCK_SECOND")-1, NULL, 0) \
1335
+ INIT2(sym_CLOCK_SOFTTIME, "CLOCK_SOFTTIME", sizeof("CLOCK_SOFTTIME")-1, NULL, 0) \
1336
+ INIT2(sym_CLOCK_THREAD_CPUTIME_ID, "CLOCK_THREAD_CPUTIME_ID", sizeof("CLOCK_THREAD_CPUTIME_ID")-1, NULL, 0) \
1337
+ INIT2(sym_CLOCK_TIMEOFDAY, "CLOCK_TIMEOFDAY", sizeof("CLOCK_TIMEOFDAY")-1, NULL, 0) \
1338
+ INIT2(sym_CLOCK_UPTIME, "CLOCK_UPTIME", sizeof("CLOCK_UPTIME")-1, NULL, 0) \
1339
+ INIT2(sym_CLOCK_UPTIME_COARSE, "CLOCK_UPTIME_COARSE", sizeof("CLOCK_UPTIME_COARSE")-1, NULL, 0) \
1340
+ INIT2(sym_CLOCK_UPTIME_FAST, "CLOCK_UPTIME_FAST", sizeof("CLOCK_UPTIME_FAST")-1, NULL, 0) \
1341
+ INIT2(sym_CLOCK_UPTIME_PRECISE, "CLOCK_UPTIME_PRECISE", sizeof("CLOCK_UPTIME_PRECISE")-1, NULL, 0) \
1342
+ INIT2(sym_CLOCK_UPTIME_RAW, "CLOCK_UPTIME_RAW", sizeof("CLOCK_UPTIME_RAW")-1, NULL, 0) \
1343
+ INIT2(sym_CLOCK_VIRTUAL, "CLOCK_VIRTUAL", sizeof("CLOCK_VIRTUAL")-1, NULL, 0) \
1344
+ INIT2(sym_ITIMER_PROF, "ITIMER_PROF", sizeof("ITIMER_PROF")-1, NULL, 0) \
1345
+ INIT2(sym_ITIMER_REAL, "ITIMER_REAL", sizeof("ITIMER_REAL")-1, NULL, 0) \
1346
+ INIT2(sym_ITIMER_REALPROF, "ITIMER_REALPROF", sizeof("ITIMER_REALPROF")-1, NULL, 0) \
1347
+ INIT2(sym_ITIMER_VIRTUAL, "ITIMER_VIRTUAL", sizeof("ITIMER_VIRTUAL")-1, NULL, 0) \
1348
+ INIT2(sym_TIMER_ABSTIME, "TIMER_ABSTIME", sizeof("TIMER_ABSTIME")-1, NULL, 0) \
1349
+ INIT2(sym_d_usleep, "d_usleep", sizeof("d_usleep")-1, "Time::HiRes::usleep"+13, 1) \
1350
+ INIT2(sym_d_ualarm, "d_ualarm", sizeof("d_ualarm")-1, "Time::HiRes::ualarm"+13, 1) \
1351
+ INIT2(sym_d_gettimeofday, "d_gettimeofday", sizeof("d_gettimeofday")-1, "Time::HiRes::gettimeofday"+13, 1) \
1352
+ INIT2(sym_d_getitimer, "d_getitimer", sizeof("d_getitimer")-1, GETITIMER_SUBSTR, 1) \
1353
+ INIT2(sym_d_setitimer, "d_setitimer", sizeof("d_setitimer")-1, SETITIMER_SUBSTR, 1) \
1354
+ INIT2(sym_d_nanosleep, "d_nanosleep", sizeof("d_nanosleep")-1, "Time::HiRes::nanosleep"+13, 1) \
1355
+ INIT2(sym_d_clock_gettime, "d_clock_gettime", sizeof("d_clock_gettime")-1, "Time::HiRes::clock_gettime"+13, 1) \
1356
+ INIT2(sym_d_clock_getres, "d_clock_getres", sizeof("d_clock_getres")-1, "Time::HiRes::clock_getres"+13, 1) \
1357
+ INIT2(sym_d_clock, "d_clock", sizeof("d_clock")-1, "Time::HiRes::clock"+13, 1) \
1358
+ INIT2(sym_d_clock_nanosleep, "d_clock_nanosleep", sizeof("d_clock_nanosleep")-1, "Time::HiRes::clock_nanosleep"+13, 1) \
1359
+ INIT2(sym_d_hires_stat, "d_hires_stat", sizeof("d_hires_stat")-1, NULL, 0) \
1360
+ INIT2(sym_d_futimens, "d_futimens", sizeof("d_futimens")-1, "futimens", 1) \
1361
+ INIT2(sym_d_utimensat, "d_utimensat", sizeof("d_utimensat")-1, "utimensat", 1) \
1362
+ INIT2(sym_d_hires_utime, "d_hires_utime", sizeof("d_hires_utime")-1, NULL, 0) \
1363
+ INIT2(sym_stat, "Time::HiRes::stat"+13, sizeof("stat")-1, NULL, 0) \
1364
+ INIT2(sym_lstat, "Time::HiRes::lstat"+13, sizeof("lstat")-1, NULL, 0) \
1365
+ INIT2(sym_utime, "Time::HiRes::utime"+13, sizeof("utime")-1, NULL, 0)
1366
+ #undef INIT2
1367
+ #define INIT2 (_s , _str , _l , _d , _db ) ((_db) ? (_d) : (_str)),
1368
+ {
1369
+ const static char * expokpv [] = {
1370
+ INIT1
1371
+ };
1372
+ #undef INIT2
1373
+ #define INIT2 (_s , _str , _l , _d , _db ) ((_db) ? -((I8)(_l)) : (_l)),
1374
+ const static I8 expoklen [] = {
1375
+ INIT1
1376
+ };
1377
+ #undef INIT2
1378
+ char buf [64 ];
1379
+ SV * rv = ST (2 );/* 3 items check above */
1380
+ AV * av = MUTABLE_AV (SvRV (rv ));
1381
+ int i = 0 ;
1382
+ buf [0 ] = 'd' ;
1383
+ buf [1 ] = '_' ;
1384
+ if ( !SvROK (rv ) || SvTYPE (av ) != SVt_PVAV )
1385
+ croak_xs_usage (cv ,"cls,ver,expok" );
1386
+ av_extend (av , C_ARRAY_LENGTH (expoklen ));
1387
+ for (;i < C_ARRAY_LENGTH (expoklen ); i ++ ) {
1388
+ I8 l = expoklen [i ];
1389
+ const char * pv = expokpv [i ];
1390
+ if (l < 0 ) {
1391
+ l = - l ;
1392
+ Copy (pv , & buf [2 ], (l + 1 )- 2 , char );
1393
+ pv = buf ;
1394
+ }
1395
+ av_push (av , newSVpvn_share (pv , l , 0 ));
1396
+ }
1397
+ }
1296
1398
}
1297
1399
1298
1400
#if defined(USE_ITHREADS ) && defined(MY_CXT_KEY )
0 commit comments