IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 13317


Ignore:
Timestamp:
May 9, 2007, 4:35:36 PM (19 years ago)
Author:
Paul Price
Message:

Not using URI module to parse URIs in caturi --- there are too many exceptions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/PS-IPP-Config/lib/PS/IPP/Config.pm

    r13297 r13317  
    11# Copyright (c) 2006  Paul Price, Joshua Hoblitt
    22#
    3 # $Id: Config.pm,v 1.44 2007-05-07 21:03:10 price Exp $
     3# $Id: Config.pm,v 1.45 2007-05-10 02:35:36 price Exp $
    44
    55package PS::IPP::Config;
     
    170170    my @segments = @_;          # Path segments
    171171
    172     my $old = URI->new( $base ) or die "Unable to parse URI: $base\n"; # URI
    173     $old = $old->canonical();   # Clean up
    174     my $scheme = $old->scheme(); # Scheme, e.g., file, path
    175     unshift @segments, $old->path_segments();
    176 
    177     for (my $i = 0; $i < scalar @segments; $i++) {
    178         splice( @segments, $i--, 1 ) unless $segments[$i] =~ /\S+/;
    179     }
    180 
    181     my $new = URI->new();       # URI to return
    182     $new->scheme( $scheme );
    183     $new->authority( $old->authority() );
    184 
    185     # Catch "neb:", "neb:/" and "neb://" for the base name
    186     my $opaque = $old->opaque();
    187     unshift( @segments, '', '' ) if $opaque eq '' or $opaque eq '/' or $opaque eq '//';
    188     $new->opaque( '/') if $old->opaque() eq '//';
    189 
    190     $new->path_segments( @segments );
    191 
    192     return $new->canonical()->as_string();
     172    my ($scheme) = $base =~ m|^(\S+):|; # The scheme, e.g., file://, path://
     173    $base =~ s|^\S+:/*||;
     174    my $root = '/' if $base =~ m|^/|; # Any root slashes?
     175
     176    unshift @segments, $base if $base =~ /\S+/;
     177
     178    # Remove leading and trailing slashes
     179    foreach my $segment ( @segments ) {
     180        $segment =~ s|^/*||;
     181        $segment =~ s|/*$||;
     182    }
     183
     184    # Join everything together
     185    my $joined = join('/', @segments);
     186    if (defined $scheme) {
     187        $joined = $scheme . "://" . $joined;
     188    } else {
     189        $joined = $root . $joined;
     190    }
     191
     192    return $joined;
    193193}
    194194
     
    388388    my $template = shift;       # Template filename from which to get working directory if
    389389
     390    my $resolved = $name;       # Resolved version of file name
    390391    if (defined $workdir) {
    391         $name = caturi( $workdir, $name );
     392        $resolved = caturi( $workdir, $name );
    392393    } elsif (defined $template) {
    393394        # Take directory from template and apply to name
    394395        my $dir = _strip_filename( $template );
    395         $name = caturi( $dir, $name );
     396        $resolved = caturi( $dir, $name );
    396397    }
    397398
     
    401402
    402403    # Might need to create a directory
    403     $name = $self->convert_filename_absolute( $name );
    404     my ( $vol, $dirs, $file ) = File::Spec->splitpath( $name );
     404    $resolved = $self->convert_filename_absolute( $resolved );
     405    my ( $vol, $dirs, $file ) = File::Spec->splitpath( $resolved );
    405406    system "mkdir -p $dirs";
    406407
Note: See TracChangeset for help on using the changeset viewer.