/* capsule_blocks.c -- the block format of a .4th capsule payload. * See capsule_blocks.h. Nothing here uses the C library or a VM. */ #include "starkernel/capsule_blocks.h" int capsule_block_header(const uint8_t *p, const uint8_t *end, uint32_t *out_num, const uint8_t **out_after) { const uint8_t *q; uint32_t num = 0; if ((uint64_t)(end - p) < 7u) return 0; if (p[0] != 'B' || p[1] != 'l' || p[2] != 'o' || p[3] != 'c' || p[4] != 'k' || p[5] != ' ') return 0; q = p + 6; if (q >= end || *q < '0' || *q > '9') return 0; while (q < end && *q >= '0' && *q <= '9') { num = num * 10u + (uint32_t)(*q - '0'); q++; } while (q < end && *q != '\n') q++; if (q < end) q++; *out_num = num; *out_after = q; return 1; }