reallocarray(ptr, nmemb, size) { local tmp; local start; start = ptr; tmp = galloc(size); if (tmp == NULL) return NULL; if (ptr == NULL) return tmp; loop { if (start - ptr == nmemb) break; [tmp + start - ptr] = [start]; start++; } free(ptr); return tmp; }