zebra: don't misappropriate errno

`errno` has its own semantics.  Sometimes it is correct to write to it.
This is not one of those cases - just use a separate `nl_errno`.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
David Lamparter 2024-10-16 12:53:47 +02:00
parent 1350f8d1c1
commit 67b0a457ed

View file

@ -159,6 +159,7 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
int fd = -1, sock, ret; int fd = -1, sock, ret;
unsigned int seq; unsigned int seq;
ns_id_t return_nsid = NS_UNKNOWN; ns_id_t return_nsid = NS_UNKNOWN;
int nl_errno;
/* netns path check */ /* netns path check */
if (!netnspath && fd_param == -1) if (!netnspath && fd_param == -1)
@ -231,32 +232,31 @@ ns_id_t zebra_ns_id_get(const char *netnspath, int fd_param)
ret = -1; ret = -1;
if (err->error < 0) if (err->error < 0)
errno = -err->error; nl_errno = -err->error;
else else
errno = err->error; nl_errno = err->error;
if (errno == 0) { if (nl_errno == 0) {
/* request NEWNSID was successfull /* request NEWNSID was successfull
* return EEXIST error to get GETNSID * return EEXIST error to get GETNSID
*/ */
errno = EEXIST; nl_errno = EEXIST;
} }
} else { } else {
/* other errors ignored /* other errors ignored
* attempt to get nsid * attempt to get nsid
*/ */
ret = -1; ret = -1;
errno = EEXIST; nl_errno = EEXIST;
} }
} }
if (errno != EEXIST && ret != 0) { if (ret != 0 && nl_errno != EEXIST) {
flog_err(EC_LIB_SOCKET, flog_err(EC_LIB_SOCKET, "netlink( %u) recvfrom() error 2 when reading: %s", fd,
"netlink( %u) recvfrom() error 2 when reading: %s", fd, safe_strerror(nl_errno));
safe_strerror(errno));
close(sock); close(sock);
if (netnspath) if (netnspath)
close(fd); close(fd);
if (errno == ENOTSUP) { if (nl_errno == ENOTSUP) {
zlog_debug("NEWNSID locally generated"); zlog_debug("NEWNSID locally generated");
return zebra_ns_id_get_fallback(netnspath); return zebra_ns_id_get_fallback(netnspath);
} }