From owner-p4-projects@FreeBSD.ORG Fri May 28 09:14:54 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2A56B106567D; Fri, 28 May 2010 09:14:54 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD0B9106567B for ; Fri, 28 May 2010 09:14:53 +0000 (UTC) (envelope-from gcooper@FreeBSD.org) Received: from repoman.freebsd.org (unknown [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id C7CFA8FC21 for ; Fri, 28 May 2010 09:14:53 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o4S9ErOp016493 for ; Fri, 28 May 2010 09:14:53 GMT (envelope-from gcooper@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o4S9ErMq016491 for perforce@freebsd.org; Fri, 28 May 2010 09:14:53 GMT (envelope-from gcooper@FreeBSD.org) Date: Fri, 28 May 2010 09:14:53 GMT Message-Id: <201005280914.o4S9ErMq016491@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gcooper@FreeBSD.org using -f From: Garrett Cooper To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 178903 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 May 2010 09:14:54 -0000 http://p4web.freebsd.org/@@178903?ac=10 Change 178903 by gcooper@gcooper-bayonetta on 2010/05/28 09:13:57 1. Remove all of those whacky cleanup calls spread across the code like strawberry jam -- because we're using atexit(3) now (as suggested by kientzle)! 2. Reintroduce usr.sbin/pkg_install/lib with ONLY pkg_install infrastructure client bits. Ya heard?! Yes, the compile's broken, but will be fixed shortly. I just wanted to checkpoint this code. k, thx... Affected files ... .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/Makefile#3 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/Makefile.inc#4 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/Makefile#5 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/extract.c#5 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/perform.c#15 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/Makefile#6 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/perform.c#29 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/pl.c#4 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/delete/Makefile#5 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/delete/perform.c#8 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/Makefile#5 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/perform.c#8 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/show.c#4 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/updating/main.c#9 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/version/Makefile#5 edit .. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/version/perform.c#12 edit Differences ... ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/Makefile#3 (text+ko) ==== @@ -2,7 +2,7 @@ .include -SUBDIR= add create delete info updating version +SUBDIR= lib add create delete info updating version .include ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/Makefile.inc#4 (text+ko) ==== @@ -2,8 +2,12 @@ .include +LIBPKG_INSTALL= ${.OBJDIR}/../lib/libpkg_install.a + CFLAGS+= -DPKG_INSTALL_VERSION=20100423 CFLAGS+= -DYES_I_KNOW_THE_API_IS_RUBBISH_AND_IS_DOOMED_TO_CHANGE +CFLAGS+= -DI_READ_THE_LIBPKG_INSTALL_MAKEFILE_AND_I_UNDERSTAND_ITS_PURPOSE +CFLAGS+= -I${.CURDIR}/../lib DPADD+= ${LIBPKG} ${LIBARCHIVE} LDADD+= -lpkg -larchive ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/Makefile#5 (text+ko) ==== @@ -3,9 +3,16 @@ .include PROG= pkg_add -SRCS= main.c perform.c futil.c extract.c +SRCS= \ + main.c \ + perform.c \ + futil.c \ + extract.c \ + +WARNS?= 3 +WFORMAT?= 1 -WARNS?= 3 -WFORMAT?= 1 +DPADD+= ${LIBPKG_INSTALL} +LPADD+= ${LIBPKG_INSTALL} .include ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/extract.c#5 (text+ko) ==== @@ -26,8 +26,6 @@ #include #include "add.h" -extern void cleanup(int); - #define STARTSTRING "/usr/bin/tar cf -" #define TOOBIG(str) \ (((int)strlen(str) + FILENAME_MAX + where_count > maxargs) ||\ @@ -38,8 +36,7 @@ strcat(where_args, "|/usr/bin/tar --unlink -xpPf - -C "); \ strcat(where_args, todir); \ if (system(where_args)) { \ - cleanup(0); \ - errx(2, "%s: can not invoke %ld byte tar pipeline: %s", \ + errx(EXIT_FAILURE, "%s: can not invoke %ld byte tar pipeline: %s", \ __func__, (long)strlen(where_args), where_args); \ } \ strcpy(where_args, STARTSTRING); \ @@ -116,15 +113,11 @@ maxargs = sysconf(_SC_ARG_MAX) / 2; /* Just use half the argument space */ where_args = alloca(maxargs); - if (!where_args) { - cleanup(0); - errx(2, "%s: can't get argument list space", __func__); - } + if (where_args == NULL) + err(EXIT_FAILURE, "%s: can't get argument list space", __func__); perm_args = alloca(maxargs); - if (!perm_args) { - cleanup(0); - errx(2, "%s: can't get argument list space", __func__); - } + if (perm_args == NULL) + err(EXIT_FAILURE, "%s: can't get argument list space", __func__); strcpy(where_args, STARTSTRING); where_count = sizeof(STARTSTRING)-1; @@ -161,7 +154,8 @@ /* first try to rename it into place */ snprintf(try, FILENAME_MAX, "%s/%s", Directory, p->name); if (fexists(try)) { - (void)chflags(try, 0); /* XXX hack - if truly immutable, rename fails */ + /* XXX hack - if truly immutable, rename fails */ + (void)chflags(try, 0); if (preserve && PkgName) { char pf[FILENAME_MAX]; @@ -181,11 +175,11 @@ if (p->name[0] == '/' || TOOBIG(p->name)) { PUSHOUT(Directory); } - add_count = add_arg(&perm_args[perm_count], maxargs - perm_count, p->name); - if (add_count < 0 || add_count >= maxargs - perm_count) { - cleanup(0); - errx(2, "%s: oops, miscounted strings!", __func__); - } + add_count = add_arg(&perm_args[perm_count], + maxargs - perm_count, p->name); + if (add_count < 0 || add_count >= maxargs - perm_count) + errx(EXIT_FAILURE, "%s: oops, miscounted strings!", + __func__); perm_count += add_count; } else { @@ -202,16 +196,14 @@ PUSHOUT(Directory); } add_count = add_arg(&where_args[where_count], maxargs - where_count, p->name); - if (add_count < 0 || add_count >= maxargs - where_count) { - cleanup(0); - errx(2, "%s: oops, miscounted strings!", __func__); - } + if (add_count < 0 || add_count >= maxargs - where_count) + errx(EXIT_FAILURE, "%s: oops, miscounted strings!", + __func__); where_count += add_count; add_count = add_arg(&perm_args[perm_count], maxargs - perm_count, p->name); - if (add_count < 0 || add_count >= maxargs - perm_count) { - cleanup(0); - errx(2, "%s: oops, miscounted strings!", __func__); - } + if (add_count < 0 || add_count >= maxargs - perm_count) + errx(EXIT_FAILURE, "%s: oops, miscounted strings!", + __func__); perm_count += add_count; } } @@ -226,10 +218,9 @@ printf("extract: CWD to %s\n", p->name); PUSHOUT(Directory); if (strcmp(p->name, ".")) { - if (!Fake && make_hierarchy(p->name) == -1) { - cleanup(0); - errx(2, "%s: unable to cwd to '%s'", __func__, p->name); - } + if (!Fake && make_hierarchy(p->name) == -1) + errx(EXIT_FAILURE, "%s: unable to cwd to '%s'", __func__, + p->name); Directory = p->name; } else @@ -238,16 +229,12 @@ case PLIST_CMD: if ((strstr(p->name, "%B") || strstr(p->name, "%F") || - strstr(p->name, "%f")) && last_file == NULL) { - cleanup(0); - errx(2, "%s: no last file specified for '%s' command", - __func__, p->name); - } - if (strstr(p->name, "%D") && Directory == NULL) { - cleanup(0); + strstr(p->name, "%f")) && last_file == NULL) + errx(EXIT_FAILURE, "%s: no last file specified for '%s' " + "command", __func__, p->name); + if (strstr(p->name, "%D") && Directory == NULL) errx(2, "%s: no directory specified for '%s' command", __func__, p->name); - } format_cmd(cmd, FILENAME_MAX, p->name, Directory, last_file); PUSHOUT(Directory); if (Verbose) ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/add/perform.c#15 (text+ko) ==== @@ -21,16 +21,16 @@ #include __FBSDID("$FreeBSD: src/usr.sbin/pkg_install/add/perform.c,v 1.90 2010/04/23 11:07:43 flz Exp $"); +#include #include +#include #include + #include #include "add.h" +#include "cleanup.h" -#include -#include -#include - -void cleanup(int); +void cleanup(void); static int pkg_do(char *); static int sanity_check(char *); @@ -40,18 +40,18 @@ int pkg_perform(char **pkgs) { - int i, err_cnt = 0; + int i; + int err_cnt = 0; - signal(SIGINT, cleanup); - signal(SIGHUP, cleanup); + if (register_cleanup_handler(cleanup, NULL, NULL, 0) == -1) + err(EXIT_FAILURE, "failed to initialize exit handler"); - if (AddMode == SLAVE) - err_cnt = pkg_do(NULL); - else { - for (i = 0; pkgs[i]; i++) - err_cnt += pkg_do(pkgs[i]); - } - return err_cnt; + if (AddMode == SLAVE) + err_cnt = pkg_do(NULL); + else + for (i = 0; pkgs[i]; i++) + err_cnt += pkg_do(pkgs[i]); + return err_cnt; } /* @@ -107,7 +107,7 @@ if (isURL(pkg)) { if (!(where_to = fileGetURL(NULL, pkg, KeepPackage))) { warnx("unable to fetch '%s' by URL", pkg); - cleanup(0); + cleanup(); return 1; } cfile = open(CONTENTS_FNAME, O_RDONLY); @@ -380,7 +380,7 @@ else { if ((cp = fileGetURL(pkg, p->name, KeepPackage)) == NULL) { - cleanup(0); + cleanup(); warnx("Getting pkg '%s' by URL failed", pkg); goto bomb; } else { @@ -536,7 +536,6 @@ fchmod(fd, sb.st_mode | S_IRALL | S_IXALL); /* be sure, chmod a+rx */ close(fd); if (move_file(".", DESC_FNAME, LogDir) == -1) { - cleanup(0); errx(EXIT_FAILURE, "failed to move %s to %s", DESC_FNAME, LogDir); } move_file(".", COMMENT_FNAME, LogDir); @@ -545,7 +544,6 @@ do { \ if (fexists(file)) { \ if (move_file(".", file, LogDir) == -1) { \ - cleanup(0); \ errx(EXIT_FAILURE, \ "failed to move '%s' to '%s'", \ file, LogDir); \ @@ -715,19 +713,9 @@ } void -cleanup(int sig) +cleanup(void) { - static int in_cleanup = 0; - - if (!in_cleanup) { - in_cleanup = 1; - if (sig) - printf("Signal %d received, cleaning up..\n", sig); - if (!Fake && zapLogDir && LogDir[0]) - vsystem("%s -rf %s", REMOVE_CMD, LogDir); - while (leave_playpen()) - ; - } - if (sig) - exit(1); + if (!Fake && zapLogDir && LogDir[0]) + vsystem("%s -rf %s", REMOVE_CMD, LogDir); + while (leave_playpen()) ; } ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/Makefile#6 (text+ko) ==== @@ -1,11 +1,25 @@ # $FreeBSD: src/usr.sbin/pkg_install/create/Makefile,v 1.23 2010/04/23 11:07:43 flz Exp $ PROG= pkg_create -SRCS= main.c perform.c pl.c +SRCS= \ + main.c \ + perform.c \ + pl.c \ + +# +# Bits that belong in libarchive(5), or somewhere in that general area, that +# supply -X functionality. +# +# Shamelessly grabbed from tar(1). +# +SRCS+= tar_line_reader.c \ + tar_matching.c \ + tar_pathmatch.c \ -SRCS+= tar_line_reader.c tar_matching.c tar_pathmatch.c +WARNS?= 3 +WFORMAT?= 1 -WARNS?= 3 -WFORMAT?= 1 +DPADD+= ${LIBPKG_INSTALL} +LPADD+= ${LIBPKG_INSTALL} .include ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/perform.c#29 (text+ko) ==== @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -44,9 +43,10 @@ #include "tar_matching.h" #include +#include "cleanup.h" #include "create.h" -void cleanup(int); +void cleanup(void); static void sanity_check(void); static const char* add_file(struct archive *, const char *, const char *, @@ -68,6 +68,9 @@ int rc; const char *suf; + if (register_cleanup_handler(cleanup, NULL, NULL, 0) == -1) + err(EXIT_FAILURE, "failed to initialize exit handler"); + /* Preliminary setup */ if (InstalledPkg == NULL) sanity_check(); @@ -143,11 +146,9 @@ pkg_in = fileno(stdin); else { pkg_in = open(Contents, O_RDONLY); - if (pkg_in == -1) { - cleanup(0); + if (pkg_in == -1) errx(2, "%s: unable to open contents file '%s' for input", __func__, Contents); - } } plist.head = plist.tail = NULL; @@ -260,12 +261,8 @@ } /* Make a directory to stomp around in */ - if ((home = make_playpen(PlayPen, 0)) == NULL) { - cleanup(0); + if ((home = make_playpen(PlayPen, 0)) == NULL) errx(EXIT_FAILURE, "failed to create a playpen"); - } - signal(SIGINT, cleanup); - signal(SIGHUP, cleanup); /* Make first "real contents" pass over it */ check_list(home, &plist); @@ -284,20 +281,14 @@ add_plist(&plist, PLIST_IGNORE, NULL); add_plist(&plist, PLIST_FILE, COMMENT_FNAME); add_cksum(&plist, plist.tail, COMMENT_FNAME); - } - else { - cleanup(0); + } else err(EXIT_FAILURE, "failed to write comment file"); - } if (write_file(DESC_FNAME, Desc) == 0) { add_plist(&plist, PLIST_IGNORE, NULL); add_plist(&plist, PLIST_FILE, DESC_FNAME); add_cksum(&plist, plist.tail, DESC_FNAME); - } - else { - cleanup(0); + } else err(EXIT_FAILURE, "failed to write description file"); - } if (Install != NULL) { add_plist(&plist, PLIST_IGNORE, NULL); @@ -339,18 +330,13 @@ /* Finally, write out the packing list */ fp = fopen(CONTENTS_FNAME, "w"); - if (!fp) { - cleanup(0); + if (!fp) errx(2, "%s: can't open file %s for writing", __func__, CONTENTS_FNAME); - } rc = write_plist(&plist, fp); - if (fclose(fp)) { - cleanup(0); + if (fclose(fp)) errx(2, "%s: error occurred when closing %s", __func__, CONTENTS_FNAME); - } else if (rc != 0) { - cleanup(0); + else if (rc != 0) errx(2, "%s: couldn't write to %s", __func__, CONTENTS_FNAME); - } /* And stick it into a tarball */ make_dist(home, pkg, suf, &plist); @@ -758,36 +744,23 @@ static void sanity_check() { - if (!Comment) { - cleanup(0); + if (!Comment) errx(2, "%s: required package comment string is missing (-c comment)", __func__); - } - if (!Desc) { - cleanup(0); + if (!Desc) errx(2, "%s: required package description string is missing (-d desc)", __func__); - } - if (!Contents) { - cleanup(0); + if (!Contents) errx(2, "%s: required package contents list is missing (-f [-]file)", __func__); - } } /* Clean up those things that would otherwise hang around */ void -cleanup(int sig) +cleanup(void) { - int in_cleanup = 0; - - if (!in_cleanup) { - in_cleanup = 1; - leave_playpen(); - } - if (sig) - exit(1); + leave_playpen(); } static int ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/create/pl.c#4 (text+ko) ==== @@ -29,8 +29,6 @@ #include "create.h" -extern void cleanup(int); - /* Add an MD5 checksum entry for a file or link */ void add_cksum(Package *pkg, PackingList p, const char *fname) @@ -123,8 +121,8 @@ if (where_count > (int)sizeof(STARTSTRING)-1) { \ strcat(where_args, "|/usr/bin/tar xpf -"); \ if (system(where_args)) { \ - cleanup(0); \ - errx(2, "%s: can't invoke tar pipeline", __func__); \ + errx(EXIT_FAILURE, "%s: can't invoke tar pipeline", \ + __func__); \ } \ memset(where_args, 0, maxargs); \ last_chdir = NULL; \ @@ -154,10 +152,8 @@ * and sh -c */ where_args = malloc(maxargs); - if (!where_args) { - cleanup(0); - errx(2, "%s: can't get argument list space", __func__); - } + if (where_args == NULL) + err(EXIT_FAILURE, "%s: can't get argument list space", __func__); memset(where_args, 0, maxargs); strcpy(where_args, STARTSTRING); @@ -227,10 +223,8 @@ p->name); last_chdir = home; } - if (add_count < 0 || add_count >= maxargs - where_count) { - cleanup(0); + if (add_count < 0 || add_count >= maxargs - where_count) errx(2, "%s: oops, miscounted strings!", __func__); - } where_count += add_count; } /* @@ -269,10 +263,8 @@ " -C %s %s", mythere ? mythere : where, p->name); - if (add_count < 0 || add_count >= maxargs - where_count) { - cleanup(0); + if (add_count < 0 || add_count >= maxargs - where_count) errx(2, "%s: oops, miscounted strings!", __func__); - } where_count += add_count; last_chdir = (mythere ? mythere : where); } ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/delete/Makefile#5 (text+ko) ==== @@ -1,8 +1,13 @@ # $FreeBSD: src/usr.sbin/pkg_install/delete/Makefile,v 1.24 2010/04/23 11:07:43 flz Exp $ PROG= pkg_delete -SRCS= main.c perform.c +SRCS= \ + main.c \ + perform.c \ + +WFORMAT?= 1 -WFORMAT?= 1 +DPADD+= ${LIBPKG_INSTALL} +LPADD+= ${LIBPKG_INSTALL} .include ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/delete/perform.c#8 (text+ko) ==== @@ -25,9 +25,10 @@ #include #include +#include "cleanup.h" #include "delete.h" -void cleanup(int); +void cleanup(void); static int pkg_do(char *); static void sanity_check(char *); static void undepend(char *, char *); @@ -43,6 +44,9 @@ struct reqr_by_entry *rb_entry; struct reqr_by_head *rb_list; + if (register_cleanup_handler(cleanup, NULL, NULL, 0) == -1) + err(EXIT_FAILURE, "failed to initialize exit handler"); + if (MatchType != MATCH_EXACT) { matched = matchinstalled(MatchType, pkgs, &errcode); if (errcode != 0) @@ -172,10 +176,8 @@ return 0; } - if (!getcwd(home, FILENAME_MAX)) { - cleanup(0); - errx(2, "%s: unable to get current working directory!", __func__); - } + if (getcwd(home, FILENAME_MAX) == NULL) + errx(EXIT_FAILURE, "%s: unable to get current working directory!", __func__); if (chdir(LogDir) == -1) { warnx("unable to change directory to %s! deinstall failed", LogDir); @@ -323,11 +325,9 @@ } } - if (chdir(home) == -1) { - cleanup(0); - errx(2, "%s: unable to return to working directory %s!", __func__, - home); - } + if (chdir(home) == -1) + errx(EXIT_FAILURE, "%s: unable to return to working directory %s!", + __func__, home); /* * Some packages aren't packed right, so we need to just ignore @@ -358,11 +358,9 @@ } } - if (chdir(home) == -1) { - cleanup(0); - errx(2, "%s: unable to return to working directory %s!", __func__, - home); - } + if (chdir(home) == -1) + errx(EXIT_FAILURE, "%s: unable to return to working directory %s!", + __func__, home); if (!Fake) { if (vsystem("%s -r%c %s", REMOVE_CMD, Force ? 'f' : ' ', LogDir)) { @@ -377,18 +375,14 @@ static void sanity_check(char *pkg) { - if (!fexists(CONTENTS_FNAME)) { - cleanup(0); - errx(2, "%s: installed package %s has no %s file!", __func__, - pkg, CONTENTS_FNAME); - } + if (!fexists(CONTENTS_FNAME)) + errx(EXIT_FAILURE, "%s: installed package %s has no %s file!", + __func__, pkg, CONTENTS_FNAME); } void -cleanup(int sig) +cleanup(void) { - if (sig) - exit(1); } static void ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/Makefile#5 (text+ko) ==== @@ -1,8 +1,14 @@ # $FreeBSD: src/usr.sbin/pkg_install/info/Makefile,v 1.22 2010/04/23 11:07:43 flz Exp $ PROG= pkg_info -SRCS= main.c perform.c show.c +SRCS= \ + main.c \ + perform.c \ + show.c \ + +WFORMAT?= 1 -WFORMAT?= 1 +DPADD+= ${LIBPKG_INSTALL} +LPADD+= ${LIBPKG_INSTALL} .include ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/perform.c#8 (text+ko) ==== @@ -23,13 +23,12 @@ #include #include -#include #include - +#include "cleanup.h" #include "info.h" -void cleanup(int); +void cleanup(void); static int pkg_do(char *); static int find_pkg(struct which_head *); static int cmp_path(const char *, const char *, const char *); @@ -44,19 +43,19 @@ int err_cnt = 0; int i, errcode; - signal(SIGINT, cleanup); + if (register_cleanup_handler(cleanup, NULL, NULL, 0) == -1) + err(EXIT_FAILURE, "failed to initialize exit handler"); /* Overriding action? */ - if (Flags & SHOW_PKGNAME) { + if (Flags & SHOW_PKGNAME) return matched_packages(pkgs); - } else if (CheckPkg) { + else if (CheckPkg) { return isinstalledpkg(CheckPkg) > 0 ? 0 : 1; /* Not reached */ - } else if (!TAILQ_EMPTY(whead)) { + } else if (!TAILQ_EMPTY(whead)) return find_pkg(whead); - } else if (LookUpOrigin != NULL) { + else if (LookUpOrigin != NULL) return find_pkgs_by_origin(LookUpOrigin); - } if (MatchType != MATCH_EXACT) { matched = matchinstalled(MatchType, pkgs, &errcode); @@ -107,7 +106,7 @@ err(EXIT_FAILURE, "getcwd()"); isTMP = TRUE; } else { - cleanup(0); + cleanup(); goto bail; } } @@ -143,7 +142,7 @@ } else if (make_playpen(PlayPen, sb.st_size / 2) == NULL) { warn("failed to create a playpen"); - cleanup(0); + cleanup(); code = 1; goto bail; } @@ -249,16 +248,9 @@ } void -cleanup(int sig) +cleanup(void) { - static int in_cleanup = 0; - - if (!in_cleanup) { - in_cleanup = 1; leave_playpen(); - } - if (sig) - exit(1); } /* ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/info/show.c#4 (text+ko) ==== @@ -30,8 +30,6 @@ #include #include "info.h" -extern void cleanup(int); - void show_file(const char *title, const char *fname) { @@ -201,8 +199,7 @@ break; default: - cleanup(0); - errx(2, "%s: unknown command type %d (%s)", + errx(EXIT_FAILURE, "%s: unknown command type %d (%s)", __func__, p->type, p->name); break; } ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/updating/main.c#9 (text+ko) ==== @@ -27,7 +27,6 @@ char name[LINE_MAX]; /* Name of the installed port. */ } INSTALLEDPORT; -void cleanup(int); int usage(void); static char opts[] = "d:f:h"; @@ -289,10 +288,3 @@ "usage: pkg_updating [-h] [-d YYYYMMDD] [-f file] [portname ...]\n"); exit(1); } - -void -cleanup(int sig) -{ - if (sig) - exit(1); -} ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/version/Makefile#5 (text+ko) ==== @@ -1,10 +1,15 @@ # $FreeBSD: src/usr.sbin/pkg_install/version/Makefile,v 1.18 2010/04/23 11:07:43 flz Exp $ PROG= pkg_version -SRCS= main.c perform.c +SRCS= \ + main.c \ + perform.c \ WFORMAT?= 1 +DPADD+= ${LIBPKG_INSTALL} +LPADD+= ${LIBPKG_INSTALL} + test: sh ${.CURDIR}/test-pkg_version.sh ==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/version/perform.c#12 (text+ko) ==== @@ -25,16 +25,15 @@ #include #include #include -#include #include +#include "cleanup.h" #include "version.h" FILE *IndexFile; char IndexPath[PATH_MAX] = ""; struct index_head Index = SLIST_HEAD_INITIALIZER(Index); -void cleanup(int); static int pkg_do(char *); static void show_version(Package, const char *, const char *); @@ -161,8 +160,11 @@ warnx("the package info for package '%s' is corrupt", pkg); return 1; } - read_plist(&plist, fd); - close(fd); + if (read_plist(&plist, fd) == -1) { + warn("plist read failed"); + return 1; + } + (void) close(fd); if (plist.name == NULL) { warnx("%s does not appear to be a valid package!", pkg); return 1; @@ -417,10 +419,3 @@ return ret; } - -void -cleanup(int sig) -{ - if (sig) - exit(1); -}