ZEND_GET_MODULE(posix)
#endif
+#define PHP_POSIX_NO_ARGS if (ZEND_NUM_ARGS()) return;
+
+#define PHP_POSIX_RETURN_LONG_FUNC(func_name) \
+ PHP_POSIX_NO_ARGS \
+ RETURN_LONG(func_name());
+
+#define PHP_POSIX_SINGLE_ARG_FUNC(func_name) \
+ long val; \
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &val) == FAILURE) return; \
+ if (func_name(val) < 0) { \
+ POSIX_G(last_error) = errno; \
+ RETURN_FALSE; \
+ } \
+ RETURN_TRUE;
+
/* {{{ proto bool posix_kill(int pid, int sig)
Send a signal to a process (POSIX.1, 3.3.2) */
Get the current process id (POSIX.1, 4.1.1) */
PHP_FUNCTION(posix_getpid)
{
- pid_t pid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- pid = getpid();
- RETURN_LONG(pid);
+ PHP_POSIX_RETURN_LONG_FUNC(getpid);
}
/* }}} */
Get the parent process id (POSIX.1, 4.1.1) */
PHP_FUNCTION(posix_getppid)
{
- pid_t ppid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- ppid = getppid();
- RETURN_LONG(ppid);
+ PHP_POSIX_RETURN_LONG_FUNC(getppid);
}
/* }}} */
Get the current user id (POSIX.1, 4.2.1) */
PHP_FUNCTION(posix_getuid)
{
- uid_t uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- uid = getuid();
- RETURN_LONG(uid);
+ PHP_POSIX_RETURN_LONG_FUNC(getuid);
}
/* }}} */
Get the current group id (POSIX.1, 4.2.1) */
PHP_FUNCTION(posix_getgid)
{
- gid_t gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- gid = getgid();
- RETURN_LONG(gid);
+ PHP_POSIX_RETURN_LONG_FUNC(getgid);
}
/* }}} */
Get the current effective user id (POSIX.1, 4.2.1) */
PHP_FUNCTION(posix_geteuid)
{
- uid_t uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- uid = geteuid();
- RETURN_LONG(uid);
+ PHP_POSIX_RETURN_LONG_FUNC(geteuid);
}
/* }}} */
Get the current effective group id (POSIX.1, 4.2.1) */
PHP_FUNCTION(posix_getegid)
{
- gid_t gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- gid = getegid();
- RETURN_LONG(gid);
- }
+ PHP_POSIX_RETURN_LONG_FUNC(getegid);
+}
/* }}} */
/* {{{ proto bool posix_setuid(long uid)
Set user id (POSIX.1, 4.2.2) */
PHP_FUNCTION(posix_setuid)
{
- long uid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &uid) == FAILURE)
- return;
-
- if (setuid(uid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
+ PHP_POSIX_SINGLE_ARG_FUNC(setuid);
}
/* }}} */
Set group id (POSIX.1, 4.2.2) */
PHP_FUNCTION(posix_setgid)
{
- long gid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &gid) == FAILURE)
- return;
-
- if (setgid(gid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
+ PHP_POSIX_SINGLE_ARG_FUNC(setgid);
}
/* }}} */
#ifdef HAVE_SETEUID
PHP_FUNCTION(posix_seteuid)
{
- long euid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &euid) == FAILURE)
- return;
-
- if (seteuid(euid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
+ PHP_POSIX_SINGLE_ARG_FUNC(seteuid);
}
#endif
/* }}} */
#ifdef HAVE_SETEGID
PHP_FUNCTION(posix_setegid)
{
- long egid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &egid) == FAILURE)
- return;
-
- if (setegid(egid) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_TRUE;
+ PHP_POSIX_SINGLE_ARG_FUNC(setegid);
}
#endif
/* }}} */
int result;
int i;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
if ((result = getgroups(NGROUPS_MAX, gidlist)) < 0) {
POSIX_G(last_error) = errno;
{
char *p;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
if (NULL == (p = getlogin())) {
POSIX_G(last_error) = errno;
Get current process group id (POSIX.1, 4.3.1) */
PHP_FUNCTION(posix_getpgrp)
{
- pid_t pgrp;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- pgrp = getpgrp();
- RETURN_LONG(pgrp);
+ PHP_POSIX_RETURN_LONG_FUNC(getpgrp);
}
/* }}} */
#ifdef HAVE_SETSID
PHP_FUNCTION(posix_setsid)
{
- pid_t sid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
- sid = setsid();
- RETURN_LONG(sid);
+ PHP_POSIX_RETURN_LONG_FUNC(setsid);
}
#endif
/* }}} */
#ifdef HAVE_GETPGID
PHP_FUNCTION(posix_getpgid)
{
- long pid;
- pid_t pgid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE)
- return;
-
- if ((pgid = getpgid(pid)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_LONG(pgid);
+ PHP_POSIX_SINGLE_ARG_FUNC(getpgid);
}
#endif
/* }}} */
#ifdef HAVE_GETSID
PHP_FUNCTION(posix_getsid)
{
- long pid;
- pid_t sid;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid) == FAILURE)
- return;
-
- if ((sid = getsid(pid)) < 0) {
- POSIX_G(last_error) = errno;
- RETURN_FALSE;
- }
-
- RETURN_LONG(sid);
+ PHP_POSIX_SINGLE_ARG_FUNC(getsid);
}
#endif
/* }}} */
{
struct utsname u;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
if (uname(&u) < 0) {
POSIX_G(last_error) = errno;
struct tms t;
clock_t ticks;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
if((ticks = times(&t)) < 0) {
POSIX_G(last_error) = errno;
{
char buffer[L_ctermid];
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
if (NULL == ctermid(buffer)) {
/* Found no documentation how the defined behaviour is when this
char buffer[MAXPATHLEN];
char *p;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
p = VCWD_GETCWD(buffer, MAXPATHLEN);
if (!p) {
{
struct limitlist *l = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
+ PHP_POSIX_NO_ARGS;
array_init(return_value);
Retrieve the error number set by the last posix function which failed. */
PHP_FUNCTION(posix_get_last_error)
{
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE)
- return;
-
+ PHP_POSIX_NO_ARGS;
+
RETURN_LONG(POSIX_G(last_error));
}
/* }}} */