mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 02:46:26 +00:00
lib, ldpd: fix SA warnings from TAILQ oddness
Add a TAILQ_POP_FIRST so Clang understands it's the same item that is getting removed from the list. Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
parent
6317894ef3
commit
a43ad4fef8
@ -1620,10 +1620,8 @@ lde_address_list_free(struct lde_nbr *ln)
|
||||
{
|
||||
struct lde_addr *lde_addr;
|
||||
|
||||
while ((lde_addr = TAILQ_FIRST(&ln->addr_list)) != NULL) {
|
||||
TAILQ_REMOVE(&ln->addr_list, lde_addr, entry);
|
||||
while ((lde_addr = TAILQ_POP_FIRST(&ln->addr_list, entry)) != NULL)
|
||||
free(lde_addr);
|
||||
}
|
||||
}
|
||||
|
||||
static void zclient_sync_init(unsigned short instance)
|
||||
|
@ -21,9 +21,9 @@
|
||||
#include "queue.h"
|
||||
#include "imsg.h"
|
||||
|
||||
int ibuf_realloc(struct ibuf *, size_t);
|
||||
void ibuf_enqueue(struct msgbuf *, struct ibuf *);
|
||||
void ibuf_dequeue(struct msgbuf *, struct ibuf *);
|
||||
static int ibuf_realloc(struct ibuf *, size_t);
|
||||
static void ibuf_enqueue(struct msgbuf *, struct ibuf *);
|
||||
static void ibuf_dequeue(struct msgbuf *, struct ibuf *);
|
||||
|
||||
struct ibuf *ibuf_open(size_t len)
|
||||
{
|
||||
@ -57,7 +57,7 @@ struct ibuf *ibuf_dynamic(size_t len, size_t max)
|
||||
return (buf);
|
||||
}
|
||||
|
||||
int ibuf_realloc(struct ibuf *buf, size_t len)
|
||||
static int ibuf_realloc(struct ibuf *buf, size_t len)
|
||||
{
|
||||
uint8_t *b;
|
||||
|
||||
@ -183,6 +183,8 @@ void msgbuf_drain(struct msgbuf *msgbuf, size_t n)
|
||||
next = TAILQ_NEXT(buf, entry);
|
||||
if (buf->rpos + n >= buf->wpos) {
|
||||
n -= buf->wpos - buf->rpos;
|
||||
|
||||
TAILQ_REMOVE(&msgbuf->bufs, buf, entry);
|
||||
ibuf_dequeue(msgbuf, buf);
|
||||
} else {
|
||||
buf->rpos += n;
|
||||
@ -195,7 +197,7 @@ void msgbuf_clear(struct msgbuf *msgbuf)
|
||||
{
|
||||
struct ibuf *buf;
|
||||
|
||||
while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL)
|
||||
while ((buf = TAILQ_POP_FIRST(&msgbuf->bufs, entry)) != NULL)
|
||||
ibuf_dequeue(msgbuf, buf);
|
||||
}
|
||||
|
||||
@ -266,16 +268,15 @@ again:
|
||||
return (1);
|
||||
}
|
||||
|
||||
void ibuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
|
||||
static void ibuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf)
|
||||
{
|
||||
TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry);
|
||||
msgbuf->queued++;
|
||||
}
|
||||
|
||||
void ibuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
|
||||
static void ibuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf)
|
||||
{
|
||||
TAILQ_REMOVE(&msgbuf->bufs, buf, entry);
|
||||
|
||||
/* TAILQ_REMOVE done by caller */
|
||||
if (buf->fd != -1)
|
||||
close(buf->fd);
|
||||
|
||||
|
@ -299,11 +299,10 @@ int imsg_get_fd(struct imsgbuf *ibuf)
|
||||
int fd;
|
||||
struct imsg_fd *ifd;
|
||||
|
||||
if ((ifd = TAILQ_FIRST(&ibuf->fds)) == NULL)
|
||||
if ((ifd = TAILQ_POP_FIRST(&ibuf->fds, entry)) == NULL)
|
||||
return (-1);
|
||||
|
||||
fd = ifd->fd;
|
||||
TAILQ_REMOVE(&ibuf->fds, ifd, entry);
|
||||
free(ifd);
|
||||
|
||||
return (fd);
|
||||
|
13
lib/queue.h
13
lib/queue.h
@ -72,4 +72,17 @@
|
||||
#include "freebsd-queue.h"
|
||||
#endif /* defined(__OpenBSD__) && !defined(STAILQ_HEAD) */
|
||||
|
||||
#ifndef TAILQ_POP_FIRST
|
||||
#define TAILQ_POP_FIRST(head, field) \
|
||||
({ typeof((head)->tqh_first) _elm = TAILQ_FIRST(head); \
|
||||
if (_elm) { \
|
||||
if ((TAILQ_NEXT((_elm), field)) != NULL) \
|
||||
TAILQ_NEXT((_elm), field)->field.tqe_prev = \
|
||||
&TAILQ_FIRST(head); \
|
||||
else \
|
||||
(head)->tqh_last = &TAILQ_FIRST(head); \
|
||||
TAILQ_FIRST(head) = TAILQ_NEXT((_elm), field); \
|
||||
}; _elm; })
|
||||
#endif
|
||||
|
||||
#endif /* _FRR_QUEUE_H */
|
||||
|
Loading…
Reference in New Issue
Block a user