4 #include <sys/utsname.h>
9 #define getpgrp(a,b) not_here("getpgrp")
12 #define nice(a) not_here("nice")
15 #define readlink(a,b,c) not_here("readlink")
18 #define setpgid(a,b) not_here("setpgid")
21 #define setpgrp(a,b) not_here("setpgrp")
24 #define setsid() not_here("setsid")
27 #define symlink(a,b) not_here("symlink")
30 #define tcgetpgrp(a) not_here("tcgetpgrp")
33 #define tcsetpgrp(a,b) not_here("tcsetpgrp")
36 #define times(a) not_here("times")
39 #define uname(a) not_here("uname")
42 #define waitpid(a,b,c) not_here("waitpid")
49 croak("POSIX::%s not implemented on this architecture", s);
54 XS_POSIX__exit(ix, ax, items)
60 croak("Usage: POSIX::_exit(status)");
63 int status = (int)SvIV(ST(1));
71 XS_POSIX_chdir(ix, ax, items)
77 croak("Usage: POSIX::chdir(path)");
80 char * path = SvPV(ST(1),na);
84 ST(0) = sv_newmortal();
85 sv_setiv(ST(0), (I32)RETVAL);
91 XS_POSIX_chmod(ix, ax, items)
97 croak("Usage: POSIX::chmod(path, mode)");
100 char * path = SvPV(ST(1),na);
101 mode_t mode = (int)SvIV(ST(2));
104 RETVAL = chmod(path, mode);
105 ST(0) = sv_newmortal();
106 sv_setiv(ST(0), (I32)RETVAL);
112 XS_POSIX_close(ix, ax, items)
118 croak("Usage: POSIX::close(fd)");
121 int fd = (int)SvIV(ST(1));
125 ST(0) = sv_newmortal();
126 sv_setiv(ST(0), (I32)RETVAL);
132 XS_POSIX_dup(ix, ax, items)
138 croak("Usage: POSIX::dup(fd)");
141 int fd = (int)SvIV(ST(1));
145 ST(0) = sv_newmortal();
146 sv_setiv(ST(0), (I32)RETVAL);
152 XS_POSIX_dup2(ix, ax, items)
158 croak("Usage: POSIX::dup2(fd1, fd2)");
161 int fd1 = (int)SvIV(ST(1));
162 int fd2 = (int)SvIV(ST(2));
165 RETVAL = dup2(fd1, fd2);
166 ST(0) = sv_newmortal();
167 sv_setiv(ST(0), (I32)RETVAL);
173 XS_POSIX_fdopen(ix, ax, items)
179 croak("Usage: POSIX::fdopen(fd, type)");
182 int fd = (int)SvIV(ST(1));
183 char * type = SvPV(ST(2),na);
186 RETVAL = fdopen(fd, type);
187 ST(0) = sv_newmortal();
188 sv_setnv(ST(0), (double)(unsigned long)RETVAL);
194 XS_POSIX_fstat(ix, ax, items)
200 croak("Usage: POSIX::fstat(fd, buf)");
203 int fd = (int)SvIV(ST(1));
204 struct stat * buf = (struct stat*)sv_grow(ST(2),sizeof(struct stat));
207 RETVAL = fstat(fd, buf);
208 ST(0) = sv_newmortal();
209 sv_setiv(ST(0), (I32)RETVAL);
210 SvCUR(ST(2)) = sizeof(struct stat);
216 XS_POSIX_getpgrp(ix, ax, items)
222 croak("Usage: POSIX::getpgrp(pid)");
225 int pid = (int)SvIV(ST(1));
228 RETVAL = getpgrp(pid);
229 ST(0) = sv_newmortal();
230 sv_setiv(ST(0), (I32)RETVAL);
236 XS_POSIX_link(ix, ax, items)
242 croak("Usage: POSIX::link()");
248 ST(0) = sv_newmortal();
249 sv_setiv(ST(0), (I32)RETVAL);
255 XS_POSIX_lseek(ix, ax, items)
261 croak("Usage: POSIX::lseek()");
267 ST(0) = sv_newmortal();
268 sv_setiv(ST(0), (I32)RETVAL);
274 XS_POSIX_lstat(ix, ax, items)
280 croak("Usage: POSIX::lstat()");
286 ST(0) = sv_newmortal();
287 sv_setiv(ST(0), (I32)RETVAL);
293 XS_POSIX_mkdir(ix, ax, items)
299 croak("Usage: POSIX::mkdir()");
305 ST(0) = sv_newmortal();
306 sv_setiv(ST(0), (I32)RETVAL);
312 XS_POSIX_nice(ix, ax, items)
318 croak("Usage: POSIX::nice(incr)");
321 int incr = (int)SvIV(ST(1));
325 ST(0) = sv_newmortal();
326 sv_setiv(ST(0), (I32)RETVAL);
332 XS_POSIX_open(ix, ax, items)
338 croak("Usage: POSIX::open()");
344 ST(0) = sv_newmortal();
345 sv_setiv(ST(0), (I32)RETVAL);
351 XS_POSIX_pipe(ix, ax, items)
357 croak("Usage: POSIX::pipe()");
363 ST(0) = sv_newmortal();
364 sv_setiv(ST(0), (I32)RETVAL);
370 XS_POSIX_read(ix, ax, items)
376 croak("Usage: POSIX::read()");
382 ST(0) = sv_newmortal();
383 sv_setiv(ST(0), (I32)RETVAL);
389 XS_POSIX_readlink(ix, ax, items)
395 croak("Usage: POSIX::readlink(path, buf, bufsiz)");
398 char * path = SvPV(ST(1),na);
399 char * buf = sv_grow(ST(2), SvIV(ST(3)));
400 int bufsiz = (int)SvIV(ST(3));
403 RETVAL = readlink(path, buf, bufsiz);
404 ST(0) = sv_newmortal();
405 sv_setiv(ST(0), (I32)RETVAL);
411 XS_POSIX_rename(ix, ax, items)
417 croak("Usage: POSIX::rename()");
423 ST(0) = sv_newmortal();
424 sv_setiv(ST(0), (I32)RETVAL);
430 XS_POSIX_rmdir(ix, ax, items)
436 croak("Usage: POSIX::rmdir()");
442 ST(0) = sv_newmortal();
443 sv_setiv(ST(0), (I32)RETVAL);
449 XS_POSIX_setgid(ix, ax, items)
455 croak("Usage: POSIX::setgid()");
461 ST(0) = sv_newmortal();
462 sv_setiv(ST(0), (I32)RETVAL);
468 XS_POSIX_setpgid(ix, ax, items)
474 croak("Usage: POSIX::setpgid(pid, pgid)");
477 pid_t pid = (int)SvIV(ST(1));
478 pid_t pgid = (int)SvIV(ST(2));
481 RETVAL = setpgid(pid, pgid);
482 ST(0) = sv_newmortal();
483 sv_setiv(ST(0), (I32)RETVAL);
489 XS_POSIX_setpgrp(ix, ax, items)
495 croak("Usage: POSIX::setpgrp(pid, pgrp)");
498 int pid = (int)SvIV(ST(1));
499 int pgrp = (int)SvIV(ST(2));
502 RETVAL = setpgrp(pid, pgrp);
503 ST(0) = sv_newmortal();
504 sv_setiv(ST(0), (I32)RETVAL);
510 XS_POSIX_setsid(ix, ax, items)
516 croak("Usage: POSIX::setsid()");
522 ST(0) = sv_newmortal();
523 sv_setiv(ST(0), (I32)RETVAL);
529 XS_POSIX_setuid(ix, ax, items)
535 croak("Usage: POSIX::setuid()");
541 ST(0) = sv_newmortal();
542 sv_setiv(ST(0), (I32)RETVAL);
548 XS_POSIX_stat(ix, ax, items)
554 croak("Usage: POSIX::stat()");
560 ST(0) = sv_newmortal();
561 sv_setiv(ST(0), (I32)RETVAL);
567 XS_POSIX_symlink(ix, ax, items)
573 croak("Usage: POSIX::symlink()");
579 ST(0) = sv_newmortal();
580 sv_setiv(ST(0), (I32)RETVAL);
586 XS_POSIX_system(ix, ax, items)
592 croak("Usage: POSIX::system()");
598 ST(0) = sv_newmortal();
599 sv_setiv(ST(0), (I32)RETVAL);
605 XS_POSIX_tcgetpgrp(ix, ax, items)
611 croak("Usage: POSIX::tcgetpgrp(fd)");
614 int fd = (int)SvIV(ST(1));
617 RETVAL = tcgetpgrp(fd);
618 ST(0) = sv_newmortal();
619 sv_setiv(ST(0), (I32)RETVAL);
625 XS_POSIX_tcsetpgrp(ix, ax, items)
631 croak("Usage: POSIX::tcsetpgrp(fd, pgrp_id)");
634 int fd = (int)SvIV(ST(1));
635 pid_t pgrp_id = (int)SvIV(ST(2));
638 RETVAL = tcsetpgrp(fd, pgrp_id);
639 ST(0) = sv_newmortal();
640 sv_setiv(ST(0), (I32)RETVAL);
646 XS_POSIX_times(ix, ax, items)
652 croak("Usage: POSIX::times(tms)");
655 struct tms * tms = (struct tms*)sv_grow(ST(1), sizeof(struct tms));
659 ST(0) = sv_newmortal();
660 sv_setiv(ST(0), (I32)RETVAL);
661 SvCUR(ST(1)) = sizeof(struct tms);
667 XS_POSIX_umask(ix, ax, items)
673 croak("Usage: POSIX::umask()");
679 ST(0) = sv_newmortal();
680 sv_setiv(ST(0), (I32)RETVAL);
686 XS_POSIX_uname(ix, ax, items)
692 croak("Usage: POSIX::uname()");
697 struct utsname utsname;
699 if (uname(&utsname) >= 0) {
701 PUSHs(sv_2mortal(newSVpv(utsname.sysname, 0)));
702 PUSHs(sv_2mortal(newSVpv(utsname.nodename, 0)));
703 PUSHs(sv_2mortal(newSVpv(utsname.release, 0)));
704 PUSHs(sv_2mortal(newSVpv(utsname.version, 0)));
705 PUSHs(sv_2mortal(newSVpv(utsname.machine, 0)));
707 return sp - stack_base;
713 XS_POSIX_unlink(ix, ax, items)
719 croak("Usage: POSIX::unlink()");
725 ST(0) = sv_newmortal();
726 sv_setiv(ST(0), (I32)RETVAL);
732 XS_POSIX_utime(ix, ax, items)
738 croak("Usage: POSIX::utime()");
744 ST(0) = sv_newmortal();
745 sv_setiv(ST(0), (I32)RETVAL);
751 XS_POSIX_wait(ix, ax, items)
757 croak("Usage: POSIX::wait()");
763 ST(0) = sv_newmortal();
764 sv_setiv(ST(0), (I32)RETVAL);
770 XS_POSIX_waitpid(ix, ax, items)
776 croak("Usage: POSIX::waitpid(pid, statusp, options)");
779 int pid = (int)SvIV(ST(1));
780 int statusp = (int)SvIV(ST(2));
781 int options = (int)SvIV(ST(3));
784 RETVAL = waitpid(pid, &statusp, options);
785 ST(0) = sv_newmortal();
786 sv_setiv(ST(0), (I32)RETVAL);
787 sv_setiv(ST(2), (I32)statusp);
793 XS_POSIX_write(ix, ax, items)
799 croak("Usage: POSIX::write()");
805 ST(0) = sv_newmortal();
806 sv_setiv(ST(0), (I32)RETVAL);
811 int boot_POSIX(ix,ax,items)
816 char* file = __FILE__;
818 newXSUB("POSIX::_exit", 0, XS_POSIX__exit, file);
819 newXSUB("POSIX::chdir", 0, XS_POSIX_chdir, file);
820 newXSUB("POSIX::chmod", 0, XS_POSIX_chmod, file);
821 newXSUB("POSIX::close", 0, XS_POSIX_close, file);
822 newXSUB("POSIX::dup", 0, XS_POSIX_dup, file);
823 newXSUB("POSIX::dup2", 0, XS_POSIX_dup2, file);
824 newXSUB("POSIX::fdopen", 0, XS_POSIX_fdopen, file);
825 newXSUB("POSIX::fstat", 0, XS_POSIX_fstat, file);
826 newXSUB("POSIX::getpgrp", 0, XS_POSIX_getpgrp, file);
827 newXSUB("POSIX::link", 0, XS_POSIX_link, file);
828 newXSUB("POSIX::lseek", 0, XS_POSIX_lseek, file);
829 newXSUB("POSIX::lstat", 0, XS_POSIX_lstat, file);
830 newXSUB("POSIX::mkdir", 0, XS_POSIX_mkdir, file);
831 newXSUB("POSIX::nice", 0, XS_POSIX_nice, file);
832 newXSUB("POSIX::open", 0, XS_POSIX_open, file);
833 newXSUB("POSIX::pipe", 0, XS_POSIX_pipe, file);
834 newXSUB("POSIX::read", 0, XS_POSIX_read, file);
835 newXSUB("POSIX::readlink", 0, XS_POSIX_readlink, file);
836 newXSUB("POSIX::rename", 0, XS_POSIX_rename, file);
837 newXSUB("POSIX::rmdir", 0, XS_POSIX_rmdir, file);
838 newXSUB("POSIX::setgid", 0, XS_POSIX_setgid, file);
839 newXSUB("POSIX::setpgid", 0, XS_POSIX_setpgid, file);
840 newXSUB("POSIX::setpgrp", 0, XS_POSIX_setpgrp, file);
841 newXSUB("POSIX::setsid", 0, XS_POSIX_setsid, file);
842 newXSUB("POSIX::setuid", 0, XS_POSIX_setuid, file);
843 newXSUB("POSIX::stat", 0, XS_POSIX_stat, file);
844 newXSUB("POSIX::symlink", 0, XS_POSIX_symlink, file);
845 newXSUB("POSIX::system", 0, XS_POSIX_system, file);
846 newXSUB("POSIX::tcgetpgrp", 0, XS_POSIX_tcgetpgrp, file);
847 newXSUB("POSIX::tcsetpgrp", 0, XS_POSIX_tcsetpgrp, file);
848 newXSUB("POSIX::times", 0, XS_POSIX_times, file);
849 newXSUB("POSIX::umask", 0, XS_POSIX_umask, file);
850 newXSUB("POSIX::uname", 0, XS_POSIX_uname, file);
851 newXSUB("POSIX::unlink", 0, XS_POSIX_unlink, file);
852 newXSUB("POSIX::utime", 0, XS_POSIX_utime, file);
853 newXSUB("POSIX::wait", 0, XS_POSIX_wait, file);
854 newXSUB("POSIX::waitpid", 0, XS_POSIX_waitpid, file);
855 newXSUB("POSIX::write", 0, XS_POSIX_write, file);