From 786296d4896f80d498b17d1ae46dc0aa4fde5770 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Fri, 17 Jul 2015 17:53:54 -0500 Subject: [PATCH] Evict PERLIO_IS_STDIO from top-level core files. Configuring with perlio has been the only option since dd35fa16610 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. --- perlio.c | 24 ------------ perlio.h | 54 +++++++------------------- perlsdio.h | 127 ++----------------------------------------------------------- pp_ctl.c | 4 -- sv.c | 10 ----- 5 files changed, 16 insertions(+), 203 deletions(-) diff --git a/perlio.c b/perlio.c index b5d5959..ae8cbc9 100644 --- a/perlio.c +++ b/perlio.c @@ -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. @@ -5093,7 +5070,6 @@ Perl_PerlIO_restore_errno(pTHX_ PerlIO *f) #undef HAS_FSETPOS #undef HAS_FGETPOS -#endif /* PERLIO_IS_STDIO */ /*======================================================================================*/ /* diff --git a/perlio.h b/perlio.h index 8e700fe..1a3d480 100644 --- a/perlio.h +++ b/perlio.h @@ -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 ---------------------------- */ @@ -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 */ @@ -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 @@ -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 ---------- */ @@ -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 @@ -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 diff --git a/perlsdio.h b/perlsdio.h index 3518361..2d6b22e 100644 --- a/perlsdio.h +++ b/perlsdio.h @@ -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 */ /* diff --git a/pp_ctl.c b/pp_ctl.c index ad6efc1..d4f93b5 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -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 */ diff --git a/sv.c b/sv.c index 210150b..ae5bba3 100644 --- a/sv.c +++ b/sv.c @@ -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 -- 1.8.3.1