Skip to content

Commit

Permalink
POSIX: delete the L_tmpnam and L_tmpname symbols
Browse files Browse the repository at this point in the history
The history here is relatively complicated.

The L_tmpname symbol is neither specified by POSIX or defined by traditional
Unix system; it's simply a typo for L_tmpnam, first introduced in Perl 5.0.

Commit 33f01dd (part of Perl 5.6) added
support for L_tmpnam, treating L_tmpname as a back-compat synonym. However,
no version of Perl has ever made L_tmpnam exportable, even at explicit
request; using that symbol has always required using its fully-qualified
POSIX::L_tmpnam name.

During the 5.8 development cycle, an apparently-unintended consequence of
various improvements to the way that POSIX.pm generates and exports constants
meant that L_tmpname stopped working. It continued to be exportable, but
trying to use the constant yielded an exception saying "Your vendor has not
defined POSIX macro L_tmpname". (This isn't exactly incorrect, of course: no
vendor defines the macro L_tmpname!)

At this point, therefore, there seems little benefit in trying to resurrect
support for the L_tmpname typo: it's impossible for any program running on
5.8.0 or later to have successfully used it.

There's perhaps an argument for making L_tmpnam exportable at this point,
since it does work when called by its full-qualified name. One option would
be to add it to @EXPORT_OK; but that is explicitly counselled against by the
POSIX.pm comments summarising the policy on symbol exports, which recommend
adding a new export tag instead. In this case, the obvious tag to use is
:stdio_h (which already exists), since the C-level symbol is provided by the
<stdio.h> header.

However, that doesn't seem worth it to me. The only possible use of L_tmpnam
is to create a buffer of a size suitable for passing to the tmpnam() C
function (which is presumably why nobody's noticed in the last fifteen years
that the symbol isn't actually exported). Furthermore, the POSIX.pm wrapper
for tmpnam() itself was deleted by 19fc296,
a few days ago, so merely deleting this additional symbol seems correct.
  • Loading branch information
arc committed May 16, 2016
1 parent b40d1aa commit 1cb852d
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 8 deletions.
4 changes: 1 addition & 3 deletions ext/POSIX/Makefile.PL
Expand Up @@ -48,7 +48,7 @@ my @names =
EUSERS EWOULDBLOCK EXDEV FILENAME_MAX F_OK HUPCL ICANON ICRNL IEXTEN
IGNBRK IGNCR IGNPAR INLCR INPCK INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON
LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME
LINK_MAX LONG_MAX LONG_MIN L_ctermid L_cuserid L_tmpnam MAX_CANON
LINK_MAX LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON
MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK
MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST
PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX
Expand All @@ -74,8 +74,6 @@ my @names =
{name=>"SIG_DFL", value=>"PTR2IV(SIG_DFL)", not_constant=>1},
{name=>"SIG_ERR", value=>"PTR2IV(SIG_ERR)", not_constant=>1},
{name=>"SIG_IGN", value=>"PTR2IV(SIG_IGN)", not_constant=>1},
# L_tmpnam[e] was a typo--retained for compatibility
{name=>"L_tmpname", value=>"L_tmpnam"},
{name=>"NULL", value=>"0"},
{name=>"_POSIX_JOB_CONTROL", type=>"YES", default=>["IV", "0"]},
{name=>"_POSIX_SAVED_IDS", type=>"YES", default=>["IV", "0"]},
Expand Down
5 changes: 3 additions & 2 deletions ext/POSIX/lib/POSIX.pm
Expand Up @@ -4,7 +4,7 @@ use warnings;

our ($AUTOLOAD, %SIGRT);

our $VERSION = '1.68';
our $VERSION = '1.69';

require XSLoader;

Expand All @@ -24,6 +24,7 @@ sub usage { croak "Usage: POSIX::$_[0]" }
XSLoader::load();

my %replacement = (
L_tmpnam => undef,
atexit => 'END {}',
atof => undef,
atoi => undef,
Expand Down Expand Up @@ -337,7 +338,7 @@ my %default_export_tags = ( # cf. exports policy below
stddef_h => [qw(NULL offsetof)],

stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
NULL SEEK_CUR SEEK_END SEEK_SET
STREAM_MAX TMP_MAX stderr stdin stdout
clearerr fclose fdopen feof ferror fflush fgetc fgetpos
fgets fopen fprintf fputc fputs fread freopen
Expand Down
2 changes: 1 addition & 1 deletion ext/POSIX/lib/POSIX.pod
Expand Up @@ -2593,7 +2593,7 @@ C<EXIT_FAILURE> C<EXIT_SUCCESS> C<MB_CUR_MAX> C<RAND_MAX>

=item Constants

C<BUFSIZ> C<EOF> C<FILENAME_MAX> C<L_ctermid> C<L_cuserid> C<L_tmpname> C<TMP_MAX>
C<BUFSIZ> C<EOF> C<FILENAME_MAX> C<L_ctermid> C<L_cuserid> C<TMP_MAX>

=back

Expand Down
4 changes: 2 additions & 2 deletions ext/POSIX/t/export.t
Expand Up @@ -49,7 +49,7 @@ my %expect = (
LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LDBL_DIG
LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP
LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX
LONG_MAX LONG_MIN L_ctermid L_cuserid L_tmpname MAX_CANON
LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON
MAX_INPUT MB_CUR_MAX MB_LEN_MAX NAME_MAX NCCS NDEBUG
NGROUPS_MAX NOFLSH NULL OPEN_MAX OPOST O_ACCMODE O_APPEND
O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
Expand Down Expand Up @@ -148,7 +148,7 @@ my %expect = (
localtime log mkdir nice open opendir pipe printf rand
read readdir rename rewinddir rmdir sin sleep sprintf sqrt
srand stat system time times umask unlink utime wait
waitpid write
waitpid write L_tmpnam
),
# this stuff was added in 5.21
# (though an oversight meant that lround wasn't listed here
Expand Down
1 change: 1 addition & 0 deletions ext/POSIX/t/unimplemented.t
Expand Up @@ -88,6 +88,7 @@ foreach ([atexit => 'C-specific: use END {} instead'],
[vfprintf => 'C-specific, stopped'],
[vprintf => 'C-specific, stopped'],
[vsprintf => 'C-specific, stopped'],
[L_tmpnam => 'C-specific, stopped'],
) {
my ($func, $action) = @$_;
my $expect = ref $action
Expand Down

0 comments on commit 1cb852d

Please sign in to comment.