- int head, from, to, start;
-
- alloc_pool_t hlink_pool;
- alloc_pool_t idev_pool = the_file_list->hlink_pool;
-
- hlink_pool = pool_create(128 * 1024, sizeof (struct hlink),
- out_of_memory, POOL_INTERN);
-
- for (from = to = 0; from < hlink_count; from++) {
- start = from;
- head = hlink_list[start];
- while (from < hlink_count-1
- && LINKED(hlink_list[from], hlink_list[from+1])) {
- pool_free(idev_pool, 0, FPTR(hlink_list[from])->link_u.idev);
- FPTR(hlink_list[from])->link_u.links = pool_talloc(hlink_pool,
- struct hlink, 1, "hlink_list");
-
- FPTR(hlink_list[from])->F_HLINDEX = to;
- FPTR(hlink_list[from])->F_NEXT = hlink_list[from+1];
- from++;
- }
- if (from > start) {
- pool_free(idev_pool, 0, FPTR(hlink_list[from])->link_u.idev);
- FPTR(hlink_list[from])->link_u.links = pool_talloc(hlink_pool,
- struct hlink, 1, "hlink_list");
-
- FPTR(head)->flags |= FLAG_HLINK_TOL;
- FPTR(hlink_list[from])->F_HLINDEX = to;
- FPTR(hlink_list[from])->F_NEXT = head;
- FPTR(hlink_list[from])->flags |= FLAG_HLINK_EOL;
- hlink_list[to++] = head;
- } else {
- pool_free(idev_pool, 0, FPTR(head)->link_u.idev);
- FPTR(head)->link_u.idev = NULL;