Skip to content

Commit

Permalink
Evict PERLIO_IS_STDIO from top-level core files.
Browse files Browse the repository at this point in the history
Configuring with perlio has been the only option since dd35fa1
in 2011, first released in 5.16.0.  Yet we have still have had all
this dead code for stdio support cluttering up the sources and
dulling the machetes of anyone who wants to do further work on
perlio or someone (like me) who just stumbles on some code that
looks like it needs fixing but isn't worth the time since the
compiler will never see it.

Leave a vestigial perlsdio.h since its presence is hard-coded in
a number of places.
  • Loading branch information
craigberry committed Jul 23, 2015
1 parent 1f03351 commit 786296d
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 203 deletions.
24 changes: 0 additions & 24 deletions perlio.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,29 +338,6 @@ Perl_boot_core_PerlIO(pTHX)
#endif


#ifdef PERLIO_IS_STDIO

void
PerlIO_init(pTHX)
{
PERL_UNUSED_CONTEXT;
/*
* Does nothing (yet) except force this file to be included in perl
* binary. That allows this file to force inclusion of other functions
* that may be required by loadable extensions e.g. for
* FileHandle::tmpfile
*/
}

#undef PerlIO_tmpfile
PerlIO *
PerlIO_tmpfile(void)
{
return tmpfile();
}

#else /* PERLIO_IS_STDIO */

/*======================================================================================*/
/*
* Implement all the PerlIO interface ourselves.
Expand Down Expand Up @@ -5093,7 +5070,6 @@ Perl_PerlIO_restore_errno(pTHX_ PerlIO *f)
#undef HAS_FSETPOS
#undef HAS_FGETPOS

#endif /* PERLIO_IS_STDIO */

/*======================================================================================*/
/*
Expand Down
54 changes: 13 additions & 41 deletions perlio.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,23 @@
/*
Interface for perl to IO functions.
There is a hierarchy of Configure determined #define controls:
USE_STDIO - forces PerlIO_xxx() to be #define-d onto stdio functions.
This is used for conservative
builds - "just like perl5.00X used to be".
This dominates over the others.
USE_STDIO - No longer available via Configure. Formerly forced
PerlIO_xxx() to be #define-d onto stdio functions.
Now generates compile-time error.
USE_PERLIO - The primary Configure variable that enables PerlIO.
If USE_PERLIO is _NOT_ set
then USE_STDIO above will be set to be conservative.
PerlIO_xxx() are real functions
defined in perlio.c which implement extra functionality
required for utf8 support.
One further note - the table-of-functions scheme controlled
by PERL_IMPLICIT_SYS turns on USE_PERLIO so that iperlsys.h can
#define PerlIO_xxx() to go via the function table, without having
to #undef them from (say) stdio forms.
*/

#if defined(PERL_IMPLICIT_SYS)
#ifndef USE_PERLIO
#ifndef NETWARE
/* # define USE_PERLIO */
#endif
#endif
#endif

#ifndef USE_PERLIO
# define USE_STDIO
#endif

#ifdef USE_STDIO
# ifndef PERLIO_IS_STDIO
# define PERLIO_IS_STDIO
# endif
# error "stdio is no longer supported as the default base layer -- use perlio."
#endif

/* -------------------- End of Configure controls ---------------------------- */
Expand All @@ -71,11 +53,6 @@
#undef O_BINARY
#endif

#ifdef PERLIO_IS_STDIO
/* #define PerlIO_xxxx() as equivalent stdio function */
#include "perlsdio.h"
#endif /* PERLIO_IS_STDIO */

#ifndef PerlIO
/* ----------- PerlIO implementation ---------- */
/* PerlIO not #define-d to something else - define the implementation */
Expand Down Expand Up @@ -111,27 +88,24 @@ PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,

/* ----------- End of implementation choices ---------- */

#ifndef PERLIO_IS_STDIO
/* Not using stdio _directly_ as PerlIO */

/* We now need to determine what happens if source trys to use stdio.
* There are three cases based on PERLIO_NOT_STDIO which XS code
* can set how it wants.
*/

# ifdef PERL_CORE
#ifdef PERL_CORE
/* Make a choice for perl core code
- currently this is set to try and catch lingering raw stdio calls.
This is a known issue with some non UNIX ports which still use
"native" stdio features.
*/
# ifndef PERLIO_NOT_STDIO
# define PERLIO_NOT_STDIO 1
# endif
#else
# ifndef PERLIO_NOT_STDIO
# define PERLIO_NOT_STDIO 0
# endif
# ifndef PERLIO_NOT_STDIO
# define PERLIO_NOT_STDIO 1
# endif
#else
# ifndef PERLIO_NOT_STDIO
# define PERLIO_NOT_STDIO 0
# endif
#endif

