Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stat and -T do not set errno consistently #11870

Closed
p5pRT opened this issue Jan 15, 2012 · 4 comments
Closed

stat and -T do not set errno consistently #11870

p5pRT opened this issue Jan 15, 2012 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Jan 15, 2012

Migrated from rt.perl.org#108288 (status was 'resolved')

Searchable as RT108288$

@p5pRT
Copy link
Author

p5pRT commented Jan 15, 2012

From @cpansprout

stat and most filetest ops, like -r, leave errno alone when called with an unopened filehandle​:

$ ./perl -Ilib -le '$! = 7; print $!; stat foo; print $!'
Argument list too long
Argument list too long
$ ./perl -Ilib -le '$! = 7; print $!; -r foo; print $!'
Argument list too long
Argument list too long

But -T sets errno​:

$ ./perl -Ilib -le '$! = 7; print $!; -T foo; print $!'
Argument list too long
Bad file descriptor

What should be the correct behaviour?

close() sets errno​:

$ ./perl -Ilib -le '$! = 7; print $!; close foo; print $!'
Argument list too long
Bad file descriptor

Is it stat and -r that should change?

Currently, $! cannot be relied upon when a filetest op returns undef. And, apart from trapping the ‘unopened’ warning or fiddling with B.pm, there is no way to tell whether an IO thingy actually has an fp. So $! is useless.


Flags​:
  category=core
  severity=low


Site configuration information for perl 5.15.6​:

Configured by sprout at Sat Dec 31 10​:12​:16 PST 2011.

Summary of my perl5 (revision 5 version 15 subversion 6) configuration​:
  Local Commit​: b2635083831c8935c437465bbeb03aec8b599c01
  Ancestor​: 407287f
  Platform​:
  osname=darwin, osvers=10.5.0, archname=darwin-thread-multi-2level
  uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0​: fri nov 5 23​:20​:39 pdt 2010; root​:xnu-1504.9.17~1release_i386 i386 '
  config_args='-de -Dusedevel -Duseithreads -DDEBUGGING -Dmad'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-fno-common -DPERL_DARWIN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
  optimize='-O3 -g',
  cppflags='-fno-common -DPERL_DARWIN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /usr/lib
  libs=-ldbm -ldl -lm -lutil -lc
  perllibs=-ldl -lm -lutil -lc
  libc=, so=dylib, useshrplib=false, libperl=libperl.a
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 


@​INC for perl 5.15.6​:
  /usr/local/lib/perl5/site_perl/5.15.6/darwin-thread-multi-2level
  /usr/local/lib/perl5/site_perl/5.15.6
  /usr/local/lib/perl5/5.15.6/darwin-thread-multi-2level
  /usr/local/lib/perl5/5.15.6
  /usr/local/lib/perl5/site_perl
  .


Environment for perl 5.15.6​:
  DYLD_LIBRARY_PATH (unset)
  HOME=/Users/sprout
  LANG=en_US.UTF-8
  LANGUAGE (unset)
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/usr/bin​:/bin​:/usr/sbin​:/sbin​:/usr/local/bin​:/usr/X11/bin​:/usr/local/bin
  PERL_BADLANG (unset)
  SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2017

From zefram@fysh.org

Father Chrysostomos wrote​:

Is it stat and -r that should change?

Yes. It is clearly a bug for them to not set $! on error; the file
test operators are explicitly documented to do so. Fixed in commit
97c8f3e.

-zefram

@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2017

The RT System itself - Status changed from 'new' to 'open'

@p5pRT p5pRT closed this as completed Nov 15, 2017
@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2017

@cpansprout - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant