summaryrefslogtreecommitdiff
path: root/perlio.c
diff options
context:
space:
mode:
authorLeon Timmermans <fawaka@gmail.com>2011-01-20 21:08:34 +0100
committerFather Chrysostomos <sprout@cpan.org>2011-01-20 19:03:47 -0800
commit81fe74fb3f93457df8e864c91546ac6b860657fc (patch)
treeb98f1384a2b32835a00a75866cc59b3f6628f89e /perlio.c
parent57e9ad135a0bd26cf0c27c058712ad1518a209bf (diff)
downloadperl-81fe74fb3f93457df8e864c91546ac6b860657fc.tar.gz
Define PerlIOBase_open
Diffstat (limited to 'perlio.c')
-rw-r--r--perlio.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/perlio.c b/perlio.c
index 0eee430333..85cb10671e 100644
--- a/perlio.c
+++ b/perlio.c
@@ -1315,6 +1315,24 @@ PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab), const char *mode, SV *arg)
return f;
}
+PerlIO *
+PerlIOBase_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
+ IV n, const char *mode, int fd, int imode, int perm,
+ PerlIO *old, int narg, SV **args)
+{
+ PerlIO_funcs * const tab = PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIO_default_layer(aTHX_ 0));
+ if (tab && tab->Open) {
+ PerlIO* ret = (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, old, narg, args);
+ if (ret && PerlIO_push(aTHX_ ret, self, mode, PerlIOArg) == -1) {
+ PerlIO_close(ret);
+ return NULL;
+ }
+ return ret;
+ }
+ SETERRNO(EINVAL, LIB_INVARG);
+ return NULL;
+}
+
IV
PerlIOBase_binmode(pTHX_ PerlIO *f)
{