#ifdef PERLIO_NOT_STDIO
Expand All @@ -154,7 +128,6 @@ PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
*/
#include "fakesdio.h"
#endif /* ifndef PERLIO_NOT_STDIO */
#endif /* PERLIO_IS_STDIO */

/* ----------- fill in things that have not got #define'd ---------- */

Expand Down Expand Up @@ -331,7 +304,7 @@ PERL_CALLCONV int PerlIO_setpos(PerlIO *, SV *);
#ifndef PerlIO_fdupopen
PERL_CALLCONV PerlIO *PerlIO_fdupopen(pTHX_ PerlIO *, CLONE_PARAMS *, int);
#endif
#if !defined(PerlIO_modestr) && !defined(PERLIO_IS_STDIO)
#if !defined(PerlIO_modestr)
PERL_CALLCONV char *PerlIO_modestr(PerlIO *, char *buf);
#endif
#ifndef PerlIO_isutf8
Expand Down Expand Up @@ -360,7 +333,6 @@ PERL_CALLCONV void PerlIO_debug(const char *fmt, ...)
__attribute__format__(__printf__, 1, 2);
typedef struct PerlIO_list_s PerlIO_list_t;


#endif

END_EXTERN_C
Expand Down
127 changes: 3 additions & 124 deletions perlsdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,133 +8,12 @@
*
*/

#ifdef PERLIO_IS_STDIO

#ifdef NETWARE
#include "nwstdio.h"
#else

/*
* This file #define-s the PerlIO_xxx abstraction onto stdio functions.
* Make this as close to original stdio as possible.
*/
#define PerlIO FILE
#define PerlIO_stderr() PerlSIO_stderr
#define PerlIO_stdout() PerlSIO_stdout
#define PerlIO_stdin() PerlSIO_stdin

#define PerlIO_isutf8(f) 0

