if (!deform_only) { /* Will use later to speed up subsurf/derivedmesh */ int tot_dm_face = dm__->getNumEdges(dm__); int totface = me->totface; int *origindex = DM_get_face_data_layer(dm__, CD_ORIGINDEX); int i; LinkNode *node, *node_array; node= MEM_callocN(sizeof(LinkNode)*tot_dm_face, "faceindicies"); node_array = MEM_callocN(sizeof(LinkNode **)*totface, "faceindicies"); for (i=0; i < tot_dm_face; i++, origindex++, node++) { node->link = (void *)i; // or use the index? if (node_array + (*origindex)) { node_array[*origindex]->next = node; } else { node_array[*origindex] = *node; } } }