Subject: | Multiple packages in transaction causes failure |
Distribution name/version: RPM2-0.66
Perl version: v5.8.6 for i386-linux-thread-multi
Operating system vendor and version: Linux 2.6.11-1.1369_FC4 #1 i686 i686 i386 GNU/Linux
It appears that adding multiple packages to a transaction set causes at least the fnpyKey of the previous package to be clobbered. So when it's used to open a file in the _null_callback, it appears that it's a random position in memory and as such contains random data. This causes the open to fail and for the transaction to fail with a "bad file descriptor" error. This can be examined by building a transaction set iterator that prints the fnpyKey after the rpmtsAddInstallElement() call in _add_install() as follows.
CODE:
rc = rpmtsAddInstallElement(t, h (fnpyKey)fn, upgrade, NULL);
rpmtsi pi;
rpmte pe;
pi = rpmtsiInit(t);
while ((pe = rpmtsiNext(pi, 0)) != NULL) {
char * key1 = (char *) rpmteKey(pe);
printf("_add_install: transaction filename - %s\n", key1);
}
...
Adding multiple packages should result in the newest added package printing it's filename and the prvious packages printing nothing or random data.