view release on metacpan or search on metacpan
INIT:
SV *irs;
int ret;
int count;
SV* buffer;
char *buf;
int do_loop=1;
int tmp;
PPCODE:
if(SvOK(fd)&& SvIOK(fd)){
irs=get_sv("/",0);
if(irs){
#Found variable. Read records
if(SvOK(irs)){
if(SvROK(irs)){
//fprintf(stderr, "DOING RECORD READ\n");
//SLURP RECORDS
SV* v=SvRV(irs); //Dereference to get SV
const-xs.inc view on Meta::CPAN
dTARGET;
#endif
STRLEN len;
int type;
/* IV iv; Uncomment this if you need to return IVs */
/* NV nv; Uncomment this if you need to return NVs */
/* const char *pv; Uncomment this if you need to return PVs */
INPUT:
SV * sv;
const char * s = SvPV(sv, len);
PPCODE:
type = constant(aTHX_ s, len);
/* Return 1 or 2 items. First is error message, or undef if no error.
Second, if present, is found value */
switch (type) {
case PERL_constant_NOTFOUND:
sv =
sv_2mortal(newSVpvf("%s is not a valid IO::FD macro", s));
PUSHs(sv);
break;
case PERL_constant_NOTDEF:
fallback/const-xs.inc view on Meta::CPAN
dTARGET;
#endif
STRLEN len;
int type;
/* IV iv; Uncomment this if you need to return IVs */
/* NV nv; Uncomment this if you need to return NVs */
/* const char *pv; Uncomment this if you need to return PVs */
INPUT:
SV * sv;
const char * s = SvPV(sv, len);
PPCODE:
type = constant(aTHX_ s, len);
/* Return 1 or 2 items. First is error message, or undef if no error.
Second, if present, is found value */
switch (type) {
case PERL_constant_NOTFOUND:
sv =
sv_2mortal(newSVpvf("%s is not a valid IO::FD macro", s));
PUSHs(sv);
break;
case PERL_constant_NOTDEF:
xs-include/file.c view on Meta::CPAN
int ret=-1;
char *path;
struct stat buf;
int len;
long long atime;
long long mtime;
long long ctime;
char scratch[32]; //
SV *tmp;
PPCODE:
if(SvOK(target) && SvIOK(target)){
//Integer => always an fstat
ret=fstat(SvIV(target), &buf);
}
else if(SvOK(target)&& SvPOK(target)){
//String => stat OR lstat
len=SvCUR(target);
Newx(path, len+1, char); //Allocate plus null
xs-include/mkfifo.c view on Meta::CPAN
SV*
mkfifo(path, ...)
char *path
//int mode
PREINIT:
int f;
int mode=0666; //Default if not provided
PPCODE:
if(items==2){
mode=SvIV(ST(1));
}
f=mkfifo(path, mode);
if(f<0){
//RETVAL=&PL_sv_undef;
XSRETURN_UNDEF;
}
else{
if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){
xs-include/mkfifoat.pl view on Meta::CPAN
$output=qq|
SV*
mkfifoat(fd, path, ...)
SV *fd
char *path
PREINIT:
int f;
int mode=0666; //Default if not provided
PPCODE:
if(SvOK(fd) &&SvIOK(fd)){
if(items >=3){
mode=SvIV(ST(2));
}
f=mkfifoat(SvIV(fd), path, mode);
if(f<0){
XSRETURN_UNDEF;
}
else{
if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){
xs-include/open.c view on Meta::CPAN
SV *
openat(dir_fd, path, mode , ...)
SV* dir_fd;
char *path;
int mode;
PREINIT:
int f;
int permissions=0666;
PPCODE:
if(items==4){
permissions=SvIV(ST(3));
}
if(SvOK(dir_fd) && SvIOK(dir_fd)){
f=openat(SvIV(dir_fd), path, mode, permissions);
if(f<0){
XSRETURN_UNDEF;
}
else{
xs-include/open.c view on Meta::CPAN
SV *
open(path, mode , ...)
char *path;
int mode;
PREINIT:
int f;
int permissions=0666;
PPCODE:
if(items==3){
permissions=SvIV(ST(2));
}
f=open(path, mode, permissions);
if(f<0){
XSRETURN_UNDEF;
}
else{
if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){
xs-include/read.c view on Meta::CPAN
SV*
sysread(fd, data, len, ...)
SV* fd;
SV* data
size_t len
INIT:
ssize_t ret;
char *buf;
long offset=0;
PPCODE:
//TODO: allow unspecified len and offset
//grow scalar to fit potental read
if(SvOK(fd) && SvIOK(fd)){
if(SvREADONLY(data)){
Perl_croak(aTHX_ "%s", PL_no_modify);
}
if(items >=4 ){
//len=SvIOK(ST(2))?SvIV(ST(2)):0;
offset=SvIOK(ST(3))?SvIV(ST(3)):0;
xs-include/read.c view on Meta::CPAN
pread(fd, data, len, offset)
SV *fd;
SV *data;
size_t len
long offset;
INIT:
ssize_t ret;
char *buf;
PPCODE:
//TODO: allow unspecified len and offset
//grow scalar to fit potental read
if(SvOK(fd) && SvIOK(fd)){
if(SvREADONLY(data)){
Perl_croak(aTHX_ "%s", PL_no_modify);
}
buf = SvPOK(data) ? SvGROW(data, len+1) : 0;
xs-include/read.c view on Meta::CPAN
sysread3(fd, data, len)
SV *fd;
SV* data
size_t len
INIT:
ssize_t ret;
char *buf;
long offset;
PPCODE:
if(SvOK(fd) &&SvIOK(fd)){
if(SvREADONLY(data)){
Perl_croak(aTHX_ "%s", PL_no_modify);
}
size_t data_len=SvCUR(data);
//fprintf(stderr, "Length of buffer is: %d\n", data_len);
//fprintf(stderr, "Length of request is: %d\n",len);
buf = SvPOK(data) ? SvGROW(data,len+1) : 0;
xs-include/read.c view on Meta::CPAN
sysread4(fd, data, len, offset)
SV* fd;
SV* data
size_t len
long offset
INIT:
ssize_t ret;
char *buf;
PPCODE:
if(SvOK(fd) &&SvIOK(fd)){
if(SvREADONLY(data)){
Perl_croak(aTHX_ "%s", PL_no_modify);
}
#grow scalar to fit potental read
long data_len=sv_len(data);
long request_len;
if(offset<0){
offset=data_len-offset;
xs-include/sendfile.pl view on Meta::CPAN
SV * source
SV * len
SV * offset
INIT:
off_t l;
off_t o;
int ret;
PPCODE:
if(SvOK(socket) && SvIOK(socket) && SvOK(source) && SvIOK(source)){
l=SvIV(len);
o=SvIV(offset);
#if defined(IO_FD_OS_DARWIN)
ret=sendfile(SvIV(source),SvIV(socket),SvIV(offset),&l, NULL, 0);
#endif
#if defined(IO_FD_OS_BSD)
ret=sendfile(SvIV(source),SvIV(socket),SvIV(offset),l, NULL, 0,0);
#endif
#if defined(IO_FD_OS_LINUX)
xs-include/socket.c view on Meta::CPAN
SV *
listen(listener,backlog)
SV * listener;
int backlog;
INIT:
int ret;
PPCODE:
if(SvOK(listener) && SvIOK(listener)){
ret=listen(SvIV(listener), backlog);
if(ret<0){
//RETVAL=&PL_sv_undef;
XSRETURN_UNDEF;
}
else{
//RETVAL=newSViv(ret+1);
XSRETURN_IV(ret+1);
xs-include/socket.c view on Meta::CPAN
SV *new_fd=NULL;
unsigned int len=sizeof(struct sockaddr_storage);
int count=0;
#if defined(IO_FD_OS_LINUX)
int flags;
#endif
PPCODE:
if(SvOK(listen_fd) && SvIOK(listen_fd)){
#if defined(IO_FD_OS_LINUX)
while((ret=accept4(SvIV(listen_fd),accept_multiple_next_buf, &len,SOCK_NONBLOCK))>=0){
//fcntl(ret, F_SETFL, O_NONBLOCK);
#endif
#if defined(IO_FD_OS_DARWIN) || defined(IO_FD_OS_BSD)
while((ret=accept(SvIV(listen_fd),accept_multiple_next_buf, &len))>=0){
#endif
if(ret>PL_maxsysfd){
xs-include/socket.c view on Meta::CPAN
OUTPUT:
RETVAL
#SOCKATMARK
##########
SV*
sockatmark(fd)
SV *fd;
INIT:
int ret;
PPCODE:
if(SvOK(fd)&&SvIOK(fd)){
ret=sockatmark(SvIV(fd));
if(ret<0){
XSRETURN_UNDEF;
}
else{
XSRETURN_IV(ret);
}
}
xs-include/socket.c view on Meta::CPAN
RETVAL
void
shutdown(fd, how)
SV *fd
int how
INIT:
int ret;
PPCODE:
if(SvOK(fd)&& SvIOK(fd)){
ret=shutdown(SvIV(fd), how);
if(ret<0){
XSRETURN_UNDEF;
}
else{
mXPUSHs(newSViv(1));
XSRETURN(1);
}
xs-include/temp.c view on Meta::CPAN
INIT:
int ret;
SV *path_sv;
char *path;
int len=0;
int min_ok=1;
ssize_t bufsize,outsize;
char proc[MAXPATHLEN];
PPCODE:
len=strlen(template);
if(len<6){
Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");
}
for(int i=1; i<=6; i++){
min_ok=min_ok&&(template[len-i]=='X');
}
if(!min_ok){
Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");
xs-include/temp.c view on Meta::CPAN
SV*
mktemp(template)
char *template
INIT:
char *ret;
char *buf;
int len=0;
int min_ok=1;
PPCODE:
len=strlen(template);
if(len<6){
Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");
}
for(int i=1; i<=6; i++){
min_ok=min_ok&&(template[len-i]=='X');
}
if(!min_ok){
xs-include/write.c view on Meta::CPAN
syswrite(fd,data, ...)
SV *fd
SV* data
INIT:
ssize_t ret;
char *buf;
STRLEN max;//=SvCUR(data);
size_t len;
long offset;
PPCODE:
if(!SvOK(data)){
Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
XSRETURN_IV(0);
}
max=SvCUR(data);
if(items >=4 ){
//length and Offset provided
len=SvIOK(ST(2))?SvIV(ST(2)):0;
offset=SvIOK(ST(3))?SvIV(ST(3)):0;
xs-include/write.c view on Meta::CPAN
pwrite(fd, data, len, offset)
SV *fd
SV* data
size_t len;
long offset;
INIT:
ssize_t ret;
char *buf;
STRLEN max;//=SvCUR(data);
PPCODE:
if(!SvOK(data)){
Perl_warn(aTHX_ "%s", "IO::FD::pwrite called with use of uninitialized value");
XSRETURN_IV(0);
}
max=SvCUR(data);
//Ensure we don't attempt to write memory we don't have!
len= max<len?max:len;
if(SvOK(fd) && SvIOK(fd)){
xs-include/write.c view on Meta::CPAN
SV*
syswrite2(fd,data)
SV* fd
SV* data
INIT:
ssize_t ret;
char *buf;
size_t len;
PPCODE:
if(SvOK(fd) && SvIOK(fd)){
if(!SvOK(data)){
Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
XSRETURN_IV(0);
}
len=SvPOK(data)?SvCUR(data):0;
//TODO: fix negative offset processing
//TODO: allow unspecified len and offset
xs-include/write.c view on Meta::CPAN
syswrite3(fd,data,len)
SV* fd
SV* data
size_t len
INIT:
ssize_t ret;
char *buf;
STRLEN max;//=SvCUR(data);
long offset=0;
PPCODE:
if(SvOK(fd) && SvIOK(fd)){
if(!SvOK(data)){
Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
XSRETURN_IV(0);
}
//TODO: fix negative offset processing
//TODO: allow unspecified len and offset
//fprintf(stderr,"Input size: %zu\n",SvCUR(data));
xs-include/write.c view on Meta::CPAN
syswrite4(fd,data,len,offset)
SV* fd
SV* data
size_t len
long offset
INIT:
ssize_t ret;
char *buf;
STRLEN max;//=SvCUR(data);
PPCODE:
//TODO: fix negative offset processing
//TODO: allow unspecified len and offset
if(SvOK(fd) && SvIOK(fd)){
if(!SvOK(data)){
Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
XSRETURN_IV(0);
}
//fprintf(stderr,"Input size: %zu\n",SvCUR(data));