static void _push_partition_list(uint32_t user_id, uint32_t submit_uid) { ListIterator part_iterator; struct part_record *part_ptr; lua_newtable(L); part_iterator = list_iterator_create(part_list); while ((part_ptr = (struct part_record *) list_next(part_iterator))) { if (!_user_can_use_part(user_id, submit_uid, part_ptr)) continue; /* Create an empty table, with a metatable that looks up the * data for the partition. */ lua_newtable(L); lua_newtable(L); lua_pushcfunction(L, _part_rec_field_index); lua_setfield(L, -2, "__index"); /* Store the part_record in the metatable, so the index * function knows which job it's getting data for. */ lua_pushlightuserdata(L, part_ptr); lua_setfield(L, -2, "_part_rec_ptr"); lua_setmetatable(L, -2); lua_setfield(L, -2, part_ptr->name); } list_iterator_destroy(part_iterator); }
static void _push_partition_list(uint32_t user_id, uint32_t submit_uid) { int i = 1; ListIterator part_iterator; struct part_record *part_ptr; lua_newtable(L); part_iterator = list_iterator_create(part_list); while ((part_ptr = (struct part_record *) list_next(part_iterator))) { if (!_user_can_use_part(user_id, submit_uid, part_ptr)) continue; lua_pushlightuserdata (L, part_ptr); lua_rawseti(L, -2, i++); } list_iterator_destroy(part_iterator); }