#include "rpmerr.h"
#include "rpmlib.h"
-static char * SCRIPT_PATH = "export PATH=/sbin:/bin:/usr/sbin:/usr/bin:"
- "/usr/X11R6/bin\n";
+static char * SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:"
+ "/usr/X11R6/bin\nexport PATH\n";
enum fileActions { REMOVE, BACKUP, KEEP };
return rc;
}
-int rpmRemovePackage(char * prefix, rpmdb db, unsigned int offset, int flags) {
+int rpmRemovePackage(char * prefix, rpmdb db, unsigned int offset,
+ int upgrade, int flags) {
Header h;
int i;
int fileCount;
}
message(MESS_DEBUG, "running preuninstall script (if any)\n");
- runScript(prefix, h, RPMTAG_PREUN, flags & UNINSTALL_NOSCRIPTS);
+ runScript(prefix, h, RPMTAG_PREUN, flags & UNINSTALL_NOSCRIPTS, upgrade);
message(MESS_DEBUG, "%s files test = %d\n", rmmess, flags & UNINSTALL_TEST);
if (!getEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList,
}
message(MESS_DEBUG, "running postuninstall script (if any)\n");
- runScript(prefix, h, RPMTAG_POSTUN, flags & UNINSTALL_NOSCRIPTS);
+ runScript(prefix, h, RPMTAG_POSTUN, flags & UNINSTALL_NOSCRIPTS, upgrade);
freeHeader(h);
return 0;
}
-int runScript(char * prefix, Header h, int tag, int norunScripts) {
+int runScript(char * prefix, Header h, int tag,
+ int norunScripts, int upgrade) {
int count, type;
char * script;
char * fn;
int isdebug = isDebug();
int child;
int status;
+ char * upgradeArg;
+
+ upgradeArg = (upgrade) ? "upgrade" : "";
if (norunScripts) return 0;
}
if (isdebug)
- execl("/bin/sh", "/bin/sh", "-x", NULL);
+ execl("/bin/sh", "/bin/sh", "-x", "-s", upgradeArg, NULL);
else
- execl("/bin/sh", "/bin/sh", NULL);
+ execl("/bin/sh", "/bin/sh", "-s", upgradeArg, NULL);
exit(-1);
}
close(fd);