diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2003-08-30 18:38:05 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2003-08-30 18:38:05 +0000 |
commit | c2fcde81f9cb1a632422e27a9e967bc087d75ae7 (patch) | |
tree | 4c5ab2d7d84ef8c703485606734324be2d84f6f2 /perlio.c | |
parent | 95005ad8d24eb76af265f09ad25a68a8b76bf3ae (diff) | |
download | perl-c2fcde81f9cb1a632422e27a9e967bc087d75ae7.tar.gz |
This is probably a wrong fix for
[perl #23645] tell with perlio on appended files
but maybe this gets NI-S agitated enough to present the correct fix :-)
p4raw-id: //depot/perl@20956
Diffstat (limited to 'perlio.c')
-rw-r--r-- | perlio.c | 46 |
1 files changed, 24 insertions, 22 deletions
@@ -2375,6 +2375,28 @@ PerlIOUnix_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) return code; } +IV +PerlIOUnix_seek(pTHX_ PerlIO *f, Off_t offset, int whence) +{ + int fd = PerlIOSelf(f, PerlIOUnix)->fd; + Off_t new; + if (PerlIOBase(f)->flags & PERLIO_F_NOTREG) { +#ifdef ESPIPE + SETERRNO(ESPIPE, LIB_INVARG); +#else + SETERRNO(EINVAL, LIB_INVARG); +#endif + return -1; + } + new = PerlLIO_lseek(fd, offset, whence); + if (new == (Off_t) - 1) + { + return -1; + } + PerlIOBase(f)->flags &= ~PERLIO_F_EOF; + return 0; +} + PerlIO * PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, @@ -2409,6 +2431,8 @@ PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, } PerlIOUnix_setfd(aTHX_ f, fd, imode); PerlIOBase(f)->flags |= PERLIO_F_OPEN; + if (*mode == IoTYPE_APPEND) + PerlIOUnix_seek(aTHX_ f, 0, SEEK_END); return f; } else { @@ -2485,28 +2509,6 @@ PerlIOUnix_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) } } -IV -PerlIOUnix_seek(pTHX_ PerlIO *f, Off_t offset, int whence) -{ - int fd = PerlIOSelf(f, PerlIOUnix)->fd; - Off_t new; - if (PerlIOBase(f)->flags & PERLIO_F_NOTREG) { -#ifdef ESPIPE - SETERRNO(ESPIPE, LIB_INVARG); -#else - SETERRNO(EINVAL, LIB_INVARG); -#endif - return -1; - } - new = PerlLIO_lseek(fd, offset, whence); - if (new == (Off_t) - 1) - { - return -1; - } - PerlIOBase(f)->flags &= ~PERLIO_F_EOF; - return 0; -} - Off_t PerlIOUnix_tell(pTHX_ PerlIO *f) { |