/* * dpkg - main program for package management * main.c - main program * * Copyright © 1994,1995 Ian Jackson * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2, * or (at your option) any later version. * * This is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with dpkg; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" int abort_processing = 0; static int nerrs = 0; struct error_report { struct error_report *next; const char *what; }; static struct error_report *reports = NULL; static struct error_report **lastreport= &reports; static struct error_report emergency; void print_error_perpackage(const char *emsg, const char *arg) { struct error_report *nr; fprintf(stderr, _("%s: error processing %s (--%s):\n %s\n"), DPKG, arg, cipaction->olong, emsg); statusfd_send("status: %s : %s : %s", arg, "error", emsg); nr= malloc(sizeof(struct error_report)); if (!nr) { perror(_("dpkg: failed to allocate memory for new entry in list of failed packages.")); abort_processing = 1; nr= &emergency; } nr->what= arg; nr->next = NULL; *lastreport= nr; lastreport= &nr->next; if (nerrs++ < errabort) return; fprintf(stderr, _("dpkg: too many errors, stopping\n")); abort_processing = 1; } int reportbroken_retexitstatus(void) { if (reports) { fputs(_("Errors were encountered while processing:\n"),stderr); while (reports) { fprintf(stderr," %s\n",reports->what); reports= reports->next; } } if (abort_processing) { fputs(_("Processing was halted because there were too many errors.\n"),stderr); } return nerrs ? 1 : 0; } int skip_due_to_hold(struct pkginfo *pkg) { if (pkg->want != want_hold) return 0; if (fc_hold) { fprintf(stderr, _("Package %s was on hold, processing it anyway as you requested\n"), pkg->name); return 0; } printf(_("Package %s is on hold, not touching it. Use --force-hold to override.\n"), pkg->name); return 1; } void forcibleerr(int forceflag, const char *fmt, ...) { va_list al; va_start(al,fmt); if (forceflag) { warning(_("overriding problem because --force enabled:")); fputc(' ', stderr); vfprintf(stderr,fmt,al); fputc('\n',stderr); } else { ohshitv(fmt,al); } va_end(al); }