+void *gras_libdata_by_id(int id)
+{
+ gras_procdata_t *pd = gras_procdata_get();
+ if (xbt_set_length(pd->libdata) <
+ xbt_dynar_length(_gras_procdata_fabrics)) {
+ /* Damn, some new modules were added since procdata_init(). Amok? */
+ /* Get 'em all */
+ gras_procdata_init();
+ }
+ return xbt_set_get_by_id(pd->libdata, id);
+}
+
+
+void gras_procdata_init()
+{
+ gras_procdata_t *pd = gras_procdata_get();
+ s_gras_procdata_fabric_t fab;
+
+ unsigned int cursor;
+
+ xbt_set_elm_t elem;
+
+ if (!pd->libdata) {
+ pd->userdata = NULL;
+ pd->libdata = xbt_set_new();
+ }
+
+ xbt_dynar_foreach(_gras_procdata_fabrics, cursor, fab) {
+
+ if (cursor + 1 <= xbt_set_length(pd->libdata)) {
+ XBT_DEBUG("Skip fabric %d: there is already %ld libdata",
+ cursor, xbt_set_length(pd->libdata));
+ continue; /* allow to recall this function to get recently added fabrics */
+ }
+ XBT_DEBUG("Go ahead for cursor %d, there is %ld libdata",
+ cursor, xbt_set_length(pd->libdata));