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

File::Path::mkpath resets errno #8095

Closed
p5pRT opened this issue Sep 6, 2005 · 4 comments
Closed

File::Path::mkpath resets errno #8095

p5pRT opened this issue Sep 6, 2005 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Sep 6, 2005

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

Searchable as RT37091$

@p5pRT
Copy link
Author

p5pRT commented Sep 6, 2005

From @kvr000

Created by @kvr000

When calling File​::Path​::mkpath and one of the mkdir fails, the
functions checks if the directory was not created by other process.
The problem is the check resets $! and so there is no way how the
caller may find out the reason ($@​ contains only locale specific
message).
The solution is attached bellow.

Best regards,
  Zbynek Vyskovsky

Inline Patch
diff -urN perl-5.8.7-orig/lib/File/Path.pm perl-5.8.7/lib/File/Path.pm
--- perl-5.8.7-orig/lib/File/Path.pm    2005-09-06 16:44:03.563483247 +0200
+++ perl-5.8.7/lib/File/Path.pm 2005-09-06 16:44:27.132062577 +0200
@@ -165,7 +165,7 @@
        unless (mkdir($path,$mode)) {
            my $e = $!;
            # allow for another process to have created it meanwhile
-           croak "mkdir $path: $e" unless -d $path;
+           $! = $e, croak "mkdir $path: $e" unless -d $path;
        }
        push(@created, $path);
     }
Perl Info

Flags:
    category=library
    severity=medium

Site configuration information for perl v5.8.4:

Configured by Debian Project at Tue Mar  8 20:31:23 EST 2005.

Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
  Platform:
    osname=linux, osvers=2.4.27-ti1211, archname=i386-linux-thread-multi
    uname='linux kosh 2.4.27-ti1211 #1 sun sep 19 18:17:45 est 2004 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.4 -Dsitearch=/usr/local/lib/perl/5.8.4 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.4 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef 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 ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.3.5 (Debian 1:3.3.5-9)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, libperl=libperl.so.5.8.4
    gnulibc_version='2.3.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    


@INC for perl v5.8.4:
    /etc/perl
    /usr/local/lib/perl/5.8.4
    /usr/local/share/perl/5.8.4
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    .


Environment for perl v5.8.4:
    HOME=/home/rat
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH=/home/rat/lib
    LOGDIR (unset)
    PATH=/home/rat/u:/home/rat/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/sbin:/sbin:/usr/local/sbin
    PERL_BADLANG (unset)
    SHELL=/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Sep 7, 2005

From @rgs

kvr@​centrum.cz (via RT) wrote​:

When calling File​::Path​::mkpath and one of the mkdir fails, the
functions checks if the directory was not created by other process.
The problem is the check resets $! and so there is no way how the
caller may find out the reason ($@​ contains only locale specific
message).
The solution is attached bellow.

Thanks, applied to the development sources of perl as change #25362.

@p5pRT
Copy link
Author

p5pRT commented Sep 7, 2005

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

@p5pRT p5pRT closed this as completed Sep 7, 2005
@p5pRT
Copy link
Author

p5pRT commented Sep 7, 2005

@rgs - 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