POSIX-1003
view release on metacpan or search on metacpan
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Properties
HV *
property_table()
PROTOTYPE:
CODE:
RETVAL = fill_properties();
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Limit
HV *
ulimit_table()
PROTOTYPE:
CODE:
RETVAL = fill_ulimit();
OUTPUT:
RETVAL
HV *
rlimit_table()
PROTOTYPE:
CODE:
RETVAL = fill_rlimit();
OUTPUT:
RETVAL
SV *
_ulimit(cmd, value)
int cmd;
long value;
PROTOTYPE: $$
PREINIT:
long result;
CODE:
#ifdef HAS_ULIMIT
result = ulimit(cmd, value);
RETVAL = result==-1 ? &PL_sv_undef : newSViv(result);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
#ifdef HAS_RLIMIT
#ifdef HAS_RLIMIT_64
void
_getrlimit(resource)
int resource;
PROTOTYPE: $
PREINIT:
struct rlimit64 rlim;
int result;
PPCODE:
/* on linux, rlim64_t is a __UQUAD_TYPE */
result = getrlimit64(resource, &rlim);
XPUSHs(sv_2mortal(newSVuv(rlim.rlim_cur)));
XPUSHs(sv_2mortal(newSVuv(rlim.rlim_max)));
XPUSHs(result==-1 ? &PL_sv_no : &PL_sv_yes);
SV *
_setrlimit(resource, cur, max)
int resource;
unsigned long cur;
unsigned long max;
PROTOTYPE: $$$
PREINIT:
struct rlimit64 rlim;
int result;
CODE:
rlim.rlim_cur = cur;
rlim.rlim_max = max;
result = setrlimit64(resource, &rlim);
RETVAL = result==-1 ? &PL_sv_no : &PL_sv_yes;
OUTPUT:
RETVAL
#else /* HAS_RLIMIT_64 */
void
_getrlimit(resource)
int resource;
PROTOTYPE: $
PREINIT:
struct rlimit rlim;
int result;
PPCODE:
/* on linux, rlim64_t is a __ULONGWORD_TYPE */
result = getrlimit(resource, &rlim);
XPUSHs(sv_2mortal(newSVuv(rlim.rlim_cur)));
XPUSHs(sv_2mortal(newSVuv(rlim.rlim_max)));
XPUSHs(result==-1 ? &PL_sv_no : &PL_sv_yes);
SV *
_setrlimit(resource, cur, max)
int resource;
unsigned long cur;
unsigned long max;
PROTOTYPE: $$$
PREINIT:
struct rlimit rlim;
int result;
CODE:
rlim.rlim_cur = cur;
rlim.rlim_max = max;
result = setrlimit(resource, &rlim);
RETVAL = result==-1 ? &PL_sv_no : &PL_sv_yes;
OUTPUT:
RETVAL
#endif /* HAS_RLIMIT_64 */
#else /* HAS_RLIMIT */
void
_getrlimit(resource)
int resource;
PROTOTYPE: $
PPCODE:
XPUSHs(&PL_sv_undef);
XPUSHs(&PL_sv_undef);
XPUSHs(&PL_sv_no);
SV *
_setrlimit(resource, cur, max)
int resource;
unsigned long cur;
unsigned long max;
PROTOTYPE: $$$
CODE:
RETVAL = &PL_sv_no;
OUTPUT:
RETVAL
#endif /* HAS_RLIMIT */
MODULE = POSIX::1003 PACKAGE = POSIX::1003::FS
#ifdef HAS_SYSMKDEV
#include <sys/mkdev.h>
#endif
#ifdef __GNU_LIBRARY__
#include <sys/sysmacros.h>
#endif
SV *
makedev(dev_t major, dev_t minor)
PROTOTYPE: $$
CODE:
#ifdef HAS_SYSMKDEV
RETVAL = newSViv(makedev(major, minor));
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
SV *
major(dev_t dev)
PROTOTYPE: $
CODE:
#ifdef HAS_SYSMKDEV
RETVAL = newSVuv(major(dev));
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
SV *
minor(dev_t dev)
PROTOTYPE: $
CODE:
#ifdef HAS_SYSMKDEV
RETVAL = newSVuv(minor(dev));
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
int
mknod(filename, mode, dev)
char * filename
mode_t mode
dev_t dev
CODE:
#ifdef HAS_MKNOD
RETVAL = mknod(filename, mode, dev);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Events
HV *
events_table()
PROTOTYPE:
CODE:
RETVAL = fill_events();
OUTPUT:
RETVAL
HV *
_poll(handles, timeout)
HV * handles;
int timeout;
PREINIT:
struct pollfd * fds;
HV * ret;
char * key;
char key_str[16];
int rc;
HE * entry;
I32 len;
int j;
int nfd;
PPCODE:
#ifdef HAS_POLL
nfd = hv_iterinit(handles);
Newx(fds, nfd, struct pollfd);
for(j=0; j < nfd; j++)
{ /* Get hash key into 'C' space */
entry = hv_iternext(handles);
key = hv_iterkey(entry, &len);
if(len > 15) len = 15; /* fd-num is always small */
strncpy(key_str, key, len);
key_str[len] = 0;
fds[j].fd = strtoul(key_str, NULL, 10);
fds[j].events = SvUV(hv_iterval(handles, entry));
fds[j].revents = 0; /* returned events */
}
rc = poll(fds, nfd, timeout);
if(rc==-1)
{ XPUSHs(&PL_sv_undef);
}
else if(rc==0)
{ ret = newHV();
XPUSHs(sv_2mortal((SV*)ret));
}
else
{ ret = newHV();
for(j=0; j < nfd; j++)
{ if(fds[j].revents)
{ sprintf((char *)key_str, "%15d", fds[j].fd);
(void)hv_store(ret, key_str, strlen(key_str), newSVuv(fds[j].revents), 0);
}
}
XPUSHs(sv_2mortal((SV*)ret));
}
Safefree(fds);
XSRETURN(1);
#else
errno = ENOSYS;
XPUSHs(&PL_sv_undef);
#endif
MODULE = POSIX::1003 PACKAGE = POSIX::1003::User
HV *
user_table()
PROTOTYPE:
CODE:
RETVAL = fill_user();
OUTPUT:
RETVAL
void
setuid(uid)
uid_t uid
PROTOTYPE: $
INIT:
int result;
PPCODE:
#ifdef HAS_SETUID
result = setuid(uid);
#ifdef CACHE_UID
PL_uid = getuid();
PL_euid = geteuid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
uid_t
getuid()
PROTOTYPE:
INIT:
int result;
PPCODE:
#ifdef HAS_SETUID
result = getuid();
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
setgid(gid)
gid_t gid
PROTOTYPE: $
INIT:
int result;
PPCODE:
#ifdef HAS_SETUID
result = setgid(gid);
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
gid_t
getgid()
PROTOTYPE:
INIT:
int result;
PPCODE:
#ifdef HAS_SETUID
result = getgid();
#ifdef CACHE_UID
PL_gid = getgid();
PL_egid = getegid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
seteuid(euid)
uid_t euid
PROTOTYPE: $
INIT:
int result;
PPCODE:
#ifdef HAS_SETEUID
result = seteuid(euid);
#ifdef CACHE_UID
PL_euid = geteuid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
uid_t
geteuid()
PROTOTYPE:
INIT:
int result;
PPCODE:
#ifdef HAS_SETEUID
result = geteuid();
#ifdef CACHE_UID
PL_egid = getegid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
setegid(egid)
gid_t egid
PROTOTYPE: $
INIT:
int result;
PPCODE:
#ifdef HAS_SETEUID
result = setegid(egid);
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
gid_t
getegid()
PROTOTYPE:
INIT:
int result;
PPCODE:
#ifdef HAS_SETEUID
result = getegid();
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
setreuid(ruid, euid)
uid_t ruid
uid_t euid
PROTOTYPE: $$
INIT:
int result;
PPCODE:
#ifdef HAS_SETREUID
result = setreuid(ruid, euid);
#ifdef CACHE_UID
PL_uid = getuid();
PL_euid = geteuid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
setregid(rgid, egid)
gid_t rgid
gid_t egid
PROTOTYPE: $$
INIT:
int result;
PPCODE:
#ifdef HAS_SETREGID
result = setregid(rgid, egid);
#ifdef CACHE_UID
PL_gid = getgid();
PL_egid = getegid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
int
setresuid(ruid, euid, suid)
uid_t ruid
uid_t euid
uid_t suid
PROTOTYPE: $$$
INIT:
int result;
PPCODE:
#ifdef HAS_SETRESUID
result = setresuid(ruid, euid, suid);
#ifdef CACHE_UID
PL_uid = getuid();
PL_euid = geteuid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
void
getresuid()
PROTOTYPE:
INIT:
uid_t ruid;
uid_t euid;
uid_t suid;
int result;
PPCODE:
#ifdef HAS_SETRESUID
result = getresuid(&ruid, &euid, &suid);
if(result==0) {
XPUSHs(sv_2mortal(newSVuv(ruid)));
XPUSHs(sv_2mortal(newSVuv(euid)));
XPUSHs(sv_2mortal(newSVuv(suid)));
}
#else
errno = ENOSYS;
#endif
int
setresgid(rgid, egid, sgid)
gid_t rgid
gid_t egid
gid_t sgid
PROTOTYPE: $$$
INIT:
int result;
PPCODE:
#ifdef HAS_SETRESGID
result = setresgid(rgid, egid, sgid);
#ifdef CACHE_UID
PL_gid = getgid();
PL_egid = getegid();
#endif
#else
errno = ENOSYS;
result = -1;
#endif
XPUSHs(result==-1 ? &PL_sv_undef : sv_2mortal(newSViv(result)));
void
getresgid()
PROTOTYPE:
INIT:
gid_t rgid;
gid_t egid;
gid_t sgid;
int result;
PPCODE:
#ifdef HAS_SETRESUID
result = getresgid(&rgid, &egid, &sgid);
if(result==0) {
XPUSHs(sv_2mortal(newSVuv(rgid)));
XPUSHs(sv_2mortal(newSVuv(egid)));
XPUSHs(sv_2mortal(newSVuv(sgid)));
}
#else
errno = ENOSYS;
#endif
void
getgroups()
PROTOTYPE:
INIT:
gid_t grouplist[_NGROUPS];
int nr_groups;
PPCODE:
#ifdef HAS_GETGROUPS
nr_groups = getgroups(_NGROUPS, grouplist);
if(nr_groups >= 0) {
int nr;
for(nr = 0; nr < nr_groups; nr++)
XPUSHs(sv_2mortal(newSVuv(grouplist[nr])));
}
#else
errno = ENOSYS;
#endif
void
setgroups(...)
PROTOTYPE: @
INIT:
int index;
gid_t groups[_NGROUPS];
int result;
CODE:
#ifdef HAS_SETGROUPS
for(index = 0; index < items && index < _NGROUPS; index++)
{ groups[index] = (gid_t)SvUV(ST(index));
}
result = setgroups(index, groups);
XPUSHs(result==-1 ? &PL_sv_no : &PL_sv_yes);
#else
errno = ENOSYS;
#endif
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Errno
HV *
errno_table()
PROTOTYPE:
CODE:
RETVAL = fill_errno();
OUTPUT:
RETVAL
SV *
_strerror(int errnr)
PROTOTYPE: $
INIT:
char * buf;
CODE:
#ifdef HAS_STRERROR
buf = strerror(errnr);
RETVAL = buf==NULL ? &PL_sv_undef : newSVpv(buf, 0);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Math
HV *
math_table()
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Proc
HV *
proc_table()
PROTOTYPE:
CODE:
RETVAL = fill_proc();
OUTPUT:
RETVAL
int
getpid()
PROTOTYPE:
CODE:
#ifdef HAS_GETPID
RETVAL = getpid();
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
int
getppid()
PROTOTYPE:
CODE:
#ifdef HAS_GETPPID
RETVAL = getpid();
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Time
MODULE = POSIX::1003 PACKAGE = POSIX::1003::Time
HV *
time_table()
PROTOTYPE:
CODE:
RETVAL = fill_time();
OUTPUT:
RETVAL
void
_strptime(input, format)
const char *input
const char *format
PREINIT:
#ifdef I_TIME
struct tm t = { -1,-1,-1,-1,-1,-1,-1,-1 };
#endif
PPCODE:
#ifdef HAS_STRPTIME
strptime(input, format, &t);
if(t.tm_sec == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_sec);
if(t.tm_min == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_min);
if(t.tm_hour == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_hour);
if(t.tm_mday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_mday);
if(t.tm_mon == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_mon);
if(t.tm_year == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_year);
if(t.tm_wday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_wday);
if(t.tm_yday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_yday);
if(t.tm_isdst== -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_isdst);
#else
errno = ENOSYS;
#endif
void
_mktime(sec, min, hour, mday, mon, year, wday, yday, isdst)
int sec
int min
int hour
int mday
int mon
int year
int wday
int yday
int isdst
PREINIT:
#ifdef I_TIME
struct tm t;
time_t ts;
#endif
PPCODE:
#ifdef HAS_MKTIME
t.tm_sec = sec;
t.tm_min = min;
t.tm_hour = hour;
t.tm_mday = mday;
t.tm_mon = mon;
t.tm_year = year;
t.tm_wday = wday;
t.tm_yday = yday;
t.tm_isdst = isdst;
ts = mktime(&t);
if(ts != -1)
{ mXPUSHi(ts);
if(t.tm_sec == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_sec);
if(t.tm_min == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_min);
if(t.tm_hour == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_hour);
if(t.tm_mday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_mday);
if(t.tm_mon == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_mon);
if(t.tm_year == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_year);
if(t.tm_wday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_wday);
if(t.tm_yday == -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_yday);
if(t.tm_isdst== -1) XPUSHs(&PL_sv_undef); else mXPUSHi(t.tm_isdst);
}
#else
errno = ENOSYS;
#endif
SV *
_strftime(fmt, sec, min, hour, mday, mon, year, wday= -1, yday= -1, isdst= -1)
char *fmt
int sec
int min
int hour
int mday
int mon
int year
int wday
int yday
int isdst
INIT:
char buf[1024];
struct tm t;
CODE:
#ifdef HAS_STRFTIME
t.tm_sec = sec;
t.tm_min = min;
t.tm_hour = hour;
t.tm_mday = mday;
t.tm_mon = mon;
t.tm_year = year;
t.tm_wday = wday;
t.tm_yday = yday;
t.tm_isdst = isdst;
buf[1023] = '\0';
RETVAL = strftime(buf, 1024, fmt, &t)==0 ? &PL_sv_undef
: newSVpv(buf, 0);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
SV *
_lock(fd, function, param)
int fd
int function
SV * param
PROTOTYPE: $$$
INIT:
#ifdef HAS_FCNTL
struct flock locker;
SV **type, **whence, **start, **len;
HV *fl, *fs;
#endif
CODE:
#ifdef HAS_FCNTL
fs = (HV *)SvRV(param);
type = hv_fetch(fs, "type", 4, 0);
whence = hv_fetch(fs, "whence", 6, 0);
start = hv_fetch(fs, "start", 5, 0);
len = hv_fetch(fs, "len", 3, 0);
locker.l_type = SvIV(*type );
locker.l_whence = SvIV(*whence);
locker.l_start = SvIV(*start );
locker.l_len = SvIV(*len );
locker.l_pid = 0;
if(fcntl(fd, function, &locker)==-1)
XSRETURN_UNDEF;
fl = newHV();
(void)hv_store(fl, "type", 4, newSViv(locker.l_type ), 0);
(void)hv_store(fl, "whence", 6, newSViv(locker.l_whence), 0);
(void)hv_store(fl, "start", 5, newSViv(locker.l_start ), 0);
(void)hv_store(fl, "len", 3, newSViv(locker.l_len ), 0);
if(function==F_GETLK)
(void)hv_store(fl, "pid",3, newSViv(locker.l_pid ), 0);
RETVAL = newRV_noinc((SV *)fl);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
void
_own_ex(function, fd, pid, type)
int function
int fd
pid_t pid
int type
PROTOTYPE: $$$$
INIT:
PPCODE:
#ifdef HAS_FCNTL_OWN_EX
{ struct f_owner_ex ex;
ex.type = type;
ex.pid = pid;
if(fcntl(fd, function, &ex)==-1)
return;
XPUSHs(sv_2mortal(newSVuv(ex.type)));
XPUSHs(sv_2mortal(newSVuv(ex.pid)));
}
#else
errno = ENOSYS;
#endif
SV *
_flock(fd, function)
int fd
int function
PROTOTYPE: $$
INIT:
int ret;
CODE:
#ifdef HAS_FLOCK
ret = flock(fd, function);
RETVAL = ret==-1 ? &PL_sv_undef : newSVuv(ret);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
SV *
_lockf(fd, function, len)
int fd
int function
off_t len
PROTOTYPE: $$$
INIT:
int ret;
CODE:
#ifdef HAS_LOCKF
ret = lockf(fd, function, len);
RETVAL = ret==-1 ? &PL_sv_undef : newSVuv(ret);
#else
errno = ENOSYS;
RETVAL = &PL_sv_undef;
#endif
OUTPUT:
RETVAL
( run in 1.100 second using v1.01-cache-2.11-cpan-5511b514fd6 )