9e3d893e8b06be4d573059247c43af5928a17944 angie Wed Nov 20 10:14:39 2013 -0800 Suppress a vcfFileErr about something that occurs in 1000 Genomes Phase 1VCF and is not really a big deal: if there's a keyword for which we're not expecting any particular number of values ("Number=." in header, def->fieldCount=-1), and the '=' is omitted when there are no values to report, just carry on and pretend we saw an '=' with no values after it. diff --git src/lib/vcf.c src/lib/vcf.c index 51c14a5..dd1c443 100644 --- src/lib/vcf.c +++ src/lib/vcf.c @@ -622,30 +622,33 @@ "VCF_MAX_INFO may need to be increased in vcf.c!", VCF_MAX_INFO); record->infoElements = vcfFileAlloc(vcff, record->infoCount * sizeof(struct vcfInfoElement)); char *emptyString = vcfFilePooledStr(vcff, ""); int i; for (i = 0; i < record->infoCount; i++) { char *elStr = elWords[i]; char *eq = strchr(elStr, '='); struct vcfInfoElement *el = &(record->infoElements[i]); if (eq == NULL) { el->key = vcfFilePooledStr(vcff, elStr); enum vcfInfoType type = typeForInfoKey(vcff, el->key); if (type != vcfInfoFlag) { + struct vcfInfoDef *def = vcfInfoDefForKey(vcff, el->key); + // Complain only if we are expecting a particular number of values for this keyword: + if (def != NULL && def->fieldCount >= 0) vcfFileErr(vcff, "Missing = after key in INFO element: \"%s\" (type=%d)", elStr, type); if (type == vcfInfoString) { el->values = vcfFileAlloc(vcff, sizeof(union vcfDatum)); el->values[0].datString = emptyString; } } continue; } *eq = '\0'; el->key = vcfFilePooledStr(vcff, elStr); enum vcfInfoType type = typeForInfoKey(vcff, el->key); char *valStr = eq+1; el->count = parseInfoValue(record, el->key, type, valStr, &(el->values), &(el->missingData));