commit 263d36a92c39d879c9288b572353d4f7a3fff9ce
parent 6cd221502718901e6a43ed3a11ff2bca4ef52861
Author: sin <sin@2f30.org>
Date: Sun, 21 Jul 2013 21:15:16 +0100
Enqueue/dequeue 0 bytes always succeeds
Diffstat:
1 file changed, 6 insertions(+), 0 deletions(-)
diff --git a/kernel/kfifo.c b/kernel/kfifo.c
@@ -45,6 +45,9 @@ enqueue_kfifo(struct kfifo *kfifo, void *buf, size_t siz)
{
void *tmp;
+ if (!siz)
+ return 0;
+
spinlock_lock(&kfifo_lock);
if (kfifo->cap - kfifo->siz >= siz) {
memcpy(kfifo->buf + kfifo->siz, buf, siz);
@@ -69,6 +72,9 @@ enqueue_kfifo(struct kfifo *kfifo, void *buf, size_t siz)
int
dequeue_kfifo(struct kfifo *kfifo, void *buf, size_t siz)
{
+ if (!siz)
+ return 0;
+
spinlock_lock(&kfifo_lock);
if (kfifo->siz < siz) {
spinlock_unlock(&kfifo_lock);