Filesys-CygwinPaths

 view release on metacpan or  search on metacpan

lib/Filesys/CygwinPaths.pm  view on Meta::CPAN


    my @pics_to_ogle = glob("$HOME/mypics/*.jpg");
	foreach my $pic (@pics_to_ogle) {
	   system('C:/Applications/IrfanView/iview32',
	        vetted_path($pic), '/bf /pos=(0,0) /one', "/title=$pic")
         or die "No fun today!";
    }
	system('C:/Applications/IrfanView/iview32', '/killmesoftly');

   OR

    use Filesys::CygwinPaths ':all';
	my $windows_groks_this = fullwin32path("$ENV{HOME}");
	my $posix_style = fullposixpath($ENV{'USERPROFILE'});

	if(posixpath($windows_groks_this) ne $posix_style)
	{
	   print "You don't keep your bash HOME in your NT Profile dir, huh?\n";
    }

=cut



sub PATHS_mode {
  my $selfobj ; # OO-ready
  if(ref $_[0]) {
	$selfobj = shift;
  }
  if(not $_[0] and not defined $PATHSMODE) {
	$PATHSMODE = 'cyg_mixed';
  } elsif(defined $_[0]) {
	  my $arg = shift;
	  $arg eq 'cyg_mixed'?
		 do{ $PATHSMODE = $arg; }
	: $arg eq 'cyg_posix'?
	     do{ $PATHSMODE = $arg; }
	: $arg eq 'cyg_win32'?
	     do{ $PATHSMODE = $arg; }
	:
      do{ Carp::croak "Invalid PATHSMODE name: \"$arg\" -- "; }
	; # end psuedo case / switch statement.
  }
  $selfobj->{'PATHSMODE'} = $PATHSMODE if defined($selfobj); 
  return $PATHSMODE;
}


sub _handle_tilde {

  my $arg = shift;
  return $arg unless $arg =~/^~/;
  my $pathsep = (defined($PATHSMODE) && $PATHSMODE eq 'cyg_win32')?
          '\\' : '/';
  my @homey = split( /\/|$pathsep/, $arg, 2 );
  Carp::croak "Cannot understand your arg: $_[0] -- " unless
     $homey[0] =~/^~\w*\z/;
  # pattern ' m/^~(\w+)?/ ' is tilde with optional username
	 $homey[0] =~ s%^~(\w*)%$1 ?
		   ((getpwnam($1))[7] || "~$1")
		:   (getpwuid($>))[7]
		      %ex;
  return join( $pathsep, $homey[0],$homey[1] );
}

sub vetted_path {
  my $returnpath;
  my $inpath = _handle_tilde(shift);
  if(not defined $PATHSMODE) {
	Carp::carp 'You ought to set $PATHSMODE'.
	 ' before calling this subroutine!'.
	 "\nDefaulting to 'cyg_mixed' style. -- ";
	$PATHSMODE = &PATHS_mode('cyg_mixed');
  }

  $returnpath =
   $PATHSMODE eq 'cyg_mixed'?
      do{ $returnpath = win32path($inpath);
	      $returnpath =~s@\\@/@g; $returnpath; }
  :$PATHSMODE eq 'cyg_posix'?
      posixpath($inpath)
  :$PATHSMODE eq 'cyg_win32'?
      win32path($inpath)
  : '' # should never happen.
  ; # end psuedo case / switch statement

   $returnpath;
}


#-----------------------------------------------------------------#
#                                                                 #
#       CALL THE ACTUAL XS INTERFACE C FUNCTIONS                  #
#                                                                 #
#-----------------------------------------------------------------#


sub fullposixpath {
  my ($input, $retval, $output);
  $input = _handle_tilde(shift);
  if( $input eq '') {
	Carp::carp "No path argument supplied! -- ";
	return '';
  }
  $output = cygwin_conv_to_full_posix_path($input);
}


sub fullwin32path {
  my ($input, $retval, $output);
  $input = _handle_tilde(shift);
  if( $input eq '') {
	Carp::carp "No path argument supplied! -- ";
	return '';
  }
  $output = ucfirst
     cygwin_conv_to_full_win32_path($input);
}


sub posixpath {



( run in 1.004 second using v1.01-cache-2.11-cpan-39bf76dae61 )