diff options
author | Guillem Jover <guillem@debian.org> | 2011-03-16 14:22:34 +0100 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2011-04-02 02:38:09 +0200 |
commit | ba372a8c554dfe6fa4f0e12961efab6b10aaf6bd (patch) | |
tree | 7b39cd5b13cb0139bbe2a3e2f4ea4fa66545cc42 /dpkg-deb | |
parent | f6600ffa162e6f2f04f6a10d9622bee3bc8781a1 (diff) | |
download | dpkg-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.
Diffstat (limited to 'dpkg-deb')
-rw-r--r-- | dpkg-deb/build.c | 6 | ||||
-rw-r--r-- | dpkg-deb/dpkg-deb.h | 4 | ||||
-rw-r--r-- | dpkg-deb/extract.c | 35 | ||||
-rw-r--r-- | dpkg-deb/info.c | 25 | ||||
-rw-r--r-- | dpkg-deb/main.c | 7 |
5 files changed, 59 insertions, 18 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 |