summaryrefslogtreecommitdiff
path: root/dpkg-deb
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 /dpkg-deb
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.
Diffstat (limited to 'dpkg-deb')
-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
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