MODULE = Termios PACKAGE = POSIX::Termios PREFIX = cf
-POSIX::Termios
+void
new(packname = "POSIX::Termios", ...)
const char * packname
CODE:
{
#ifdef I_TERMIOS
- Newx(RETVAL, 1, struct termios);
+ SV *t;
+ ST(0) = sv_newmortal();
+ t = newSVrv(ST(0), packname);
+ sv_grow(t, sizeof(struct termios) + 1);
+ SvCUR_set(t, sizeof(struct termios));
+ SvPOK_on(t);
+ /* The previous implementation stored a pointer to an uninitialised
+ struct termios. Seems safer to initialise it, particularly as
+ this implementation exposes the struct to prying from perl-space.
+ */
+ memset(SvPVX(t), 0, 1 + sizeof(struct termios));
+ XSRETURN(1);
#else
not_here("termios");
- RETVAL = 0;
#endif
}
- OUTPUT:
- RETVAL
-
-void
-DESTROY(termios_ref)
- POSIX::Termios termios_ref
- CODE:
-#ifdef I_TERMIOS
- Safefree(termios_ref);
-#else
- not_here("termios");
-#endif
SysRet
getattr(termios_ref, fd = 0)
tcflag_t T_IV
cc_t T_IV
POSIX::SigSet T_PTROBJ
-POSIX::Termios T_PTROBJ
+POSIX::Termios T_OPAQUEPTROBJ
POSIX::SigAction T_HVREF
+
+INPUT
+T_OPAQUEPTROBJ
+ if (SvROK($arg) && sv_derived_from($arg, \"${ntype}\")) {
+ $var = ($type)SvPV_nolen(SvRV($arg));
+ }
+ else
+ Perl_croak(aTHX_ \"%s: %s is not of type %s\",
+ ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
+ \"$var\", \"$ntype\")
+
+OUTPUT
+T_OPAQUEPTROBJ
+ sv_setref_pvn($arg, \"${ntype}\", (const char*)$var, sizeof(*$var));