off += format(buf, size, off, ",");
break;
}
- return off + 1;
+ break;
default:
off += format(buf, size, off, "Path(%d,%d,", dp->type,
dp->subtype);
{
ssize_t sz;
- if (efidp_type(in) == EFIDP_END_TYPE)
- return -1;
+ if (efidp_type(in) == EFIDP_END_TYPE &&
+ efidp_subtype(in) == EFIDP_END_ENTIRE)
+ return 0;
sz = efidp_node_size(in);
if (sz < 0)
/* I love you gcc. */
*out = (const_efidp)(const efidp_header *)((uint8_t *)in + sz);
- return 0;
+ return 1;
}
static inline int
ssize_t sz;
if (efidp_type(in) != EFIDP_END_TYPE ||
- efidp_subtype(in) != EFIDP_END_INSTANCE)
+ efidp_subtype(in) != EFIDP_END_INSTANCE) {
+ errno = EINVAL;
return -1;
+ }
sz = efidp_node_size(in);
if (sz < 0)
/* I love you gcc. */
*out = (const_efidp)(const efidp_header *)((uint8_t *)in + sz);
- return 0;
+ return 1;
}
static inline int
int rc;
rc = efidp_next_node(dn, &next);
- if (rc < 0)
- break;
+ if (rc < 0) {
+ errno = EINVAL;
+ return -1;
+ }
+
dn = next;
+ if (efidp_type(dn) == EFIDP_END_TYPE &&
+ efidp_subtype(dn) == EFIDP_END_INSTANCE)
+ return 1;
+ if (efidp_type(dn) == EFIDP_END_TYPE &&
+ efidp_subtype(dn) == EFIDP_END_ENTIRE)
+ return 0;
}
- if (efidp_type(dn) == EFIDP_END_TYPE &&
- efidp_subtype(dn) == EFIDP_END_INSTANCE)
- return 1;
return 0;
}
return -1;
}
+ if (efidp_type(dp) == EFIDP_END_TYPE &&
+ efidp_subtype(dp) == EFIDP_END_ENTIRE)
+ return efidp_node_size(dp);
+
while (1) {
- ssize_t sz;
int rc;
- const_efidp next;
+ ssize_t sz;
+ const_efidp next = NULL;
sz = efidp_node_size(dp);
if (sz < 0)
return sz;
ret += sz;
- if (efidp_type(dp) == EFIDP_END_TYPE &&
- efidp_subtype(dp) == EFIDP_END_ENTIRE)
- break;
-
rc = efidp_next_instance(dp, &next);
- if (rc < 0)
+ if (rc < 0) {
rc = efidp_next_node(dp, &next);
+ if (rc == 0) {
+ sz = efidp_node_size(dp);
+ if (sz < 0)
+ return sz;
+ ret += sz;
+ break;
+ }
+ }
if (rc < 0)
- return -1;
+ return rc;
dp = next;
}
rc = efidp_next_node(dpi, &next);
if (rc < 0)
- return -1;
+ return rc;
dpi = next;
}
return ret;
hdr = (efidp_header *)((uint8_t *)hdr + hdr->length);
}
- return (limit >= 0);
+ if (limit < 0) {
+ errno = EINVAL;
+ return 0;
+ }
+ return 1;
}
/* and now, printing and parsing */