pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/56792: Fix pkg_info -F for directories
>Number: 56792
>Category: pkg
>Synopsis: Fix pkg_info -F for directories
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Apr 13 09:50:00 +0000 2022
>Originator: Anthony Mallet
>Release: pkgsrc-current, pkg_install 20211115
>Organization:
>Environment:
any
>Description:
pkg_info -F <file> returns the package name to which <file> belongs.
However, pkg_info -F <dir> for *empty* directories managed by a package returns a cryptic error message, due to missing bits in the search algorithm. In pkgdb.byfile.db, empty directories are stored with @pkgdir plist prefix and this is not filtered out by pkg-info -F. (see How-to-repeat below for an example).
A simple fix is attached. (but it harcodes the '@pkgdir' string instead of using functions from lib/plist.c, but such functions don't exist yet in lib/plist.c).
>How-To-Repeat:
% pkg_info -F /usr/pkg/lib/avahi
pkg_info: can't find package `@pkgdir avahi-0.6.32nb22'
>Fix:
diff --git pkgtools/pkg_install/files/info/main.c pkgtools/pkg_install/files/info/main.c
index 6827443f0..0a0d00d4f 100644
--- pkgtools/pkg_install/files/info/main.c
+++ pkgtools/pkg_install/files/info/main.c
@@ -259,6 +259,7 @@ main(int argc, char **argv)
if (s == NULL)
errx(EXIT_FAILURE, "No matching pkg for %s.", CheckPkg);
+ if (strncmp(s, "@pkgdir ", 8) == 0) s += 8;
CheckPkg = xstrdup(s);
pkgdb_close();
@@ -286,6 +287,7 @@ main(int argc, char **argv)
s = pkgdb_retrieve(*argv);
if (s) {
+ if (strncmp(s, "@pkgdir ", 8) == 0) s += 8;
lpp = alloc_lpkg(s);
TAILQ_INSERT_TAIL(&pkgs, lpp, lp_link);
} else
Home |
Main Index |
Thread Index |
Old Index