diff options
author | Guillem Jover <guillem@debian.org> | 2013-11-13 05:41:23 +0100 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2013-12-07 07:51:14 +0100 |
commit | 6263f5190eceec3bc30e8c8528c6388cfb1ff15f (patch) | |
tree | 90dc726a791bc1d08a90ba15ad31c87d37ed7120 /src | |
parent | 3f46417a52669ac2d7753e544dbd4962f245c499 (diff) | |
download | dpkg-6263f5190eceec3bc30e8c8528c6388cfb1ff15f.tar.gz |
dpkg: Refactor show_prompt() out from promptconfaction()
Diffstat (limited to 'src')
-rw-r--r-- | src/configure.c | 207 |
1 files changed, 109 insertions, 98 deletions
diff --git a/src/configure.c b/src/configure.c index cb33073d9..0ce428a7a 100644 --- a/src/configure.c +++ b/src/configure.c @@ -87,6 +87,112 @@ static enum conffopt promptconfaction(struct pkginfo *pkg, const char *cfgfile, int useredited, int distedited, enum conffopt what); +static int +show_prompt(const char *cfgfile, const char *realold, const char *realnew, + int useredited, int distedited, enum conffopt what) +{ + const char *s; + int c, cc; + + /* Flush the terminal's input in case the user involuntarily + * typed some characters. */ + tcflush(STDIN_FILENO, TCIFLUSH); + + fputs("\n", stderr); + if (strcmp(cfgfile, realold) == 0) + fprintf(stderr, _("Configuration file '%s'\n"), cfgfile); + else + fprintf(stderr, _("Configuration file '%s' (actually '%s')\n"), + cfgfile, realold); + + if (what & cfof_isnew) { + fprintf(stderr, + _(" ==> File on system created by you or by a script.\n" + " ==> File also in package provided by package maintainer.\n")); + } else { + fprintf(stderr, !useredited ? + _(" Not modified since installation.\n") : + !(what & cfof_userrmd) ? + _(" ==> Modified (by you or by a script) since installation.\n") : + _(" ==> Deleted (by you or by a script) since installation.\n")); + + fprintf(stderr, distedited ? + _(" ==> Package distributor has shipped an updated version.\n") : + _(" Version in package is the same as at last installation.\n")); + } + + /* No --force-confdef but a forcible situtation. */ + /* TODO: check if this condition can not be simplified to + * just !fc_conff_def */ + if (!(fc_conff_def && (what & (cfof_install | cfof_keep)))) { + if (fc_conff_new) { + fprintf(stderr, + _(" ==> Using new file as you requested.\n")); + return 'y'; + } else if (fc_conff_old) { + fprintf(stderr, + _(" ==> Using current old file as you requested.\n")); + return 'n'; + } + } + + /* Force the default action (if there is one. */ + if (fc_conff_def) { + if (what & cfof_keep) { + fprintf(stderr, + _(" ==> Keeping old config file as default.\n")); + return 'n'; + } else if (what & cfof_install) { + fprintf(stderr, + _(" ==> Using new config file as default.\n")); + return 'y'; + } + } + + fprintf(stderr, + _(" What would you like to do about it ? Your options are:\n" + " Y or I : install the package maintainer's version\n" + " N or O : keep your currently-installed version\n" + " D : show the differences between the versions\n" + " Z : start a shell to examine the situation\n")); + + if (what & cfof_keep) + fprintf(stderr, + _(" The default action is to keep your current version.\n")); + else if (what & cfof_install) + fprintf(stderr, + _(" The default action is to install the new version.\n")); + + s = path_basename(cfgfile); + fprintf(stderr, "*** %s (Y/I/N/O/D/Z) %s ? ", s, + (what & cfof_keep) ? _("[default=N]") : + (what & cfof_install) ? _("[default=Y]") : + _("[no default]")); + + if (ferror(stderr)) + ohshite(_("error writing to stderr, discovered before conffile prompt")); + + cc = 0; + while ((c = getchar()) != EOF && c != '\n') + if (!isspace(c) && !cc) + cc = tolower(c); + + if (c == EOF) { + if (ferror(stdin)) + ohshite(_("read error on stdin at conffile prompt")); + ohshit(_("EOF on stdin at conffile prompt")); + } + + if (!cc) { + if (what & cfof_keep) + return 'n'; + else if (what & cfof_install) + return 'y'; + } + + return cc; +} + /** * Configure the ghost conffile instance. * @@ -690,8 +796,7 @@ promptconfaction(struct pkginfo *pkg, const char *cfgfile, const char *realold, const char *realnew, int useredited, int distedited, enum conffopt what) { - const char *s; - int c, cc; + int cc; if (!(what & cfof_prompt)) return what; @@ -701,102 +806,8 @@ promptconfaction(struct pkginfo *pkg, const char *cfgfile, realold, realnew, useredited, distedited); do { - /* Flush the terminal's input in case the user involuntarily - * typed some characters. */ - tcflush(STDIN_FILENO, TCIFLUSH); - fputs("\n", stderr); - if (strcmp(cfgfile, realold)) - fprintf(stderr, _("Configuration file '%s' (actually '%s')\n"), - cfgfile, realold); - else - fprintf(stderr, _("Configuration file '%s'\n"), cfgfile); - - if (what & cfof_isnew) { - fprintf(stderr, - _(" ==> File on system created by you or by a script.\n" - " ==> File also in package provided by package maintainer.\n")); - } else { - fprintf(stderr, !useredited ? - _(" Not modified since installation.\n") : - !(what & cfof_userrmd) ? - _(" ==> Modified (by you or by a script) since installation.\n") : - _(" ==> Deleted (by you or by a script) since installation.\n")); - - fprintf(stderr, distedited ? - _(" ==> Package distributor has shipped an updated version.\n") : - _(" Version in package is the same as at last installation.\n")); - } - - /* No --force-confdef but a forcible situtation. */ - /* TODO: check if this condition can not be simplified to - * just !fc_conff_def */ - if (!(fc_conff_def && (what & (cfof_install | cfof_keep)))) { - if (fc_conff_new) { - fprintf(stderr, _(" ==> Using new file as you requested.\n")); - cc = 'y'; - break; - } else if (fc_conff_old) { - fprintf(stderr, _(" ==> Using current old file as you requested.\n")); - cc = 'n'; - break; - } - } - - /* Force the default action (if there is one. */ - if (fc_conff_def) { - if (what & cfof_keep) { - fprintf(stderr, _(" ==> Keeping old config file as default.\n")); - cc = 'n'; - break; - } else if (what & cfof_install) { - fprintf(stderr, _(" ==> Using new config file as default.\n")); - cc = 'y'; - break; - } - } - - fprintf(stderr, - _(" What would you like to do about it ? Your options are:\n" - " Y or I : install the package maintainer's version\n" - " N or O : keep your currently-installed version\n" - " D : show the differences between the versions\n" - " Z : start a shell to examine the situation\n")); - - if (what & cfof_keep) - fprintf(stderr, _(" The default action is to keep your current version.\n")); - else if (what & cfof_install) - fprintf(stderr, _(" The default action is to install the new version.\n")); - - s = path_basename(cfgfile); - fprintf(stderr, "*** %s (Y/I/N/O/D/Z) %s ? ", - s, - (what & cfof_keep) ? _("[default=N]") : - (what & cfof_install) ? _("[default=Y]") : - _("[no default]")); - - if (ferror(stderr)) - ohshite(_("error writing to stderr, discovered before conffile prompt")); - - cc = 0; - while ((c = getchar()) != EOF && c != '\n') - if (!isspace(c) && !cc) - cc = tolower(c); - - if (c == EOF) { - if (ferror(stdin)) - ohshite(_("read error on stdin at conffile prompt")); - ohshit(_("EOF on stdin at conffile prompt")); - } - - if (!cc) { - if (what & cfof_keep) { - cc = 'n'; - break; - } else if (what & cfof_install) { - cc = 'y'; - break; - } - } + cc = show_prompt(cfgfile, realold, realnew, + useredited, distedited, what); /* FIXME: Say something if silently not install. */ if (cc == 'd') |