Package: dpkg
Version: 1.13.17
Followup-For: Bug #286275
The initial problem reported in this bug (that install-info does not
understand the --dir-file option), no longer appears to be true.
Unfortunately, the implementation of the --dir-file option is not
correct: the script makes it an alias for the --info-dir option when
the former expects a filename and the latter expects a directory with an
assumed "dir" filename appended. The failure condition is that anyone
using the --dir-file option properly gets an error referring to a
filename with an extra "/dir" (e.g. "/usr/local/info/dir/dir").
My fix is to change the $infodir variable to hold the name of the file,
not the directory with a bunch of appended "/dir" strings in the code.
The attached patch makes the following changes:
1. All instances of $infodir/dir were changed to $infodir .
2. Any resulting instances of "$infodir" (including the quotes) was
changed to remove the unneeded double-quotes.
3. The initialization of $infodir gets a trailing /dir added.
4. The matching of --infodir and --info-dir was unified to use a
single regex and to append /dir to the end of the specified dir.
5. Changed a call of "-s $infodir" to "-s _" because we can reuse
the same stat info as a prior -e check.
6. Fixed the indentation of 4 lines.
-- System Information:
Debian Release: testing/unstable
APT prefers testing
APT policy: (900, 'testing'), (800, 'unstable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15-1-686
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Versions of packages dpkg depends on:
ii coreutils [textutils] 5.94-1 The GNU core utilities
ii libc6 2.3.6-3 GNU C Library: Shared libraries an
dpkg recommends no packages.
-- no debconf information
--- /usr/sbin/install-info 2006-03-19 17:38:31.000000000 -0800
+++ /tmp/install-info 2006-04-11 13:39:54.000000000 -0700
@@ -29,7 +29,7 @@
END
}
-$infodir='/usr/share/info';
+$infodir='/usr/share/info/dir';
$maxwidth=79;
$Text::Wrap::columns=$maxwidth;
$backup='/var/backups/infodir.bak';
@@ -80,14 +80,12 @@
$sectiontitle= shift(@ARGV);
} elsif (m/^--(c?align|maxwidth)=([0-9]+)$/) {
warn( "$name: $1 deprecated(ignored)\n" );
- } elsif (m/^--infodir=/) {
- $infodir=$';
+ } elsif (m/^--info-?dir=/) {
+ $infodir=$' . '/dir';
} elsif (m/^--info-file=/) {
$filename=$';
} elsif (m/^--menuentry=/) {
$menuentry=$';
- } elsif (m/^--info-dir=/) {
- $infodir=$';
} elsif (m/^--description=/) {
$description=$';
} elsif (m/^--dir-file=/) { # for compatibility with GNU install-info
@@ -250,21 +248,21 @@
}
}
-if (!$nowrite && ( ! -e "$infodir/dir" || ! -s "$infodir/dir" )) {
+if (!$nowrite && ( ! -e $infodir || ! -s _ )) {
if (-r $backup) {
- print STDERR "$name: no file $infodir/dir, retrieving backup file
$backup.\n";
- if (system ("cp $backup $infodir/dir")) {
- print STDERR "$name: copying $backup to $infodir/dir failed, giving
up: $!\n";
+ print STDERR "$name: no file $infodir, retrieving backup file
$backup.\n";
+ if (system ("cp $backup $infodir")) {
+ print STDERR "$name: copying $backup to $infodir failed, giving up:
$!\n";
exit 1;
}
} else {
if (-r $default) {
print STDERR "$name: no backup file $backup available, retrieving
default file.\n";
- if (system("cp $default $infodir/dir")) {
- print STDERR "$name: copying $default to $infodir/dir failed,
giving up: $!\n";
- exit 1;
- }
+ if (system("cp $default $infodir")) {
+ print STDERR "$name: copying $default to $infodir failed,
giving up: $!\n";
+ exit 1;
+ }
} else {
print STDERR "$name: no backup file $backup available.\n";
print STDERR "$name: no default file $default available, giving
up.\n";
@@ -273,15 +271,15 @@
}
}
-if (!$nowrite && !link("$infodir/dir","$infodir/dir.lock")) {
+if (!$nowrite && !link($infodir,"$infodir.lock")) {
print STDERR "$name: failed to lock dir for editing! $!\n".
- ($! =~ m/exists/i ? "try deleting $infodir/dir.lock ?\n" : '');
+ ($! =~ m/exists/i ? "try deleting $infodir.lock ?\n" : '');
}
-open(OLD,"$infodir/dir") || &ulquit("open $infodir/dir: $!");
+open(OLD,$infodir) || &ulquit("open $infodir: $!");
@work= <OLD>;
-eof(OLD) || &ulquit("read $infodir/dir: $!");
-close(OLD) || &ulquit("close $infodir/dir after read: $!");
+eof(OLD) || &ulquit("read $infodir: $!");
+close(OLD) || &ulquit("close $infodir after read: $!");
while (($#work >= 0) && ($work[$#work] !~ m/\S/)) { $#work--; }
while (@work) {
@@ -443,22 +441,22 @@
}
if (!$nowrite) {
- open(NEW,"> $infodir/dir.new") || &ulquit("create $infodir/dir.new: $!");
- print(NEW @head,join("\n",@newwork)) || &ulquit("write $infodir/dir.new:
$!");
- close(NEW) || &ulquit("close $infodir/dir.new: $!");
-
- unlink("$infodir/dir.old");
- link("$infodir/dir","$infodir/dir.old") ||
- &ulquit("cannot backup old $infodir/dir, giving up: $!");
- rename("$infodir/dir.new","$infodir/dir") ||
- &ulquit("install new $infodir/dir: $!");
-unlink("$infodir/dir.lock") || die "$name: unlock $infodir/dir: $!\n";
-system ("cp $infodir/dir $backup") && warn "$name: couldn't backup
$infodir/dir in $backup: $!\n";
+ open(NEW,"> $infodir.new") || &ulquit("create $infodir.new: $!");
+ print(NEW @head,join("\n",@newwork)) || &ulquit("write $infodir.new: $!");
+ close(NEW) || &ulquit("close $infodir.new: $!");
+
+ unlink("$infodir.old");
+ link($infodir,"$infodir.old") ||
+ &ulquit("cannot backup old $infodir, giving up: $!");
+ rename("$infodir.new",$infodir) ||
+ &ulquit("install new $infodir: $!");
+ unlink("$infodir.lock") || die "$name: unlock $infodir: $!\n";
+ system ("cp $infodir $backup") && warn "$name: couldn't backup $infodir in
$backup: $!\n";
}
sub ulquit {
- unlink("$infodir/dir.lock") ||
- warn "$name: warning - unable to unlock $infodir/dir: $!\n";
+ unlink("$infodir.lock") ||
+ warn "$name: warning - unable to unlock $infodir: $!\n";
die "$name: $_[0]\n";
}