#define PerlIO_printf PerlSIO_printf
#define PerlIO_stdoutf PerlSIO_stdoutf
#define PerlIO_vprintf(f,fmt,a) PerlSIO_vprintf(f,fmt,a)
#define PerlIO_write(f,buf,count) PerlSIO_fwrite(buf,1,count,f)
#define PerlIO_unread(f,buf,count) (-1)
#define PerlIO_open PerlSIO_fopen
#define PerlIO_fdopen PerlSIO_fdopen
#define PerlIO_reopen PerlSIO_freopen
#define PerlIO_close(f) PerlSIO_fclose(f)
#define PerlIO_puts(f,s) PerlSIO_fputs(s,f)
#define PerlIO_putc(f,c) PerlSIO_fputc(c,f)
#if defined(__VMS)
/* Unusual definition of ungetc() here to accommodate fast_sv_gets()'
* belief that it can mix getc/ungetc with reads from stdio buffer */
START_EXTERN_C
int decc$ungetc(int __c, FILE *__stream);
END_EXTERN_C
# define PerlIO_ungetc(f,c) ((c) == EOF ? EOF : \
((*(f) && !((*(f))->_flag & _IONBF) && \
((*(f))->_ptr > (*(f))->_base)) ? \
((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
#else
# define PerlIO_ungetc(f,c) PerlSIO_ungetc(c,f)
#endif
#define PerlIO_getc(f) PerlSIO_fgetc(f)
#define PerlIO_read(f,buf,count) (SSize_t)PerlSIO_fread(buf,1,count,f)
#define PerlIO_tell(f) PerlSIO_ftell(f)
#define PerlIO_eof(f) PerlSIO_feof(f)
#define PerlIO_getname(f,b) fgetname(f,b)
#define PerlIO_error(f) PerlSIO_ferror(f)
#define PerlIO_fileno(f) PerlSIO_fileno(f)
#define PerlIO_clearerr(f) PerlSIO_clearerr(f)
#define PerlIO_flush(f) PerlSIO_fflush(f)
#define PerlIO_seek(f,o,w) PerlSIO_fseek(f,o,w)

#define PerlIO_rewind(f) PerlSIO_rewind(f)
#define PerlIO_tmpfile() PerlSIO_tmpfile()

#define PerlIO_importFILE(f,fl) (f)
#define PerlIO_exportFILE(f,fl) (f)
#define PerlIO_findFILE(f) (f)
#define PerlIO_releaseFILE(p,f) ((void) 0)

#ifdef HAS_SETLINEBUF
#define PerlIO_setlinebuf(f) PerlSIO_setlinebuf(f);
#else
#define PerlIO_setlinebuf(f) PerlSIO_setvbuf(f, NULL, _IOLBF, 0);
#endif

/* Now our interface to Configure's FILE_xxx macros */

#ifdef USE_STDIO_PTR
#define PerlIO_has_cntptr(f) 1
#define PerlIO_get_ptr(f) PerlSIO_get_ptr(f)
#define PerlIO_get_cnt(f) PerlSIO_get_cnt(f)

#ifdef STDIO_CNT_LVALUE
#define PerlIO_canset_cnt(f) 1
#define PerlIO_set_cnt(f,c) PerlSIO_set_cnt(f,c)
#ifdef STDIO_PTR_LVALUE
#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
#define PerlIO_fast_gets(f) 1
#endif
#endif /* STDIO_PTR_LVALUE */
#else /* STDIO_CNT_LVALUE */
#define PerlIO_canset_cnt(f) 0
#define PerlIO_set_cnt(f,c) abort()
#endif

#ifdef STDIO_PTR_LVALUE
#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
#define PerlIO_set_ptrcnt(f,p,c) STMT_START {PerlSIO_set_ptr(f,p), PerlIO_set_cnt(f,c);} STMT_END
#else
#ifdef STDIO_PTR_LVAL_SETS_CNT
/* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */
#define PerlIO_set_ptrcnt(f,p,c) STMT_START {PerlSIO_set_ptr(f,p); assert(PerlSIO_get_cnt(f) == (c));} STMT_END
#define PerlIO_fast_gets(f) 1
#else
#define PerlIO_set_ptrcnt(f,p,c) abort()
#endif
#endif
#endif

#else /* USE_STDIO_PTR */

#define PerlIO_has_cntptr(f) 0
#define PerlIO_canset_cnt(f) 0
#define PerlIO_get_cnt(f) (abort(),0)
#define PerlIO_get_ptr(f) (abort(),(void *)0)
#define PerlIO_set_cnt(f,c) abort()
#define PerlIO_set_ptrcnt(f,p,c) abort()

#endif /* USE_STDIO_PTR */

#ifndef PerlIO_fast_gets
#define PerlIO_fast_gets(f) 0
#endif
/* Shouldn't be possible to get here, but if we did ... */

#ifdef PERLIO_IS_STDIO

#ifdef FILE_base
#define PerlIO_has_base(f) 1
#define PerlIO_get_base(f) PerlSIO_get_base(f)
#define PerlIO_get_bufsiz(f) PerlSIO_get_bufsiz(f)
#else
#define PerlIO_has_base(f) 0
#define PerlIO_get_base(f) (abort(),(void *)0)
#define PerlIO_get_bufsiz(f) (abort(),0)
#endif
# error "stdio is no longer supported as the default base layer -- use perlio."

#endif /* NETWARE */
#endif /* PERLIO_IS_STDIO */

/*
Expand Down
4 changes: 0 additions & 4 deletions pp_ctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3517,11 +3517,7 @@ S_check_type_and_open(pTHX_ SV *name)
}
#endif

#if !defined(PERLIO_IS_STDIO)
retio = PerlIO_openn(aTHX_ ":", PERL_SCRIPT_MODE, -1, 0, 0, NULL, 1, &name);
#else
retio = PerlIO_open(p, PERL_SCRIPT_MODE);
#endif
#ifdef WIN32
/* EACCES stops the INC search early in pp_require to implement
feature RT #113422 */
Expand Down
10 changes: 0 additions & 10 deletions sv.c
Original file line number Diff line number Diff line change
Expand Up @@ -8245,16 +8245,6 @@ Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
amount left, otherwise this is the amount it
can hold. */

#if defined(__VMS) && defined(PERLIO_IS_STDIO)
/* An ungetc()d char is handled separately from the regular
* buffer, so we getc() it back out and stuff it in the buffer.
*/
i = PerlIO_getc(fp);
if (i == EOF) return 0;
*(--((*fp)->_ptr)) = (unsigned char) i;
(*fp)->_cnt++;
#endif

/* Here is some breathtakingly efficient cheating */

/* When you read the following logic resist the urge to think
Expand Down

0 comments on commit 786296d

Please sign in to comment.