File dirvish-locate.patch of Package dirvish

From: Ondřej Surý <ondrej@debian.org>
Subject: Get patch level of loadconfig.pl in case exit codes are needed.

--- dirvish-1.2.1~/dirvish-locate.pl	2004-02-25 03:42:14.000000000 +0100
+++ dirvish-1.2.1/dirvish-locate.pl	2006-07-07 11:14:12.000000000 +0200
@@ -1,3 +1,8 @@
+#!/usr/bin/perl
+
+$CONFDIR = "/etc/dirvish";
+
+
 #       $Id: dirvish-locate.pl,v 12.0 2004/02/25 02:42:14 jw Exp $  $Name: Dirvish-1_2 $
 
 $VERSION = ('$Name: Dirvish-1_2_1 $' =~ /Dirvish/i)
@@ -234,3 +239,244 @@
 	|| $$b{created} cmp $$a{created};
 }
 
+#	Get patch level of loadconfig.pl in case exit codes
+#	are needed.
+#		$Id: loadconfig.pl,v 12.0 2004/02/25 02:42:15 jw Exp $
+
+
+#########################################################################
+#                                                         		#
+#	Copyright 2002 and $Date: 2004/02/25 02:42:15 $
+#                         Pegasystems Technologies and J.W. Schultz 	#
+#                                                         		#
+#	Licensed under the Open Software License version 2.0		#
+#                                                         		#
+#########################################################################
+
+sub seppuku	# Exit with code and message.
+{
+	my ($status, $message) = @_;
+
+	chomp $message;
+	if ($message)
+	{
+		$seppuku_prefix and print STDERR $seppuku_prefix, ': ';
+		print STDERR $message, "\n";
+	}
+	exit $status;
+}
+
+sub slurplist
+{
+	my ($key, $filename, $Options) = @_;
+	my $f;
+	my $array;
+
+	$filename =~ m(^/) and $f = $filename;
+	if (!$f && ref($$Options{vault}) ne 'CODE')
+	{
+		$f = join('/', $$Options{Bank}, $$Options{vault},
+			'dirvish', $filename);
+		-f $f or $f = undef;
+	}
+	$f or $f = "$CONFDIR/$filename";
+	open(PATFILE, "<$f") or seppuku 229, "cannot open $filename for $key list";
+	$array = $$Options{$key};
+	while(<PATFILE>)
+	{
+		chomp;
+		length or next;
+		push @{$array}, $_;
+	}
+	close PATFILE;
+}
+
+#   loadconfig -- load configuration file
+#   SYNOPSYS
+#     	loadconfig($opts, $filename, \%data)
+#
+#   DESCRIPTION
+#   	load and parse a configuration file into the data
+#   	hash.  If the filename does not contain / it will be
+#   	looked for in the vault if defined.  If the filename
+#   	does not exist but filename.conf does that will
+#   	be read.
+#
+#   OPTIONS
+#	Options are case sensitive, upper case has the
+#	opposite effect of lower case.  If conflicting
+#	options are given only the last will have effect.
+#
+#   	f	Ignore fields in config file that are
+#   		capitalized.
+#   
+#   	o	Config file is optional, return undef if missing.
+#   
+#   	R	Do not allow recoursion.
+#
+#   	g	Only load from global directory.
+#
+#	
+#   
+#   LIMITATIONS
+#   	Only way to tell whether an option should be a list
+#   	or scalar is by the formatting in the config file.
+#   
+#   	Options reqiring special handling have to have that
+#   	hardcoded in the function.
+#
+
+sub loadconfig
+{
+	my ($mode, $configfile, $Options) = @_;
+	my $confile = undef;
+	my ($key, $val);
+	my $CONFIG;
+	ref($Options) or $Options = {};
+	my %modes;
+	my ($conf, $bank, $k);
+
+	$modes{r} = 1;
+	for $_ (split(//, $mode))
+	{
+		if (/[A-Z]/)
+		{
+			$_ =~ tr/A-Z/a-z/;
+			$modes{$_} = 0;
+		} else {
+			$modes{$_} = 1;
+		}
+	}
+
+
+	$CONFIG = 'CFILE' . scalar(@{$$Options{Configfiles}});
+
+	$configfile =~ s/^.*\@//;
+
+	if($configfile =~ m[/])
+	{
+		$confile = $configfile;
+	}
+	elsif($configfile ne '-')
+	{
+		if(!$modes{g} && $$Options{vault} && $$Options{vault} ne 'CODE')
+		{
+			if(!$$Options{Bank})
+			{
+				my $bank;
+				for $bank (@{$$Options{bank}})
+				{
+					if (-d "$bank/$$Options{vault}")
+					{
+						$$Options{Bank} = $bank;
+						last;
+					}
+				}
+			}
+			if ($$Options{Bank})
+			{
+				$confile = join('/', $$Options{Bank},
+					$$Options{vault}, 'dirvish',
+					$configfile);
+				-f $confile || -f "$confile.conf"
+					or $confile = undef;
+			}
+		}
+		$confile ||= "$CONFDIR/$configfile";
+	}
+
+	if($configfile eq '-')
+	{
+		open($CONFIG, $configfile) or seppuku 221, "cannot open STDIN";
+	} else {
+		! -f $confile && -f "$confile.conf" and $confile .= '.conf';
+
+		if (! -f "$confile")
+		{
+			$modes{o} and return undef;
+			seppuku 222, "cannot open config file: $configfile";
+		}
+
+		grep(/^$confile$/, @{$$Options{Configfiles}})
+			and seppuku 224, "ERROR: config file looping on $confile";
+
+		open($CONFIG, $confile)
+			or seppuku 225, "cannot open config file: $configfile";
+	}
+	push(@{$$Options{Configfiles}}, $confile);
+
+	while(<$CONFIG>)
+	{
+		chomp;
+		s/\s*#.*$//;
+		s/\s+$//;
+		/\S/ or next;
+		
+		if(/^\s/ && $key)
+		{
+			s/^\s*//;
+			push @{$$Options{$key}}, $_;
+		}
+		elsif(/^SET\s+/)
+		{
+			s/^SET\s+//;
+			for $k (split(/\s+/))
+			{
+				$$Options{$k} = 1;
+			}
+		}
+		elsif(/^UNSET\s+/)
+		{
+			s/^UNSET\s+//;
+			for $k (split(/\s+/))
+			{
+				$$Options{$k} = undef;
+			}
+		}
+		elsif(/^RESET\s+/)
+		{
+			($key = $_) =~ s/^RESET\s+//;
+			$$Options{$key} = [ ];
+		}
+		elsif(/^[A-Z]/ && $modes{f})
+		{
+			$key = undef;
+		}
+		elsif(/^\S+:/)
+		{
+			($key, $val) = split(/:\s*/, $_, 2);
+			length($val) or next;
+			$k = $key; $key = undef;
+
+			if ($k eq 'config')
+			{
+				$modes{r} and loadconfig($mode . 'O', $val, $Options);
+				next;
+			}
+			if ($k eq 'client')
+			{
+				if ($modes{r} && ref ($$Options{$k}) eq 'CODE')
+				{
+					loadconfig($mode .  'og', "$CONFDIR/$val", $Options);
+				}
+				$$Options{$k} = $val;
+				next;
+			}
+			if ($k eq 'file-exclude')
+			{
+				$modes{r} or next;
+
+				slurplist('exclude', $val, $Options);
+				next;
+			}
+			if (ref ($$Options{$k}) eq 'ARRAY')
+			{
+				push @{$$Options{$k}}, $_;
+			} else {
+				$$Options{$k} = $val;
+			}
+		}
+	}
+	close $CONFIG;
+	return $Options;
+}
openSUSE Build Service is sponsored by