示例#1
0
/*
 * Given pg2_path = /some/file.pg2, extract the needed VPD values from
 * /some/file.vpd.
 */
static int
read_fake_vpd(const char *sg, const char *pg2_path, struct dev_vpd *vpd)
{
	char *vpd_path, *dot;
	char *result;
	FILE *f;

	vpd_path = strdup(pg2_path);
	assert(vpd_path);
	dot = strrchr(vpd_path, '.');
	assert(dot && !strcmp(dot, ".pg2"));
	strncpy(dot, ".vpd", VPD_PATHNAME_EXTN_MAXLEN - 1);
	dot[VPD_PATHNAME_EXTN_MAXLEN - 1] = '\0';

	f = fopen(vpd_path, "r");
	if (!f) {
		perror(vpd_path);
		free(vpd_path);
		return -1;
	}

	result = fgets_nonl(vpd->mtm, VPD_LENGTH, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->full_loc, LOCATION_LENGTH, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->sn, VPD_LENGTH, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->fru, VPD_LENGTH, f);
	if (!result)
		goto missing_vpd;
	fclose(f);
	free(vpd_path);

	/* Add sg device name */
	strncpy(vpd->dev, sg, PATH_MAX - 1);

	trim_location_code(vpd);
	return 0;

missing_vpd:
	fprintf(stderr, "%s lacks acceptable mtm, location code, serial number,"
			" and FRU number.\n", vpd_path);
	fclose(f);
	free(vpd_path);
	return -1;
}
示例#2
0
/*
 * Given pg2_path = /some/file.pg2, extract the needed VPD values from
 * /some/file.vpd.
 */
static int
read_fake_vpd(struct dev_vpd *vpd, const char *pg2_path)
{
	char *vpd_path, *dot;
	char *result;
	FILE *f;

	vpd_path = strdup(pg2_path);
	assert(vpd_path);
	dot = strrchr(vpd_path, '.');
	assert(dot && !strcmp(dot, ".pg2"));
	strcpy(dot, ".vpd");

	f = fopen(vpd_path, "r");
	if (!f) {
		perror(vpd_path);
		free(vpd_path);
		return -1;
	}

	result = fgets_nonl(vpd->mtm, 128, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->full_loc, 128, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->sn, 128, f);
	if (!result)
		goto missing_vpd;
	result = fgets_nonl(vpd->fru, 128, f);
	if (!result)
		goto missing_vpd;
	fclose(f);
	free(vpd_path);

	trim_location_code(vpd);
	return 0;

missing_vpd:
	fprintf(stderr, "%s lacks acceptable mtm, location code, serial number,"
			" and FRU number.\n", vpd_path);
	fclose(f);
	free(vpd_path);
	return -1;
}