#if MEMP_SANITY_CHECK
/**
- * Check that memp-lists don't form a circle
+ * Check that memp-lists don't form a circle, using "Floyd's cycle-finding algorithm".
*/
static int
memp_sanity(void)
{
- s16_t i, c;
- struct memp *m, *n;
+ s16_t i;
+ struct memp *t, *h;
for (i = 0; i < MEMP_MAX; i++) {
- for (m = memp_tab[i]; m != NULL; m = m->next) {
- c = 1;
- for (n = memp_tab[i]; n != NULL; n = n->next) {
- if (n == m && --c < 0) {
+ t = memp_tab[i];
+ if(t != NULL) {
+ for (h = t->next; (t != NULL) && (h != NULL); t = t->next,
+ h = (((h->next != NULL) && (h->next->next != NULL)) ? h->next->next : NULL)) {
+ if (t == h) {
return 0;
}
}