Example #1
0
/* Read a packing list from a file */
void
read_plist(Package *pkg, FILE *fp)
{
    char *cp, pline[FILENAME_MAX];
    int cmd, major, minor;

    pkg->fmtver_maj = 1;
    pkg->fmtver_mnr = 0;
    pkg->origin = NULL;
    while (fgets(pline, FILENAME_MAX, fp)) {
	int 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 for package %s (pkgdep line without "
			"argument), ignoring", pkg->name);
		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) {
		cleanup(0);
		exit(2);
	    }
	}
bottom:
	add_plist(pkg, cmd, cp);
    }
}
Example #2
0
/*
 * Parse a packaging list from a memory buffer.
 */
void
parse_plist(package_t *pkg, const char *buf)
{
	int cmd;
	char *line, *cp;
	const char *eol, *next;
	size_t len;

	pkg->head = NULL;
	pkg->tail = NULL;

	for (; *buf; buf = next) {
		/* Until add_plist can deal with trailing whitespace. */
		if ((eol = strchr(buf, '\n')) != NULL) {
			next = eol + 1;
			len = eol - buf;
		} else {
			len = strlen(buf);
			next = buf + len;
		}

		while (len && isspace((unsigned char)buf[len - 1]))
			--len;

		if (len == 0)
			continue;

		line = xmalloc(len + 1);
		memcpy(line, buf, len);
		line[len] = '\0';

		if (*(cp = line) == CMD_CHAR) {
			if ((cmd = plist_cmd(line + 1, &cp)) == FAIL) {
				warnx("Unrecognised PLIST command `%s'", line);
				continue;
			}
			if (*cp == '\0') {
				free(cp);
				cp = NULL;
			}
		} else {
			cmd = PLIST_FILE;
		}
		add_plist(pkg, cmd, cp);
		free(cp);
	}
}
Example #3
0
/*
 * Read a packing list from a file
 */
void
append_plist(package_t *pkg, FILE * fp)
{
	char    pline[MaxPathSize];
	char   *cp;
	int     cmd;
	int     len;
	int	free_cp;

	while (fgets(pline, MaxPathSize, fp) != (char *) NULL) {
		for (len = strlen(pline); len &&
		    isspace((unsigned char) pline[len - 1]);) {
			pline[--len] = '\0';
		}
		if (len == 0) {
			continue;
		}
		free_cp = 0;
		if (*(cp = pline) == CMD_CHAR) {
			if ((cmd = plist_cmd(pline + 1, &cp)) == FAIL) {
				warnx("Unrecognised PLIST command `%s'", pline);
				continue;
			}
			if (*cp == '\0') {
				free(cp);
				cp = NULL;
			}
			free_cp = 1;
		} else {
			cmd = PLIST_FILE;
		}
		add_plist(pkg, cmd, cp);
		if (free_cp)
			free(cp);
	}
}