| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
This updates the editor hints in our files for Emacs and vim to request
that tabs be inserted as spaces.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
or on close() in either thread.
close() in one thread blocks until close() is called in the other
thread, because both closes are waiting for the child process to end.
Since we have a reference-counting mechanism for the underlying
fileno, we can use that to determine whether close() should wait.
This does not solve the problem of close $OUT block when it has been
duplicated via open $OUT2, ">&" and $OUT2 is still in scope.
|
|
|
|
| |
Follow-up to ecfd064986aef03b9b7d8b56da83ae37ff435721.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently if an operation on a file handle is interrupted, and if
the signal handler accesses that same file handle (e.g. closes it),
then perl will crash. See [perl #75556].
This commit provides some basic infrastructure to avoid segfaults.
Basically it adds a lock count field to each handle (by re-purposing the
unused flags field in the PL_perlio array), then each time a signal
handler is called, the count is incremented. Then various parts of PerlIO
use a positive count to change behaviour. Most importantly, when layers
are popped, the PerlIOl structure is cleared, but not freed, and is left
in the chain of layers. This means that callers still holding pointers to
the various layers won't access freed structures. It does however mean
that PerlIOl structs may be leaked, and possibly slots in PL_perlio. But
this is better than crashing.
Not much has been done to give sensible behaviour on re-entrancy; for
example, a buffer that has already been written once might get written
again. Fixing this sort of thing would require a large-scale audit of
perlio.c.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows any layer to find the top of the layer stack,
or more specifically, the entry in PL_perlio that points to
the top.
Needed for the next commit, which will implement a reference counting
scheme.
There's currently a bug in MakeMaker which causes several extensions to
miss the dependency on perliol.h having changed, so this commit includes
a gratuitous whitespace change to perl.h to hopefully force recompilation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Layers in PerlIO are implemented as a linked list of PerlIOl structs;
eaxch one has a 'next' field pointing to the next layer. Now here's the
clever bit: When PerlIO* pointers are passed around to refer to a
particular handle, these are actually pointers to the 'next' field of the
*parent* layer (so to access the flags field say of a PerlIOl, you have to
double-defref it, e.g. (*f)->flags). The big advantage of this is that
it's easy for a layer to pop itself; when you call PerlIO_pop(f), f is a
pointer to the parent's 'next' field, so pop(f) can just do
*f = (*f)->next.
This means that there has to be a fake 'next' field above the topmost
layer. This is where PL_perlio comes in: it's a pointer to an arena of
arrays of pointers, each one capable of pointing to a PerlIOl structure.
When a new handle is created, a spare arena slot is grabbed, and the
address of that slot is returned. This also allows for a handle with no
layers.
What this commit does is change PL_perlio from being an array of
PerlIO* into an array of PerlIOl structures - i.e. each element in the
array goes from being a single pointer, to having several fields. These
will be made used of in follow-up commits.
|
|
|
|
|
| |
http://www.nntp.perl.org/group/perl.daily-build.reports/2008/02/msg53937.html
p4raw-id: //depot/perl@33370
|
|
|
| |
p4raw-id: //depot/perl@32793
|
|
|
|
|
|
|
|
| |
Message-Id: <472BD128.9080105@iki.fi>
PerlIO_teardown is called when there may no longer be an
interpreter available
p4raw-id: //depot/perl@32215
|
|
|
|
|
| |
Message-Id: <20070130022021.6051443A67@anubis.hut.fi>
p4raw-id: //depot/perl@30079
|
|
|
| |
p4raw-id: //depot/perl@29060
|
|
|
|
|
| |
Message-ID: <20050501200755.GA30259@petdance.com>
p4raw-id: //depot/perl@24365
|
|
|
|
|
| |
Message-ID: <20050427150243.GA21883@petdance.com>
p4raw-id: //depot/perl@24338
|
|
|
|
|
| |
Message-ID: <B356D8F434D20B40A8CEDAEC305A1F2453D653@esebe105.NOE.Nokia.com>
p4raw-id: //depot/perl@24271
|
|
|
|
|
| |
Message-Id: <2f14220e7101a03f7659dbe79a03b115@petdance.com>
p4raw-id: //depot/perl@24074
|
|
|
| |
p4raw-id: //depot/perl@20267
|
|
|
| |
p4raw-id: //depot/perl@20260
|
|
|
|
|
|
|
|
| |
Win32's lseek claims to have succeeded in pipes etc. Which confuses :perlio
and derived layers. So have :unix's "pushed" method stat() the fd and
cache non S_ISREG nature. Have Unix_seek fail if fd is NOT S_ISREG to match
UNIX behaviour.
p4raw-id: //depot/perlio@19475
|
|
|
|
|
|
|
|
|
| |
- Inspired by Nick C's suggestion add size of function table to the table
as a validation check.
- also optimize pseudo-layer code to avoid malloc/link of something
destined to be immediately popped & freed.
- Minor addition to pod/perliol.pod
p4raw-id: //depot/perlio@17330
|
|
|
|
|
|
|
| |
New function table entry so all layer definitions need tweaking.
Extra function table entry allows a layer to remain on a binmode stack
New PerlIOBase_binmode allows easy implementation of default policy.
p4raw-id: //depot/perlio@17309
|
|
|
|
|
|
|
|
| |
- PerlIO_importFILE and PerlIO_exportFILE now documented as taking
const char *mode.
- Other 'flags' field changed to U32
- Discouraging words written about ":raw".
p4raw-id: //depot/perlio@17258
|
|
|
|
|
|
|
| |
Message-Id: <200206131403.g5DE3Sk21964@crypt.compulink.co.uk>
(go U32 based on NI-S since it's a flags field)
p4raw-id: //depot/perl@17222
|
|
|
|
|
|
|
|
| |
- actually a generic PerlIOBuf_xxx derived leak-on-pop, but :crlf
flagged it because it is more often popped without stream
being closed.
- Define non-noop PerlIOBuf_popped(), use it and export it.
p4raw-id: //depot/perlio@16657
|
|
|
|
|
|
|
| |
Finish implementing PerlIOVia_open().
Export more guts of PerlIO_* so Via_open() can work.
Fix various PerlIO_allocate() features exposed by above.
p4raw-id: //depot/perlio@16207
|
|
|
|
|
| |
if PerlIONext is NULL.
p4raw-id: //depot/perlio@13975
|
|
|
|
|
| |
consistency of PerlIO layers.
p4raw-id: //depot/perlio@13808
|
|
|
| |
p4raw-id: //depot/perl@13637
|
|
|
|
|
|
|
| |
which are not DOSish, BeOS being one of such platforms.
Ideally this should be a Configure test, not a hardwired
cpp symbol test...
p4raw-id: //depot/perl@13621
|
|
|
| |
p4raw-id: //depot/perlio@13530
|
|
|
| |
p4raw-id: //depot/perlio@13072
|
|
|
|
|
|
|
| |
Message-ID: <20011029215235.K41204@plum.flirble.org>
Add prototype.
p4raw-id: //depot/perl@12779
|
|
|
|
|
|
|
|
| |
for them. Call explicit cleanup during destruct process.
- one binmode test is failing
- also ext/threads/t/basic.t fails under make test, and is noisy under
harness. (Threads results are intermingled and don't match order expected.)
p4raw-id: //depot/perlio@12547
|
|
|
|
|
| |
Still-passes all tests non-threaded (well it would wouldn't it!)
p4raw-id: //depot/perlio@12451
|
|
|
| |
p4raw-id: //depot/perlio@12447
|
|
|
|
|
|
|
|
|
| |
indent -kr -nce -psl -sc -TSV -TAV -THV -TGV -TIV -TUV -TNV -TMAGIC -TFILE -TPerlIO -TPerlIO_list_t -TPerlIO_funcs -TPerlIO_pair_t
(GNU indent). Note that wholesale re-indenting might
be nice, but that would break nice formatting/alignment
of assignments, equality testing, and complex boolean
expressions with lots of &s and |s.
p4raw-id: //depot/perl@12052
|
|
|
|
|
| |
for UNIX breakage.
p4raw-id: //depot/perlio@10632
|
|
|
|
|
| |
and using that instead (name lookups are sequential search for now).
p4raw-id: //depot/perlio@10564
|
|
|
|
|
| |
Message-Id: <a05100e0ab734816701a5@[172.16.52.1]>
p4raw-id: //depot/perl@10218
|
|
|
| |
p4raw-id: //depot/perlio@9361
|
|
|
|
|
|
|
| |
layers in perl code. In such cases layers need to be popped before
we loose the ability to run perl code.)
Also back-out "PerlIO::object" hook - it isn't going to work like that...
p4raw-id: //depot/perlio@9346
|
|
|
|
|
|
| |
1. open($fh,"+<",undef); # add test to t/io/open.t
2. open($fh,"+<",\$var); # New test t/lib/io_scalar.t
p4raw-id: //depot/perlio@9318
|
|
|
|
|
|
|
|
|
|
|
|
| |
- open process creates AV of layer/arg pairs
(appends layers from open() or open.pm to default list).
- push arg is now an SV.
- layer ->Open get passed the AV
- open is no longer mandatory method.
- topmost layer that has ->Open method does the open
- any layers above are pushed once that returns.
- vtable re-ordered so dummy layers need only provide push/pop methods.
p4raw-id: //depot/perlio@9314
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
open($fh,">&STDOUT!")
type code.
- Invent PerlIO_openn() - which has "lots" of args a bit like do_openn() which
is its main caller. In particular now has access to "extra" args, and
can tell when an open handle is "reopened" (or duped?).
- In -Duseperlio PerlIO_open() et. al. are now wrappers on PerlIO_openn().
- In -Uuseperlio (untested as yet) PerlIO_openn() is a wrapper on
PerlIO_open() et. al. (i.e. other way round).
- Collapse "vtable" entries for layers - was fdopen/open/reopen now just open
with args close to PerlIO_openn().
p4raw-id: //depot/perlio@9302
|
|
|
|
|
| |
(Still not "right"...)
p4raw-id: //depot/perlio@8820
|
|
|
|
|
|
|
| |
So now PERLIO=utf8 perl ...
does what Andreas wanted.
Fix arg passing in open.pm (still have a Carp issue).
p4raw-id: //depot/perlio@8511
|
|
|
| |
p4raw-id: //depot/perlio@8202
|
|
|
|
|
| |
open($fh,"<encoding(iso8859-7)",$greek) || die;
p4raw-id: //depot/perlio@8085
|
|
|
|
|
|
|
|
| |
Allow arg to layers e.g. open($fh,"<:encode(iso8859-15)",$name)
syntax is modelled on attributes.
Untested fix for io/utf8 on Win32 etc.
Very clumsy start to the encode layer.
p4raw-id: //depot/perlio@8076
|