/* * Copyright (C) 1996-2023 The Squid Software Foundation and contributors * * Squid software is distributed under GPLv2+ license and includes * contributions from numerous individuals and organizations. * Please see the COPYING and CONTRIBUTORS files for details. */ // XXX: This file is made of large pieces of src/tools.cc // with only a few minor modifications. TODO: redesign or delete. #include "squid.h" #include "dlink.h" void dlinkAdd(void *data, dlink_node * m, dlink_list * list) { m->data = data; m->prev = nullptr; m->next = list->head; if (list->head) list->head->prev = m; list->head = m; if (list->tail == nullptr) list->tail = m; } void dlinkAddAfter(void *data, dlink_node * m, dlink_node * n, dlink_list * list) { m->data = data; m->prev = n; m->next = n->next; if (n->next) n->next->prev = m; else { assert(list->tail == n); list->tail = m; } n->next = m; } void dlinkAddTail(void *data, dlink_node * m, dlink_list * list) { m->data = data; m->next = nullptr; m->prev = list->tail; if (list->tail) list->tail->next = m; list->tail = m; if (list->head == nullptr) list->head = m; } void dlinkDelete(dlink_node * m, dlink_list * list) { if (m->next) m->next->prev = m->prev; if (m->prev) m->prev->next = m->next; if (m == list->head) list->head = m->next; if (m == list->tail) list->tail = m->prev; m->next = m->prev = nullptr; }