Date: Mon, 17 May 2010 10:34:13 GMT From: Garrett Cooper <gcooper@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 178380 for review Message-ID: <201005171034.o4HAYDDe099421@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@178380?ac=10 Change 178380 by gcooper@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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005171034.o4HAYDDe099421>