From 2cc3ec57effb68dc284985455b0ed4a339fc17eb Mon Sep 17 00:00:00 2001 From: ligd Date: Wed, 7 Sep 2022 17:20:25 +0800 Subject: [PATCH] queue: add dq_rmafter support Signed-off-by: ligd --- include/queue.h | 11 ++++---- libs/libc/queue/Make.defs | 2 +- libs/libc/queue/dq_remafter.c | 50 +++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 libs/libc/queue/dq_remafter.c diff --git a/include/queue.h b/include/queue.h index 42f3b28a0e..f062e2783c 100644 --- a/include/queue.h +++ b/include/queue.h @@ -312,11 +312,12 @@ void dq_addafter(FAR dq_entry_t *prev, FAR dq_entry_t *node, /* Remove nodes from queues */ -FAR sq_entry_t *sq_remafter(FAR sq_entry_t *node, FAR sq_queue_t *queue); -FAR sq_entry_t *sq_remlast(FAR sq_queue_t *queue); -FAR dq_entry_t *dq_remlast(FAR dq_queue_t *queue); -FAR sq_entry_t *sq_remfirst(FAR sq_queue_t *queue); -FAR dq_entry_t *dq_remfirst(FAR dq_queue_t *queue); +FAR sq_entry_t *sq_remafter(FAR sq_entry_t *node, FAR sq_queue_t *queue); +FAR dq_entry_t *dq_remafter(FAR dq_entry_t *node, FAR dq_queue_t *queue); +FAR sq_entry_t *sq_remlast(FAR sq_queue_t *queue); +FAR dq_entry_t *dq_remlast(FAR dq_queue_t *queue); +FAR sq_entry_t *sq_remfirst(FAR sq_queue_t *queue); +FAR dq_entry_t *dq_remfirst(FAR dq_queue_t *queue); /* Count nodes in queues */ diff --git a/libs/libc/queue/Make.defs b/libs/libc/queue/Make.defs index 3480aaf7b8..f66b8cc2cd 100644 --- a/libs/libc/queue/Make.defs +++ b/libs/libc/queue/Make.defs @@ -21,7 +21,7 @@ # Add the queue C files to the build CSRCS += sq_addafter.c sq_remlast.c sq_remfirst.c sq_remafter.c sq_count.c -CSRCS += dq_addafter.c dq_remlast.c dq_remfirst.c dq_count.c +CSRCS += dq_addafter.c dq_remlast.c dq_remfirst.c dq_remafter.c dq_count.c # Add the queue directory to the build diff --git a/libs/libc/queue/dq_remafter.c b/libs/libc/queue/dq_remafter.c new file mode 100644 index 0000000000..25c6d83b75 --- /dev/null +++ b/libs/libc/queue/dq_remafter.c @@ -0,0 +1,50 @@ +/**************************************************************************** + * libs/libc/queue/dq_remafter.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: dq_remafter + * + * Description: + * dq_remafter removes the entry following 'node' from the 'queue'. + * Returns a reference to the removed entry. + * + ****************************************************************************/ + +FAR dq_entry_t *dq_remafter(FAR dq_entry_t *node, FAR dq_queue_t *queue) +{ + FAR dq_entry_t *ret = node->flink; + + if (queue->head != NULL && ret != NULL) + { + dq_rem(ret, queue); + } + + return ret; +}