PERFORCE change 178380 for review
Garrett Cooper
gcooper at FreeBSD.org
Mon May 17 10:34:14 UTC 2010
http://p4web.freebsd.org/@@178380?ac=10
Change 178380 by gcooper at gcooper-bayonetta on 2010/05/17 10:33:23
Remove all references of cleanup in plist.c . style(9)-ize things appropriately.
Affected files ...
.. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/lib/libpkg/plist.c#3 edit
Differences ...
==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/lib/libpkg/plist.c#3 (text+ko) ====
@@ -23,9 +23,10 @@
#include <sys/types.h>
#include <sys/uio.h>
-#include <unistd.h>
#include <err.h>
+#include <errno.h>
#include <md5.h>
+#include <unistd.h>
#include "pkg.h"
@@ -260,160 +261,191 @@
}
/* Read a packing list from a file */
-void
+int
read_plist(Package *pkg, int fd)
{
- char *cp, pline[FILENAME_MAX];
- int cmd, major, minor;
+ char *cp, pline[FILENAME_MAX];
+ int cmd, major, minor, rc = 0;
+ size_t len;
+
+ pkg->fmtver_maj = 1;
+ pkg->fmtver_mnr = 0;
+ pkg->origin = NULL;
+
+ /*
+ * XXX (gcooper): BAD BAD BAD -- this can be longer than
+ * FILENAME_MAX
+ */
+ while (rc == 0 && 0 < read(fd, pline, FILENAME_MAX)) {
+ len = strlen(pline);
+
+ while (len && isspace(pline[len - 1]))
+ pline[--len] = '\0';
+ if (!len)
+ continue;
+ cp = pline;
+ if (pline[0] != CMD_CHAR) {
+ cmd = PLIST_FILE;
+ goto bottom;
+ }
+ cmd = plist_cmd(pline + 1, &cp);
+ if (cmd == FAIL) {
+ warnx("%s: unknown command '%s' (package tools out of "
+ "date?)", __func__, pline);
+ goto bottom;
+ }
+ if (*cp == '\0') {
+ cp = NULL;
+ if (cmd == PLIST_PKGDEP) {
+ warnx("corrupted record (pkgdep line without "
+ "argument), ignoring");
+ cmd = FAIL;
+ }
+ goto bottom;
+ }
+ if (cmd == PLIST_COMMENT &&
+ sscanf(cp, "PKG_FORMAT_REVISION:%d.%d\n", &major, &minor) ==
+ 2) {
+
+ pkg->fmtver_maj = major;
+ pkg->fmtver_mnr = minor;
+
+ if (verscmp(pkg, PLIST_FMT_VER_MAJOR,
+ PLIST_FMT_VER_MINOR) <= 0)
+ goto bottom;
+
+ warnx("plist format revision (%d.%d) is higher than "
+ "supported (%d.%d)",
+ pkg->fmtver_maj, pkg->fmtver_mnr,
+ PLIST_FMT_VER_MAJOR, PLIST_FMT_VER_MINOR);
+
+ if (pkg->fmtver_maj > PLIST_FMT_VER_MAJOR) {
+ errno = EINVAL;
+ rc = -1;
+ }
- pkg->fmtver_maj = 1;
- pkg->fmtver_mnr = 0;
- pkg->origin = NULL;
+ }
- /* XXX (gcooper): BAD BAD BAD -- this can be longer than FILENAME_MAX */
- while (0 < read(fd, pline, FILENAME_MAX)) {
- int len = strlen(pline);
+bottom:
+ if (rc == 0)
+ add_plist(pkg, cmd, cp);
- while (len && isspace(pline[len - 1]))
- pline[--len] = '\0';
- if (!len)
- continue;
- cp = pline;
- if (pline[0] != CMD_CHAR) {
- cmd = PLIST_FILE;
- goto bottom;
}
- cmd = plist_cmd(pline + 1, &cp);
- if (cmd == FAIL) {
- warnx("%s: unknown command '%s' (package tools out of date?)",
- __func__, pline);
- goto bottom;
- }
- if (*cp == '\0') {
- cp = NULL;
- if (cmd == PLIST_PKGDEP) {
- warnx("corrupted record (pkgdep line without argument), ignoring");
- cmd = FAIL;
- }
- goto bottom;
- }
- if (cmd == PLIST_COMMENT && sscanf(cp, "PKG_FORMAT_REVISION:%d.%d\n",
- &major, &minor) == 2) {
- pkg->fmtver_maj = major;
- pkg->fmtver_mnr = minor;
- if (verscmp(pkg, PLIST_FMT_VER_MAJOR, PLIST_FMT_VER_MINOR) <= 0)
- goto bottom;
+
+ return rc;
- warnx("plist format revision (%d.%d) is higher than supported"
- "(%d.%d)", pkg->fmtver_maj, pkg->fmtver_mnr,
- PLIST_FMT_VER_MAJOR, PLIST_FMT_VER_MINOR);
- if (pkg->fmtver_maj > PLIST_FMT_VER_MAJOR) {
- cleanup(0);
- exit(2);
- }
- }
-bottom:
- add_plist(pkg, cmd, cp);
- }
}
/* Write a packing list to a file, converting commands to ascii equivs */
-void
+int
write_plist(Package *pkg, FILE *fp)
{
- PackingList plist = pkg->head;
+ PackingList plist;
+ int rc = 0;
+
+ for (plist = pkg->head; plist != NULL; plist = plist->next) {
+
+ switch(plist->type) {
+ case PLIST_FILE:
+ fprintf(fp, "%s\n", plist->name);
+ break;
- while (plist) {
- switch(plist->type) {
- case PLIST_FILE:
- fprintf(fp, "%s\n", plist->name);
- break;
+ case PLIST_CWD:
+ fprintf(fp, "%ccwd %s\n",
+ CMD_CHAR, (plist->name == NULL) ? "" : plist->name);
+ break;
- case PLIST_CWD:
- fprintf(fp, "%ccwd %s\n", CMD_CHAR, (plist->name == NULL) ? "" : plist->name);
- break;
+ case PLIST_SRC:
+ fprintf(fp, "%csrcdir %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_SRC:
- fprintf(fp, "%csrcdir %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_CMD:
+ fprintf(fp, "%cexec %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_CMD:
- fprintf(fp, "%cexec %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_UNEXEC:
+ fprintf(fp, "%cunexec %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_UNEXEC:
- fprintf(fp, "%cunexec %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_CHMOD:
+ fprintf(fp, "%cmode %s\n",
+ CMD_CHAR, plist->name ? plist->name : "");
+ break;
- case PLIST_CHMOD:
- fprintf(fp, "%cmode %s\n", CMD_CHAR, plist->name ? plist->name : "");
- break;
+ case PLIST_CHOWN:
+ fprintf(fp, "%cowner %s\n",
+ CMD_CHAR, plist->name ? plist->name : "");
+ break;
- case PLIST_CHOWN:
- fprintf(fp, "%cowner %s\n", CMD_CHAR, plist->name ? plist->name : "");
- break;
+ case PLIST_CHGRP:
+ fprintf(fp, "%cgroup %s\n",
+ CMD_CHAR, plist->name ? plist->name : "");
+ break;
- case PLIST_CHGRP:
- fprintf(fp, "%cgroup %s\n", CMD_CHAR, plist->name ? plist->name : "");
- break;
+ case PLIST_COMMENT:
+ fprintf(fp, "%ccomment %s\n",
+ CMD_CHAR, plist->name);
+ break;
- case PLIST_COMMENT:
- fprintf(fp, "%ccomment %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_NOINST:
+ fprintf(fp, "%cnoinst %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_NOINST:
- fprintf(fp, "%cnoinst %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_IGNORE:
+ /* FALLTHROUGH */
+ /* a one-time non-ignored file */
+ case PLIST_IGNORE_INST:
+ fprintf(fp, "%cignore\n", CMD_CHAR);
+ break;
- case PLIST_IGNORE:
- case PLIST_IGNORE_INST: /* a one-time non-ignored file */
- fprintf(fp, "%cignore\n", CMD_CHAR);
- break;
+ case PLIST_NAME:
+ fprintf(fp, "%cname %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_NAME:
- fprintf(fp, "%cname %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_DISPLAY:
+ fprintf(fp, "%cdisplay %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_DISPLAY:
- fprintf(fp, "%cdisplay %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_PKGDEP:
+ fprintf(fp, "%cpkgdep %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_PKGDEP:
- fprintf(fp, "%cpkgdep %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_CONFLICTS:
+ fprintf(fp, "%cconflicts %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_CONFLICTS:
- fprintf(fp, "%cconflicts %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_MTREE:
+ fprintf(fp, "%cmtree %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_MTREE:
- fprintf(fp, "%cmtree %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_DIR_RM:
+ fprintf(fp, "%cdirrm %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_DIR_RM:
- fprintf(fp, "%cdirrm %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_OPTION:
+ fprintf(fp, "%coption %s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_OPTION:
- fprintf(fp, "%coption %s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_ORIGIN:
+ fprintf(fp, "%ccomment ORIGIN:%s\n",
+ CMD_CHAR, plist->name);
+ break;
- case PLIST_ORIGIN:
- fprintf(fp, "%ccomment ORIGIN:%s\n", CMD_CHAR, plist->name);
- break;
+ case PLIST_DEPORIGIN:
+ fprintf(fp, "%ccomment DEPORIGIN:%s\n", CMD_CHAR, plist->name);
+ break;
- case PLIST_DEPORIGIN:
- fprintf(fp, "%ccomment DEPORIGIN:%s\n", CMD_CHAR, plist->name);
- break;
+ default:
+ warnx("%s: unknown command type %d (%s)", __func__,
+ plist->type, plist->name);
+ rc = -1;
+ break;
+ }
- default:
- cleanup(0);
- errx(2, "%s: unknown command type %d (%s)", __func__,
- plist->type, plist->name);
- break;
}
- plist = plist->next;
- }
+
+ return rc;
+
}
/*
@@ -473,9 +505,9 @@
char *cp = NULL, buf[33];
/*
- * For packing lists whose version is 1.1 or greater, the md5
- * hash for a symlink is calculated on the string returned
- * by readlink().
+ * For packing lists whose version is 1.1 or greater, the
+ * md5 hash for a symlink is calculated on the string
+ * returned by readlink().
*/
if (issymlink(tmp) && verscmp(pkg, 1, 0) > 0) {
int len;
More information about the p4-projects
mailing list