@@ -199,6 +199,14 @@ ZEND_BEGIN_ARG_INFO(arginfo_posix_getrlimit, 0)
199
199
ZEND_END_ARG_INFO ()
200
200
#endif
201
201
202
+ #ifdef HAVE_SETRLIMIT
203
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_posix_setrlimit , 0 , 0 , 3 )
204
+ ZEND_ARG_INFO (0 , resource )
205
+ ZEND_ARG_INFO (0 , softlimit )
206
+ ZEND_ARG_INFO (0 , hardlimit )
207
+ ZEND_END_ARG_INFO ()
208
+ #endif
209
+
202
210
ZEND_BEGIN_ARG_INFO (arginfo_posix_get_last_error , 0 )
203
211
ZEND_END_ARG_INFO ()
204
212
@@ -293,6 +301,9 @@ const zend_function_entry posix_functions[] = {
293
301
#ifdef HAVE_GETRLIMIT
294
302
PHP_FE (posix_getrlimit , arginfo_posix_getrlimit )
295
303
#endif
304
+ #ifdef HAVE_SETRLIMIT
305
+ PHP_FE (posix_setrlimit , arginfo_posix_setrlimit )
306
+ #endif
296
307
297
308
PHP_FE (posix_get_last_error , arginfo_posix_get_last_error )
298
309
PHP_FALIAS (posix_errno , posix_get_last_error , arginfo_posix_get_last_error )
@@ -344,7 +355,54 @@ static PHP_MINIT_FUNCTION(posix)
344
355
#ifdef S_IFSOCK
345
356
REGISTER_LONG_CONSTANT ("POSIX_S_IFSOCK" , S_IFSOCK , CONST_CS | CONST_PERSISTENT );
346
357
#endif
347
-
358
+ #ifdef RLIMIT_AS
359
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_AS" , RLIMIT_AS , CONST_CS | CONST_PERSISTENT );
360
+ #endif
361
+ #ifdef RLIMIT_CORE
362
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_CORE" , RLIMIT_CORE , CONST_CS | CONST_PERSISTENT );
363
+ #endif
364
+ #ifdef RLIMIT_CPU
365
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_CPU" , RLIMIT_CPU , CONST_CS | CONST_PERSISTENT );
366
+ #endif
367
+ #ifdef RLIMIT_DATA
368
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_DATA" , RLIMIT_DATA , CONST_CS | CONST_PERSISTENT );
369
+ #endif
370
+ #ifdef RLIMIT_FSIZE
371
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_FSIZE" , RLIMIT_FSIZE , CONST_CS | CONST_PERSISTENT );
372
+ #endif
373
+ #ifdef RLIMIT_LOCKS
374
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_LOCKS" , RLIMIT_LOCKS , CONST_CS | CONST_PERSISTENT );
375
+ #endif
376
+ #ifdef RLIMIT_MEMLOCK
377
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_MEMLOCK" , RLIMIT_MEMLOCK , CONST_CS | CONST_PERSISTENT );
378
+ #endif
379
+ #ifdef RLIMIT_MSGQUEUE
380
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_MSGQUEUE" , RLIMIT_MSGQUEUE , CONST_CS | CONST_PERSISTENT );
381
+ #endif
382
+ #ifdef RLIMIT_NICE
383
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_NICE" , RLIMIT_NICE , CONST_CS | CONST_PERSISTENT );
384
+ #endif
385
+ #ifdef RLIMIT_NOFILE
386
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_NOFILE" , RLIMIT_NOFILE , CONST_CS | CONST_PERSISTENT );
387
+ #endif
388
+ #ifdef RLIMIT_NPROC
389
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_NPROC" , RLIMIT_NPROC , CONST_CS | CONST_PERSISTENT );
390
+ #endif
391
+ #ifdef RLIMIT_RSS
392
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_RSS" , RLIMIT_RSS , CONST_CS | CONST_PERSISTENT );
393
+ #endif
394
+ #ifdef RLIMIT_RTPRIO
395
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_RTPRIO" , RLIMIT_RTPRIO , CONST_CS | CONST_PERSISTENT );
396
+ #endif
397
+ #ifdef RLIMIT_RTTIME
398
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_RTTIME" , RLIMIT_RTTIME , CONST_CS | CONST_PERSISTENT );
399
+ #endif
400
+ #ifdef RLIMIT_SIGPENDING
401
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_SIGPENDING" , RLIMIT_SIGPENDING , CONST_CS | CONST_PERSISTENT );
402
+ #endif
403
+ #ifdef RLIMIT_STACK
404
+ REGISTER_LONG_CONSTANT ("POSIX_RLIMIT_STACK" , RLIMIT_STACK , CONST_CS | CONST_PERSISTENT );
405
+ #endif
348
406
return SUCCESS ;
349
407
}
350
408
/* }}} */
@@ -1322,6 +1380,44 @@ PHP_FUNCTION(posix_getrlimit)
1322
1380
1323
1381
#endif /* HAVE_GETRLIMIT */
1324
1382
1383
+ #ifdef HAVE_SETRLIMIT
1384
+ /* {{{ proto bool posix_setrlimit(int resource, string softlimit, string hardlimit)
1385
+ Set system resource consumption limits (POSIX.1-2001) */
1386
+ PHP_FUNCTION (posix_setrlimit )
1387
+ {
1388
+ struct rlimit rl ;
1389
+ char * cur , * max ;
1390
+ size_t cur_len , max_len ;
1391
+ int res ;
1392
+
1393
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "lss" , & res , & cur , & cur_len , & max , & max_len ) == FAILURE ) {
1394
+ RETURN_FALSE ;
1395
+ }
1396
+
1397
+ if (!strcasecmp (cur , "unlimited" )) {
1398
+ rl .rlim_cur = RLIM_INFINITY ;
1399
+ } else {
1400
+ rl .rlim_cur = zend_atol (cur , cur_len );
1401
+ }
1402
+
1403
+ if (!strcasecmp (max , "unlimited" )) {
1404
+ rl .rlim_max = RLIM_INFINITY ;
1405
+ } else {
1406
+ rl .rlim_max = zend_atol (max , max_len );
1407
+ }
1408
+
1409
+ if (setrlimit (res , & rl ) == -1 ) {
1410
+ POSIX_G (last_error ) = errno ;
1411
+ RETURN_FALSE ;
1412
+ }
1413
+
1414
+ RETURN_TRUE ;
1415
+ }
1416
+ /* }}} */
1417
+
1418
+ #endif /* HAVE_SETRLIMIT */
1419
+
1420
+
1325
1421
/* {{{ proto int posix_get_last_error(void)
1326
1422
Retrieve the error number set by the last posix function which failed. */
1327
1423
PHP_FUNCTION (posix_get_last_error )
0 commit comments