Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
-/* variables using the above */
+/* Is CA an array? */
+#define CA_IS_ARRAY(ca) ((ca)->ca_type != NSC_STRINGY && (ca)->ca_len != 0)
+
+/* If CA is an array, return its length, else zero */
+#define CA_ARRAY_LEN(ca) ((ca)->ca_type != NSC_STRINGY ? (ca)->ca_len : 0)
extern struct castr ichr_ca[];
extern struct castr pchr_ca[];
extern struct castr ichr_ca[];
extern struct castr pchr_ca[];
*
* Known contributors to this file:
* Ron Koenderink, 2005
*
* Known contributors to this file:
* Ron Koenderink, 2005
- * Markus Armbruster, 2006-2013
+ * Markus Armbruster, 2006-2014
ef_nameof(type), row);
if (ca) {
fprintf(stderr, " field %s", ca->ca_name);
ef_nameof(type), row);
if (ca) {
fprintf(stderr, " field %s", ca->ca_name);
- if (ca->ca_type != NSC_STRINGY && ca->ca_len != 0)
fprintf(stderr, "(%d)", idx);
}
fprintf(stderr, ": ");
fprintf(stderr, "(%d)", idx);
}
fprintf(stderr, ": ");
for (i = 0; ca[i].ca_name; ++i) {
if (ca[i].ca_get)
continue; /* virtual */
for (i = 0; ca[i].ca_name; ++i) {
if (ca[i].ca_get)
continue; /* virtual */
- n = ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0;
+ n = CA_ARRAY_LEN(&ca[i]);
j = 0;
do {
if (ca[i].ca_table == EF_BAD)
j = 0;
do {
if (ca[i].ca_table == EF_BAD)
continue;
if (ca[i].ca_flags & NSC_EXTRA)
continue;
continue;
if (ca[i].ca_flags & NSC_EXTRA)
continue;
- n = ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0;
+ n = CA_ARRAY_LEN(&ca[i]);
j = 0;
do {
xdeval(&val, xd, &ca[i], ptr, j);
j = 0;
do {
xdeval(&val, xd, &ca[i], ptr, j);
continue;
if (ca[i].ca_flags & NSC_EXTRA)
continue;
continue;
if (ca[i].ca_flags & NSC_EXTRA)
continue;
- n = ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0;
+ n = CA_ARRAY_LEN(&ca[i]);
if (n) {
for (j = 0; j < n; j++) {
xd->pr("%s%s(%d)", sep, ca[i].ca_name, j);
if (n) {
for (j = 0; j < n; j++) {
xd->pr("%s%s(%d)", sep, ca[i].ca_name, j);
case '\n':
CANT_HAPPEN(i > nflds);
if (i < nflds) {
case '\n':
CANT_HAPPEN(i > nflds);
if (i < nflds) {
- if (fldca[i]->ca_type != NSC_STRINGY && fldca[i]->ca_len)
+ if (CA_IS_ARRAY(fldca[i]))
return gripe("Field %s(%d) missing",
fldca[i]->ca_name, fldidx[i]);
return gripe("Field %s missing", fldca[i]->ca_name);
return gripe("Field %s(%d) missing",
fldca[i]->ca_name, fldidx[i]);
return gripe("Field %s missing", fldca[i]->ca_name);
res == M_NOTUNIQUE ? "ambiguous" : "unknown");
if ((ca[res].ca_flags & NSC_EXTRA) || CANT_HAPPEN(ca[res].ca_get))
return gripe("Extraneous header %s in field %d", name, fldno + 1);
res == M_NOTUNIQUE ? "ambiguous" : "unknown");
if ((ca[res].ca_flags & NSC_EXTRA) || CANT_HAPPEN(ca[res].ca_get))
return gripe("Extraneous header %s in field %d", name, fldno + 1);
- if (ca[res].ca_type != NSC_STRINGY && ca[res].ca_len != 0) {
+ if (CA_IS_ARRAY(&ca[res])) {
if (idx < 0)
return gripe("Header %s requires an index in field %d",
ca[res].ca_name, fldno + 1);
if (idx < 0)
return gripe("Header %s requires an index in field %d",
ca[res].ca_name, fldno + 1);
cafldsmax = MAX(caflds[i], cafldspp[i]);
if (ca[i].ca_flags & NSC_EXTRA)
continue;
cafldsmax = MAX(caflds[i], cafldspp[i]);
if (ca[i].ca_flags & NSC_EXTRA)
continue;
- len = ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0;
+ len = CA_ARRAY_LEN(&ca[i]);
if (!len && !cafldsmax)
res = gripe("Header field %s missing", ca[i].ca_name);
else if (len && cafldsmax == len - 1)
if (!len && !cafldsmax)
res = gripe("Header field %s missing", ca[i].ca_name);
else if (len && cafldsmax == len - 1)
for (i = 0; ca[i].ca_name; i++) {
if ((ca[i].ca_flags & NSC_EXTRA))
continue;
for (i = 0; ca[i].ca_name; i++) {
if ((ca[i].ca_flags & NSC_EXTRA))
continue;
- n = ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0;
+ n = CA_ARRAY_LEN(&ca[i]);
j = 0;
do {
*fca++ = &ca[i];
j = 0;
do {
*fca++ = &ca[i];
for (i = 0; ca[i].ca_name; i++) {
nca++;
if (!(ca[i].ca_flags & NSC_EXTRA)) {
for (i = 0; ca[i].ca_name; i++) {
nca++;
if (!(ca[i].ca_flags & NSC_EXTRA)) {
- nf += MAX(1, ca[i].ca_type != NSC_STRINGY ? ca[i].ca_len : 0);
+ nf += MAX(1, CA_ARRAY_LEN(&ca[i]));
if (ca[i].ca_flags & NSC_CONST)
may_omit_id = may_trunc = 0;
}
if (ca[i].ca_flags & NSC_CONST)
may_omit_id = may_trunc = 0;
}