summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2011-03-16 14:22:34 +0100
committerGuillem Jover <guillem@debian.org>2011-04-02 02:38:09 +0200
commitba372a8c554dfe6fa4f0e12961efab6b10aaf6bd (patch)
tree7b39cd5b13cb0139bbe2a3e2f4ea4fa66545cc42
parentf6600ffa162e6f2f04f6a10d9622bee3bc8781a1 (diff)
downloaddpkg-ba372a8c554dfe6fa4f0e12961efab6b10aaf6bd.tar.gz
Make all command line action functions return int
This will allow using type-safe function pointers instead of casting them around. Replace all exit(3) calls with return statements. Remove DPKG_ATTR_NORET from function declarations, all functions are expected to return now.
-rw-r--r--dpkg-deb/build.c6
-rw-r--r--dpkg-deb/dpkg-deb.h4
-rw-r--r--dpkg-deb/extract.c35
-rw-r--r--dpkg-deb/info.c25
-rw-r--r--dpkg-deb/main.c7
-rw-r--r--dpkg-split/dpkg-split.h4
-rw-r--r--dpkg-split/info.c6
-rw-r--r--dpkg-split/join.c6
-rw-r--r--dpkg-split/main.c6
-rw-r--r--dpkg-split/queue.c20
-rw-r--r--dpkg-split/split.c4
-rw-r--r--src/archives.c6
-rw-r--r--src/enquiry.c89
-rw-r--r--src/main.c30
-rw-r--r--src/main.h34
-rw-r--r--src/packages.c4
-rw-r--r--src/select.c17
-rw-r--r--src/statcmd.c4
-rw-r--r--src/update.c12
19 files changed, 225 insertions, 94 deletions
diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
index 8fe89aa69..0e4022264 100644
--- a/dpkg-deb/build.c
+++ b/dpkg-deb/build.c
@@ -384,7 +384,9 @@ pkg_get_pathname(const char *dir, struct pkginfo *pkg)
/**
* Overly complex function that builds a .deb file.
*/
-void do_build(const char *const *argv) {
+int
+do_build(const char *const *argv)
+{
const char *debar, *dir;
bool subdir;
char *tfbuf;
@@ -593,5 +595,5 @@ void do_build(const char *const *argv) {
if (close(arfd))
ohshite(_("unable to close file '%s'"), debar);
- exit(0);
+ return 0;
}
diff --git a/dpkg-deb/dpkg-deb.h b/dpkg-deb/dpkg-deb.h
index fbbb876fe..0a6908ced 100644
--- a/dpkg-deb/dpkg-deb.h
+++ b/dpkg-deb/dpkg-deb.h
@@ -21,8 +21,8 @@
#ifndef DPKG_DEB_H
#define DPKG_DEB_H
-typedef void dofunction(const char *const *argv);
-dofunction do_build DPKG_ATTR_NORET;
+typedef int dofunction(const char *const *argv);
+dofunction do_build;
dofunction do_contents, do_control, do_showinfo;
dofunction do_info, do_field, do_extract, do_vextract, do_fsystarfile;
diff --git a/dpkg-deb/extract.c b/dpkg-deb/extract.c
index 24110e57a..970c62329 100644
--- a/dpkg-deb/extract.c
+++ b/dpkg-deb/extract.c
@@ -327,9 +327,10 @@ extracthalf(const char *debar, const char *dir, const char *taroption,
}
}
-static void controlextractvextract(int admin,
- const char *taroptions,
- const char *const *argv) {
+static int
+controlextractvextract(int admin, const char *taroptions,
+ const char *const *argv)
+{
const char *debar, *dir;
if (!(debar= *argv++))
@@ -344,9 +345,13 @@ static void controlextractvextract(int admin,
badusage(_("--%s takes at most two arguments (.deb and directory)"),cipaction->olong);
}
extracthalf(debar, dir, taroptions, admin);
+
+ return 0;
}
-void do_fsystarfile(const char *const *argv) {
+int
+do_fsystarfile(const char *const *argv)
+{
const char *debar;
if (!(debar= *argv++))
@@ -354,8 +359,24 @@ void do_fsystarfile(const char *const *argv) {
if (*argv)
badusage(_("--%s takes only one argument (.deb filename)"),cipaction->olong);
extracthalf(debar, NULL, NULL, 0);
+
+ return 0;
+}
+
+int
+do_control(const char *const *argv)
+{
+ return controlextractvextract(1, "x", argv);
+}
+
+int
+do_extract(const char *const *argv)
+{
+ return controlextractvextract(0, "xp", argv);
}
-void do_control(const char *const *argv) { controlextractvextract(1, "x", argv); }
-void do_extract(const char *const *argv) { controlextractvextract(0, "xp", argv); }
-void do_vextract(const char *const *argv) { controlextractvextract(0, "xpv", argv); }
+int
+do_vextract(const char *const *argv)
+{
+ return controlextractvextract(0, "xpv", argv);
+}
diff --git a/dpkg-deb/info.c b/dpkg-deb/info.c
index 87b4eed8f..c20466d6f 100644
--- a/dpkg-deb/info.c
+++ b/dpkg-deb/info.c
@@ -254,7 +254,9 @@ info_field(const char *debar, const char *dir, const char *const *fields,
m_output(stdout, _("<standard output>"));
}
-void do_showinfo(const char* const* argv) {
+int
+do_showinfo(const char *const *argv)
+{
const char *debar, *dir;
struct pkginfo *pkg;
struct pkg_format_node *fmt = pkg_format_parse(showformat);
@@ -267,10 +269,13 @@ void do_showinfo(const char* const* argv) {
parsedb(CONTROLFILE, pdb_recordavailable | pdb_rejectstatus | pdb_ignorefiles,
&pkg);
pkg_format_show(fmt, pkg, &pkg->available);
-}
+ return 0;
+}
-void do_info(const char *const *argv) {
+int
+do_info(const char *const *argv)
+{
const char *debar, *dir;
if (*argv && argv[1]) {
@@ -280,9 +285,13 @@ void do_info(const char *const *argv) {
info_prepare(&argv, &debar, &dir, 2);
info_list(debar, dir);
}
+
+ return 0;
}
-void do_field(const char *const *argv) {
+int
+do_field(const char *const *argv)
+{
const char *debar, *dir;
info_prepare(&argv, &debar, &dir, 1);
@@ -292,13 +301,19 @@ void do_field(const char *const *argv) {
static const char *const controlonly[] = { "control", NULL };
info_spew(debar, dir, controlonly);
}
+
+ return 0;
}
-void do_contents(const char *const *argv) {
+int
+do_contents(const char *const *argv)
+{
const char *debar;
if (!(debar= *argv++) || *argv) badusage(_("--contents takes exactly one argument"));
extracthalf(debar, NULL, "tv", 0);
+
+ return 0;
}
/* vi: sw=2
*/
diff --git a/dpkg-deb/main.c b/dpkg-deb/main.c
index a18e79d68..bdfd60311 100644
--- a/dpkg-deb/main.c
+++ b/dpkg-deb/main.c
@@ -183,6 +183,7 @@ static const struct cmdinfo cmdinfos[]= {
int main(int argc, const char *const *argv) {
dofunction *action;
+ int ret;
setlocale(LC_NUMERIC, "POSIX");
setlocale(LC_ALL, "");
@@ -196,9 +197,11 @@ int main(int argc, const char *const *argv) {
unsetenv("GZIP");
action = (dofunction *)cipaction->arg_func;
- action(argv);
+ ret = action(argv);
+
standard_shutdown();
- exit(0);
+
+ return ret;
}
/* vi: sw=2
diff --git a/dpkg-split/dpkg-split.h b/dpkg-split/dpkg-split.h
index f8903a4aa..dd9a03b10 100644
--- a/dpkg-split/dpkg-split.h
+++ b/dpkg-split/dpkg-split.h
@@ -21,8 +21,8 @@
#ifndef DPKG_SPLIT_H
#define DPKG_SPLIT_H
-typedef void dofunction(const char *const *argv);
-dofunction do_split DPKG_ATTR_NORET;
+typedef int dofunction(const char *const *argv);
+dofunction do_split;
dofunction do_join, do_info, do_auto, do_queue, do_discard;
struct partinfo {
diff --git a/dpkg-split/info.c b/dpkg-split/info.c
index 3f09dceab..a6973d5f8 100644
--- a/dpkg-split/info.c
+++ b/dpkg-split/info.c
@@ -224,7 +224,9 @@ void print_info(const struct partinfo *pi) {
(intmax_t)pi->filesize);
}
-void do_info(const char *const *argv) {
+int
+do_info(const char *const *argv)
+{
const char *thisarg;
struct partinfo *pi, ps;
FILE *part;
@@ -245,4 +247,6 @@ void do_info(const char *const *argv) {
}
m_output(stdout, _("<standard output>"));
}
+
+ return 0;
}
diff --git a/dpkg-split/join.c b/dpkg-split/join.c
index 9546f4687..fc23caf56 100644
--- a/dpkg-split/join.c
+++ b/dpkg-split/join.c
@@ -92,7 +92,9 @@ void addtopartlist(struct partinfo **partlist,
partlist[i]= pi;
}
-void do_join(const char *const *argv) {
+int
+do_join(const char *const *argv)
+{
const char *thisarg;
struct partqueue *pq;
struct partinfo *refi, **partlist;
@@ -136,4 +138,6 @@ void do_join(const char *const *argv) {
opt_outputfile = p;
}
reassemble(partlist, opt_outputfile);
+
+ return 0;
}
diff --git a/dpkg-split/main.c b/dpkg-split/main.c
index 8b8672ac8..b5316f5b6 100644
--- a/dpkg-split/main.c
+++ b/dpkg-split/main.c
@@ -145,6 +145,7 @@ static const struct cmdinfo cmdinfos[]= {
};
int main(int argc, const char *const *argv) {
+ int ret;
int l;
char *p;
dofunction *action;
@@ -168,10 +169,11 @@ int main(int argc, const char *const *argv) {
setvbuf(stdout,NULL,_IONBF,0);
action = (dofunction *)cipaction->arg_func;
- action(argv);
+ ret = action(argv);
m_output(stderr, _("<standard error>"));
standard_shutdown();
- exit(0);
+
+ return ret;
}
diff --git a/dpkg-split/queue.c b/dpkg-split/queue.c
index 0f6488c2b..8f221c7c3 100644
--- a/dpkg-split/queue.c
+++ b/dpkg-split/queue.c
@@ -120,7 +120,9 @@ partmatches(struct partinfo *pi, struct partinfo *refi)
pi->maxpartlen == refi->maxpartlen);
}
-void do_auto(const char *const *argv) {
+int
+do_auto(const char *const *argv)
+{
const char *partfile;
struct partinfo *refi, **partlist, *otherthispart;
struct partqueue *pq;
@@ -140,7 +142,7 @@ void do_auto(const char *const *argv) {
if (!opt_npquiet)
printf(_("File `%.250s' is not part of a multipart archive.\n"),partfile);
m_output(stdout, _("<standard output>"));
- exit(1);
+ return 1;
}
fclose(part);
scandepot();
@@ -214,9 +216,13 @@ void do_auto(const char *const *argv) {
}
m_output(stderr, _("<standard error>"));
+
+ return 0;
}
-void do_queue(const char *const *argv) {
+int
+do_queue(const char *const *argv)
+{
struct partqueue *pq;
const char *head;
struct stat stab;
@@ -272,6 +278,8 @@ void do_queue(const char *const *argv) {
printf(_("(total %jd bytes)\n"), (intmax_t)bytes);
}
m_output(stdout, _("<standard output>"));
+
+ return 0;
}
enum discardwhich { ds_junk, ds_package, ds_all };
@@ -298,7 +306,9 @@ static void discardsome(enum discardwhich which, const char *package) {
}
}
-void do_discard(const char *const *argv) {
+int
+do_discard(const char *const *argv)
+{
const char *thisarg;
struct partqueue *pq;
@@ -312,4 +322,6 @@ void do_discard(const char *const *argv) {
} else {
discardsome(ds_all,NULL);
}
+
+ return 0;
}
diff --git a/dpkg-split/split.c b/dpkg-split/split.c
index 6727ed56f..296d1ebf2 100644
--- a/dpkg-split/split.c
+++ b/dpkg-split/split.c
@@ -237,7 +237,7 @@ mksplit(const char *file_src, const char *prefix, off_t maxpartsize,
return 0;
}
-void
+int
do_split(const char *const *argv)
{
const char *sourcefile, *prefix;
@@ -264,5 +264,5 @@ do_split(const char *const *argv)
mksplit(sourcefile, prefix, opt_maxpartsize, opt_msdos);
- exit(0);
+ return 0;
}
diff --git a/src/archives.c b/src/archives.c
index 698b69a09..8554ff00b 100644
--- a/src/archives.c
+++ b/src/archives.c
@@ -1183,7 +1183,9 @@ void cu_fileslist(int argc, void **argv) {
destroyobstack();
}
-void archivefiles(const char *const *argv) {
+int
+archivefiles(const char *const *argv)
+{
const char *volatile thisarg;
const char *const *volatile argp;
jmp_buf ejbuf;
@@ -1321,6 +1323,8 @@ void archivefiles(const char *const *argv) {
trigproc_run_deferred();
modstatdb_shutdown();
+
+ return 0;
}
/**
diff --git a/src/enquiry.c b/src/enquiry.c
index 079da59ee..26d1d2830 100644
--- a/src/enquiry.c
+++ b/src/enquiry.c
@@ -127,7 +127,9 @@ static void describebriefly(struct pkginfo *pkg) {
printf(" %-20s %.*s\n",pkg->name,l,pdesc);
}
-void audit(const char *const *argv) {
+int
+audit(const char *const *argv)
+{
const struct badstatinfo *bsi;
bool head_running = false;
@@ -162,6 +164,8 @@ void audit(const char *const *argv) {
}
m_output(stdout, _("<standard output>"));
+
+ return 0;
}
struct sectionentry {
@@ -192,7 +196,9 @@ yettobeunpacked(struct pkginfo *pkg, const char **thissect)
return false;
}
-void unpackchk(const char *const *argv) {
+int
+unpackchk(const char *const *argv)
+{
int totalcount, sects;
struct sectionentry *sectionentries, *se, **sep;
struct pkgiterator *it;
@@ -228,7 +234,8 @@ void unpackchk(const char *const *argv) {
}
pkg_db_iter_free(it);
- if (totalcount == 0) exit(0);
+ if (totalcount == 0)
+ return 0;
if (totalcount <= 12) {
it = pkg_db_iter_new();
@@ -270,9 +277,11 @@ void unpackchk(const char *const *argv) {
}
m_output(stdout, _("<standard output>"));
+
+ return 0;
}
-static void
+static int
assert_version_support(const char *const *argv,
struct versionrevision *version,
const char *feature_name)
@@ -288,40 +297,53 @@ assert_version_support(const char *const *argv,
switch (pkg->status) {
case stat_installed:
case stat_triggerspending:
- break;
+ return 0;
case stat_unpacked: case stat_halfconfigured: case stat_halfinstalled:
case stat_triggersawaited:
if (versionsatisfied3(&pkg->configversion, version, dvr_laterequal))
- break;
+ return 0;
printf(_("Version of dpkg with working %s support not yet configured.\n"
" Please use 'dpkg --configure dpkg', and then try again.\n"),
feature_name);
- exit(1);
+ return 1;
default:
printf(_("dpkg not recorded as installed, cannot check for %s support!\n"),
feature_name);
- exit(1);
+ return 1;
}
}
-void assertpredep(const char *const *argv) {
+int
+assertpredep(const char *const *argv)
+{
struct versionrevision version = { 0, "1.1.0", NULL };
- assert_version_support(argv, &version, _("Pre-Depends field"));
+
+ return assert_version_support(argv, &version, _("Pre-Depends field"));
}
-void assertepoch(const char *const *argv) {
+int
+assertepoch(const char *const *argv)
+{
struct versionrevision version = { 0, "1.4.0.7", NULL };
- assert_version_support(argv, &version, _("epoch"));
+
+ return assert_version_support(argv, &version, _("epoch"));
}
-void assertlongfilenames(const char *const *argv) {
+int
+assertlongfilenames(const char *const *argv)
+{
struct versionrevision version = { 0, "1.4.1.17", NULL };
- assert_version_support(argv, &version, _("long filenames"));
+
+ return assert_version_support(argv, &version, _("long filenames"));
}
-void assertmulticonrep(const char *const *argv) {
+int
+assertmulticonrep(const char *const *argv)
+{
struct versionrevision version = { 0, "1.4.1.19", NULL };
- assert_version_support(argv, &version, _("multiple Conflicts and Replaces"));
+
+ return assert_version_support(argv, &version,
+ _("multiple Conflicts and Replaces"));
}
/**
@@ -337,7 +359,9 @@ void assertmulticonrep(const char *const *argv) {
* 1 = no suitable package available
* 2 = error
*/
-void predeppackage(const char *const *argv) {
+int
+predeppackage(const char *const *argv)
+{
static struct varbuf vb;
struct pkgiterator *it;
@@ -375,7 +399,7 @@ void predeppackage(const char *const *argv) {
pkg_db_iter_free(it);
if (!dep)
- exit(1); /* Not found. */
+ return 1; /* Not found. */
assert(pkg);
startpkg= pkg;
pkg->clientdata->istobe= itb_preinstall;
@@ -425,26 +449,34 @@ void predeppackage(const char *const *argv) {
writerecord(stdout, _("<standard output>"), pkg, &pkg->available);
m_output(stdout, _("<standard output>"));
+
+ return 0;
}
-void printarch(const char *const *argv) {
+int
+printarch(const char *const *argv)
+{
if (*argv)
badusage(_("--%s takes no arguments"), cipaction->olong);
printf("%s\n", native_arch);
m_output(stdout, _("<standard output>"));
+
+ return 0;
}
-void
+int
printinstarch(const char *const *argv)
{
warning(_("obsolete option '--%s', please use '--%s' instead."),
"print-installation-architecture", "print-architecture");
- printarch(argv);
+ return printarch(argv);
}
-void cmpversions(const char *const *argv) {
+int
+cmpversions(const char *const *argv)
+{
struct relationinfo {
const char *string;
/* These values are exit status codes, so 0 = true, 1 = false. */
@@ -506,16 +538,19 @@ void cmpversions(const char *const *argv) {
blankversion(&b);
}
if (!informativeversion(&a)) {
- exit(informativeversion(&b) ? rip->if_none_a : rip->if_none_both);
+ return informativeversion(&b) ? rip->if_none_a : rip->if_none_both;
} else if (!informativeversion(&b)) {
- exit(rip->if_none_b);
+ return rip->if_none_b;
}
r= versioncompare(&a,&b);
debug(dbg_general,"cmpversions a=`%s' b=`%s' r=%d",
versiondescribe(&a,vdew_always),
versiondescribe(&b,vdew_always),
r);
- if (r>0) exit(rip->if_greater);
- else if (r<0) exit(rip->if_lesser);
- else exit(rip->if_equal);
+ if (r > 0)
+ return rip->if_greater;
+ else if (r < 0)
+ return rip->if_lesser;
+ else
+ return rip->if_equal;
}
diff --git a/src/main.c b/src/main.c
index 2bc1d887c..7970b8e75 100644
--- a/src/main.c
+++ b/src/main.c
@@ -516,8 +516,8 @@ static void setforce(const struct cmdinfo *cip, const char *value) {
}
}
-void execbackend(const char *const *argv) DPKG_ATTR_NORET;
-void commandfd(const char *const *argv);
+int execbackend(const char *const *argv) DPKG_ATTR_NORET;
+int commandfd(const char *const *argv);
/* This table has both the action entries in it and the normal options.
* The action entries are made with the ACTION macro, as they all
@@ -605,7 +605,9 @@ static const struct cmdinfo cmdinfos[]= {
{ NULL, 0, 0, NULL, NULL, NULL, 0 }
};
-void execbackend(const char *const *argv) {
+int
+execbackend(const char *const *argv)
+{
struct command cmd;
char *arg;
@@ -623,16 +625,19 @@ void execbackend(const char *const *argv) {
command_exec(&cmd);
}
-void commandfd(const char *const *argv) {
+int
+commandfd(const char *const *argv)
+{
struct varbuf linevb = VARBUF_INIT;
const char * pipein;
const char **newargs = NULL;
char *ptr, *endptr;
FILE *in;
unsigned long infd;
+ int ret = 0;
int c, lno, i;
bool skipchar;
- void (*actionfunction)(const char *const *argv);
+ int (*actionfunction)(const char *const *argv);
pipein = *argv++;
if (pipein == NULL)
@@ -714,15 +719,18 @@ void commandfd(const char *const *argv) {
myopt((const char *const**)&newargs,cmdinfos);
if (!cipaction) badusage(_("need an action option"));
- actionfunction = (void (*)(const char *const *))cipaction->arg_func;
- actionfunction(newargs);
+ actionfunction = (int (*)(const char *const *))cipaction->arg_func;
+ ret |= actionfunction(newargs);
pop_error_context(ehflag_normaltidy);
}
+
+ return ret;
}
int main(int argc, const char *const *argv) {
- void (*actionfunction)(const char *const *argv);
+ int (*actionfunction)(const char *const *argv);
+ int ret;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -752,14 +760,14 @@ int main(int argc, const char *const *argv) {
filesdbinit();
- actionfunction = (void (*)(const char *const *))cipaction->arg_func;
+ actionfunction = (int (*)(const char *const *))cipaction->arg_func;
- actionfunction(argv);
+ ret = actionfunction(argv);
if (is_invoke_action(cipaction->arg_int))
run_invoke_hooks(cipaction->olong, post_invoke_hooks);
standard_shutdown();
- return reportbroken_retexitstatus(0);
+ return reportbroken_retexitstatus(ret);
}
diff --git a/src/main.h b/src/main.h
index 6f8b2f7dc..272110b85 100644
--- a/src/main.h
+++ b/src/main.h
@@ -147,7 +147,7 @@ struct invoke_hook {
/* from archives.c */
-void archivefiles(const char *const *argv);
+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,
@@ -155,33 +155,33 @@ struct fileinlist *newconff_append(struct fileinlist ***newconffileslastp_io,
/* from update.c */
-void forgetold(const char *const *argv);
-void updateavailable(const char *const *argv);
+int forgetold(const char *const *argv);
+int updateavailable(const char *const *argv);
/* from enquiry.c */
-void audit(const char *const *argv);
-void unpackchk(const char *const *argv);
-void assertepoch(const char *const *argv);
-void assertpredep(const char *const *argv);
-void assertlongfilenames(const char *const *argv);
-void assertmulticonrep(const char *const *argv);
-void predeppackage(const char *const *argv);
-void printarch(const char *const *argv);
-void printinstarch(const char *const *argv);
-void cmpversions(const char *const *argv) DPKG_ATTR_NORET;
+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 */
-void getselections(const char *const *argv);
-void setselections(const char *const *argv);
-void clearselections(const char *const *argv);
+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);
-void packages(const char *const *argv);
+int packages(const char *const *argv);
void removal_bulk(struct pkginfo *pkg);
int conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in);
diff --git a/src/packages.c b/src/packages.c
index 82f05ce31..c67a60032 100644
--- a/src/packages.c
+++ b/src/packages.c
@@ -117,7 +117,7 @@ enqueue_specified(const char *const *argv)
}
}
-void
+int
packages(const char *const *argv)
{
trigproc_install_hooks();
@@ -146,6 +146,8 @@ packages(const char *const *argv)
trigproc_run_deferred();
modstatdb_shutdown();
+
+ return 0;
}
void process_queue(void) {
diff --git a/src/select.c b/src/select.c
index 95349f023..712db97a8 100644
--- a/src/select.c
+++ b/src/select.c
@@ -44,7 +44,9 @@ static void getsel1package(struct pkginfo *pkg) {
printf("%s%.*s%s\n",pkg->name,l,"\t\t\t\t\t\t",wantinfos[pkg->want].name);
}
-void getselections(const char *const *argv) {
+int
+getselections(const char *const *argv)
+{
struct pkg_array array;
struct pkginfo *pkg;
const char *thisarg;
@@ -78,9 +80,13 @@ void getselections(const char *const *argv) {
m_output(stderr, _("<standard error>"));
pkg_array_destroy(&array);
+
+ return 0;
}
-void setselections(const char *const *argv) {
+int
+setselections(const char *const *argv)
+{
const struct namevalue *nv;
struct pkginfo *pkg;
const char *e;
@@ -144,9 +150,12 @@ void setselections(const char *const *argv) {
modstatdb_shutdown();
varbuf_destroy(&namevb);
varbuf_destroy(&selvb);
+
+ return 0;
}
-void clearselections(const char *const *argv)
+int
+clearselections(const char *const *argv)
{
struct pkgiterator *it;
struct pkginfo *pkg;
@@ -164,5 +173,7 @@ void clearselections(const char *const *argv)
pkg_db_iter_free(it);
modstatdb_shutdown();
+
+ return 0;
}
diff --git a/src/statcmd.c b/src/statcmd.c
index d33e100c6..889d633d2 100644
--- a/src/statcmd.c
+++ b/src/statcmd.c
@@ -294,9 +294,9 @@ statoverride_remove(const char *const *argv)
if (opt_verbose)
warning(_("No override present."));
if (opt_force)
- exit(0);
+ return 0;
else
- exit(2);
+ return 2;
}
if (opt_update && opt_verbose)
diff --git a/src/update.c b/src/update.c
index 668906443..76b2372be 100644
--- a/src/update.c
+++ b/src/update.c
@@ -34,7 +34,9 @@
#include "main.h"
-void updateavailable(const char *const *argv) {
+int
+updateavailable(const char *const *argv)
+{
const char *sourcefile= argv[0];
char *availfile;
int count= 0;
@@ -99,12 +101,18 @@ void updateavailable(const char *const *argv) {
"Information about %d packages was updated.\n", count), count);
modstatdb_done();
+
+ return 0;
}
-void forgetold(const char *const *argv) {
+int
+forgetold(const char *const *argv)
+{
if (*argv)
badusage(_("--%s takes no arguments"), cipaction->olong);
warning(_("obsolete '--%s' option, unavailable packages are automatically cleaned up."),
cipaction->olong);
+
+ return 0;
}