/* * dpkg - main program for package management * main.h - external definitions for this program * * Copyright © 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 of the License, 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 this program. If not, see . */ #ifndef MAIN_H #define MAIN_H #include #include /* These two are defined in filesdb.h. */ struct fileinlist; struct filenamenode; struct perpackagestate { enum istobes { itb_normal, itb_remove, itb_installnew, itb_deconfigure, itb_preinstall } istobe; /* Used during cycle detection. */ enum { white, gray, black, } color; /* * filelistvalid files Meaning * ------------- ----- ------- * false NULL Not read yet, must do so if want them. * false !NULL Read, but rewritten and now out of date. If want * info must throw away old and reread file. * true !NULL Read, all is OK. * true NULL Read OK, but, there were no files. */ bool fileslistvalid; struct fileinlist *files; int replacingfilesandsaid; off_t listfile_phys_offs; /* Non-NULL iff in trigproc.c:deferred. */ struct pkg_list *trigprocdeferred; }; enum action { act_unset, act_unpack, act_configure, act_install, act_triggers, act_remove, act_purge, act_commandfd, act_status, act_listpackages, act_listfiles, act_searchfiles, act_controlpath, act_cmpversions, act_printarch, act_printinstarch, act_assertpredep, act_assertepoch, act_assertlongfilenames, act_assertmulticonrep, act_audit, act_unpackchk, act_predeppackage, act_getselections, act_setselections, act_clearselections, act_avail, act_printavail, act_avclear, act_avreplace, act_avmerge, act_forgetold, }; enum conffopt { cfof_prompt = 001, cfof_keep = 002, cfof_install = 004, cfof_backup = 00100, cfof_newconff = 00200, cfof_isnew = 00400, cfof_isold = 01000, cfof_userrmd = 02000, cfo_keep = cfof_keep, cfo_prompt_keep = cfof_keep | cfof_prompt, cfo_prompt = cfof_prompt, cfo_prompt_install = cfof_prompt | cfof_install, cfo_install = cfof_install, cfo_newconff = cfof_install | cfof_newconff, cfo_identical = cfof_keep }; extern const char *const statusstrings[]; extern int f_pending, f_recursive, f_alsoselect, f_skipsame, f_noact; extern int f_autodeconf, f_nodebsig; extern int f_triggers; extern int fc_downgrade, fc_configureany, fc_hold, fc_removereinstreq, fc_overwrite; extern int fc_removeessential, fc_conflicts, fc_depends, fc_dependsversion; extern int fc_breaks, fc_badpath, fc_overwritediverted, fc_architecture; extern int fc_nonroot, fc_overwritedir, fc_conff_new, fc_conff_miss; extern int fc_conff_old, fc_conff_def; extern int fc_conff_ask; extern int fc_badverify; extern int fc_badversion; extern int fc_unsafe_io; extern bool abort_processing; extern int errabort; extern const char *instdir; extern struct pkg_list *ignoredependss; extern const char native_arch[]; struct invoke_hook { struct invoke_hook *next; const char *command; }; /* from archives.c */ int archivefiles(const char *const *argv); void process_archive(const char *filename); bool wanttoinstall(struct pkginfo *pkg); struct fileinlist *newconff_append(struct fileinlist ***newconffileslastp_io, struct filenamenode *namenode); /* from update.c */ int forgetold(const char *const *argv); int updateavailable(const char *const *argv); /* from enquiry.c */ int audit(const char *const *argv); int unpackchk(const char *const *argv); int assertepoch(const char *const *argv); int assertpredep(const char *const *argv); int assertlongfilenames(const char *const *argv); int assertmulticonrep(const char *const *argv); int predeppackage(const char *const *argv); int printarch(const char *const *argv); int printinstarch(const char *const *argv); int cmpversions(const char *const *argv); /* from select.c */ int getselections(const char *const *argv); int setselections(const char *const *argv); int clearselections(const char *const *argv); /* from packages.c, remove.c and configure.c */ void add_to_queue(struct pkginfo *pkg); void process_queue(void); int packages(const char *const *argv); void removal_bulk(struct pkginfo *pkg); int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in); enum dep_check { dep_check_halt = 0, dep_check_defer = 1, dep_check_ok = 2, }; enum dep_check dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, struct varbuf *aemsgs); enum dep_check breakses_ok(struct pkginfo *pkg, struct varbuf *aemsgs); void deferred_remove(struct pkginfo *pkg); void deferred_configure(struct pkginfo *pkg); extern int sincenothing, dependtry; /* from cleanup.c (most of these are declared in archives.h) */ void cu_prermremove(int argc, void **argv); /* from errors.c */ void print_error_perpackage(const char *emsg, const char *arg); void forcibleerr(int forceflag, const char *format, ...) DPKG_ATTR_PRINTF(2); int reportbroken_retexitstatus(int ret); bool skip_due_to_hold(struct pkginfo *pkg); /* from help.c */ struct stat; bool ignore_depends(struct pkginfo *pkg); bool force_breaks(struct deppossi *possi); bool force_depends(struct deppossi *possi); bool force_conflicts(struct deppossi *possi); void oldconffsetflags(const struct conffile *searchconff); void ensure_pathname_nonexisting(const char *pathname); int secure_unlink(const char *pathname); int secure_unlink_statted(const char *pathname, const struct stat *stab); void checkpath(void); struct filenamenode *namenodetouse(struct filenamenode*, struct pkginfo*); int maintainer_script_installed(struct pkginfo *pkg, const char *scriptname, const char *desc, ...) DPKG_ATTR_SENTINEL; int maintainer_script_new(struct pkginfo *pkg, const char *scriptname, const char *desc, const char *cidir, char *cidirrest, ...) DPKG_ATTR_SENTINEL; int maintainer_script_alternative(struct pkginfo *pkg, const char *scriptname, const char *desc, const char *cidir, char *cidirrest, const char *ifok, const char *iffallback); /* Callers wanting to run the postinst use these two as they want to postpone * trigger incorporation until after updating the package status. The effect * is that a package can trigger itself. */ int maintainer_script_postinst(struct pkginfo *pkg, ...) DPKG_ATTR_SENTINEL; void post_postinst_tasks_core(struct pkginfo *pkg); void post_postinst_tasks(struct pkginfo *pkg, enum pkgstatus new_status); void clear_istobes(void); bool dir_is_used_by_others(struct filenamenode *namenode, struct pkginfo *pkg); bool dir_is_used_by_pkg(struct filenamenode *namenode, struct pkginfo *pkg, struct fileinlist *list); bool dir_has_conffiles(struct filenamenode *namenode, struct pkginfo *pkg); void log_action(const char *action, struct pkginfo *pkg); /* from trigproc.c */ void trigproc_install_hooks(void); void trigproc_run_deferred(void); void trigproc_reset_cycle(void); void trigproc(struct pkginfo *pkg); void trig_activate_packageprocessing(struct pkginfo *pkg); /* from depcon.c */ bool depisok(struct dependency *dep, struct varbuf *whynot, struct pkginfo **fixbyrm, struct pkginfo **fixbytrigaw, bool allowunconfigd); struct cyclesofarlink; bool findbreakcycle(struct pkginfo *pkg); void describedepcon(struct varbuf *addto, struct dependency *dep); #endif /* MAIN_H */