+2008-03-28 Ian Jackson <ian@davenant.greenend.org.uk>
+
+ * src/help.c (cu_post_script_tasks): New function.
+ (do_script): Install cu_post_script_tasks as a cleanup handler.
+ (maintainer_script_alternative): Call post_script_tasks if the
+ first do_script invokation fails instead of it succeeding.
+
2008-03-28 Ian Jackson <ian@davenant.greenend.org.uk>,
Guillem Jover <guillem@debian.org>
ensure_diversions();
}
+static void
+cu_post_script_tasks(int argc, void **argv)
+{
+ post_script_tasks();
+}
+
static void setexecute(const char *path, struct stat *stab) {
if ((stab->st_mode & 0555) == 0555) return;
if (!chmod(path,0755)) return;
int c1, r;
setexecute(scriptpath,stab);
+ push_cleanup(cu_post_script_tasks, ehflag_bombout, NULL, 0, 0);
+
c1= m_fork();
if (!c1) {
const char **narglist;
script_catchsignals(); /* This does a push_cleanup() */
r= waitsubproc(c1,name,warn);
pop_cleanup(ehflag_normaltidy);
+
+ pop_cleanup(ehflag_normaltidy);
+
return r;
}
_("dpkg: warning - unable to stat %s `%.250s': %s\n"),
buf,oldscriptpath,strerror(errno));
} else {
- if (!do_script(pkg->name, scriptname, oldscriptpath, &stab, arglist, _("unable to execute %s"), buf, PROCWARN))
+ if (!do_script(pkg->name, scriptname, oldscriptpath, &stab, arglist,
+ _("unable to execute %s"), buf, PROCWARN)) {
+ post_script_tasks();
return 1;
- post_script_tasks();
+ }
}
fprintf(stderr, _("dpkg - trying script from the new package instead ...\n"));