POE-Devel-ProcAlike
view release on metacpan or search on metacpan
lib/POE/Devel/ProcAlike/PerlInfo.pm view on Meta::CPAN
} else {
# a directory, munge the data
$size = 0;
$modes = oct( '040755' );
$nlink = 2;
}
# finally, return the darn data!
return( [ $dev, $ino, $modes, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks ] );
} elsif ( $type eq 'open' ) {
# return a scalar ref
if ( exists $ENV{ $path[0] } ) {
my $data = $ENV{ $path[0] } . "\n";
return \$data;
} else {
return;
}
}
}
# we cheat here and not implement a lot of stuff because we know the FUSE api never calls the "extra" APIs
# that ::Async provides. Furthermore, this is a read-only filesystem so we can skip even more APIs :)
# _rmtree
# _scandir
# _move
# _copy
# _load
sub _readdir {
my( $self, $path ) = @_;
if ( $path eq File::Spec->rootdir() ) {
return [ keys %fs ];
} else {
# sanitize the path
my @dirs = File::Spec->splitdir( $path );
shift( @dirs ); # get rid of the root entry which is always '' for me
return $fs{ $dirs[0] }->( 'readdir', @dirs[ 1 .. $#dirs ] );
}
}
# _rmdir
# _mkdir
# _rename
# _mknod
# _unlink
# _chmod
# _truncate
# _chown
# _utime
sub _stat {
my( $self, $path ) = @_;
# stating the root?
if ( $path eq File::Spec->rootdir() ) {
my ($atime, $ctime, $mtime, $size, $modes);
$atime = $ctime = $mtime = time();
my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = ( 0, 0, 0, 1, (split( /\s+/, $) ))[0], $>, 1, 1024 );
$size = 0;
$modes = oct( '040755' );
# count subdirs
$nlink = 2 + grep { ref $fs{ $_ } } keys %fs;
return( [ $dev, $ino, $modes, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks ] );
}
# sanitize the path
my @dirs = File::Spec->splitdir( $path );
shift( @dirs ); # get rid of the root entry which is always '' for me
if ( exists $fs{ $dirs[0] } ) {
# directory or file?
if ( ref $fs{ $dirs[0] } ) {
# trying to stat the dir or the subpath?
return $fs{ $dirs[0] }->( 'stat', @dirs[ 1 .. $#dirs ] );
} else {
# arg, stat is a finicky beast!
my $size = length( $fs{ $dirs[0] } );
my $modes = oct( '100644' );
my ($dev, $ino, $rdev, $blocks, $gid, $uid, $nlink, $blksize) = ( 0, 0, 0, 1, (split( /\s+/, $) ))[0], $>, 1, 1024 );
my ($atime, $ctime, $mtime);
$atime = $ctime = $mtime = time();
return( [ $dev, $ino, $modes, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks ] );
}
} else {
return;
}
}
# _write
sub _open {
my( $self, $path ) = @_;
# sanitize the path
my @dirs = File::Spec->splitdir( $path );
shift( @dirs ); # get rid of the root entry which is always '' for me
if ( defined $dirs[0] and exists $fs{ $dirs[0] } ) {
# directory or file?
if ( ref $fs{ $dirs[0] } ) {
return $fs{ $dirs[0] }->( 'open', @dirs[ 1 .. $#dirs ] );
} else {
# return a scalar ref
return \$fs{ $dirs[0] };
( run in 0.957 second using v1.01-cache-2.11-cpan-800906f7e73 )