Index: /trunk/PS-IPP-Config/lib/PS/IPP/Config.pm
===================================================================
--- /trunk/PS-IPP-Config/lib/PS/IPP/Config.pm	(revision 13787)
+++ /trunk/PS-IPP-Config/lib/PS/IPP/Config.pm	(revision 13788)
@@ -1,5 +1,5 @@
 # Copyright (c) 2006  Paul Price, Joshua Hoblitt
 #
-# $Id: Config.pm,v 1.59 2007-06-08 22:53:39 eugene Exp $
+# $Id: Config.pm,v 1.60 2007-06-13 19:16:11 eugene Exp $
 
 package PS::IPP::Config;
@@ -281,4 +281,5 @@
     }
     if ($scheme eq 'path' or $scheme eq 'file') {
+	# guaranteed to have a scheme (path:// or file://)
 	return $self->convert_filename_absolute( $name );
     }
@@ -304,4 +305,5 @@
 	}
 	if ($scheme eq 'path' or $scheme eq 'file') {
+	    # guaranteed to have a scheme (path:// or file://)
 	    $name = $self->convert_filename_absolute( $name );
 	}
@@ -338,4 +340,5 @@
 	}
 	if ($scheme eq 'path' or $scheme eq 'file') {
+	    # guaranteed to have a scheme (path:// or file://)
 	    $name = $self->convert_filename_absolute( $name );
 	}
@@ -436,4 +439,6 @@
 
     # Might need to create a directory
+    # not guaranteed to have a scheme (path:// or file://) - might be /PATH/foobar
+    # a relative path (PATH/foobar) is invalid here
     my $resolved = $self->convert_filename_absolute( $name );
     my ( $vol, $dirs, $file ) = File::Spec->splitpath( $resolved );
@@ -447,4 +452,5 @@
 
 # Convert a relative filename (e.g., "path://PATH/file") to an absolute (e.g., "/path/to/file")
+# note that file://PATH/file resolves to /PATH/file, regardless of the number of leading slashes
 sub convert_filename_absolute
 {
@@ -457,8 +463,21 @@
     }
 
-    $name =~ s|/$||;
+    $name =~ s|/$||; # drop tailing slashes (foobar/ to foobar)
     my ($scheme) = $name =~ m|^(\S+):|; # The scheme, e.g., file, path
+
+    ## if this is already an absolute path (/PATH/file), just return the path
+    unless (defined $scheme) { 
+	if ($name =~ m|^/|) { return $name; }
+	# without a leading slash, this is an error
+	carp "Programming error";
+	exit($PS_EXIT_PROG_ERROR);
+    }
+
     $name =~ s|^\S+:/*||;
-    return $name if lc($scheme) eq 'file';
+    $name = '/' . $name;
+
+    if (lc($scheme) eq 'file') {
+	return $name;
+    }
 
     if (lc($scheme) eq 'path') {
@@ -470,5 +489,10 @@
     }
 
-    return $name;
+    # looks like we cannot reach here without an invalid scheme.  
+    # programming error?
+    # return $name;
+
+    carp "Programming error";
+    exit($PS_EXIT_PROG_ERROR);
 }
 
@@ -490,4 +514,5 @@
 	if ($scheme eq 'path' or $scheme eq 'file') {
 	    # We may as well search for a 'better' path
+	    # guaranteed to have a scheme (path:// or file://)
 	    $name = $self->convert_filename_absolute( $name );
 	} elsif ($scheme eq 'neb') {
