Rename macros to use prefix ERRNO. Add macro ERRNO_SET. Now
ERRNO_{RESTORE/SAVE} must by used together, additional variable is not needed. Always use ERRNO_{SAVE/RESTORE/SET} macros. Approved by: pjd (mentor)
This commit is contained in:
parent
7d786ee2a9
commit
45fd5ced7b
@ -142,12 +142,11 @@ void
|
||||
nvlist_destroy(nvlist_t *nvl)
|
||||
{
|
||||
nvpair_t *nvp;
|
||||
int serrno;
|
||||
|
||||
if (nvl == NULL)
|
||||
return;
|
||||
|
||||
SAVE_ERRNO(serrno);
|
||||
ERRNO_SAVE();
|
||||
|
||||
NVLIST_ASSERT(nvl);
|
||||
|
||||
@ -158,7 +157,7 @@ nvlist_destroy(nvlist_t *nvl)
|
||||
nvl->nvl_magic = 0;
|
||||
nv_free(nvl);
|
||||
|
||||
RESTORE_ERRNO(serrno);
|
||||
ERRNO_RESTORE();
|
||||
}
|
||||
|
||||
void
|
||||
@ -264,7 +263,7 @@ nvlist_find(const nvlist_t *nvl, int type, const char *name)
|
||||
}
|
||||
|
||||
if (nvp == NULL)
|
||||
RESTORE_ERRNO(ENOENT);
|
||||
ERRNO_SET(ENOENT);
|
||||
|
||||
return (nvp);
|
||||
}
|
||||
@ -307,7 +306,7 @@ nvlist_clone(const nvlist_t *nvl)
|
||||
NVLIST_ASSERT(nvl);
|
||||
|
||||
if (nvl->nvl_error != 0) {
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -596,7 +595,7 @@ nvlist_xpack(const nvlist_t *nvl, int64_t *fdidxp, size_t *sizep)
|
||||
NVLIST_ASSERT(nvl);
|
||||
|
||||
if (nvl->nvl_error != 0) {
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -686,12 +685,12 @@ nvlist_pack(const nvlist_t *nvl, size_t *sizep)
|
||||
NVLIST_ASSERT(nvl);
|
||||
|
||||
if (nvl->nvl_error != 0) {
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (nvlist_ndescriptors(nvl) > 0) {
|
||||
RESTORE_ERRNO(EOPNOTSUPP);
|
||||
ERRNO_SET(EOPNOTSUPP);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -703,11 +702,11 @@ nvlist_check_header(struct nvlist_header *nvlhdrp)
|
||||
{
|
||||
|
||||
if (nvlhdrp->nvlh_magic != NVLIST_HEADER_MAGIC) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (false);
|
||||
}
|
||||
if ((nvlhdrp->nvlh_flags & ~NV_FLAG_ALL_MASK) != 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (false);
|
||||
}
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
@ -759,7 +758,7 @@ nvlist_unpack_header(nvlist_t *nvl, const unsigned char *ptr, size_t nfds,
|
||||
|
||||
return (ptr);
|
||||
failed:
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -853,10 +852,10 @@ nvlist_send(int sock, const nvlist_t *nvl)
|
||||
int *fds;
|
||||
void *data;
|
||||
int64_t fdidx;
|
||||
int serrno, ret;
|
||||
int ret;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
errno = nvlist_error(nvl);
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@ -882,10 +881,10 @@ nvlist_send(int sock, const nvlist_t *nvl)
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
serrno = errno;
|
||||
ERRNO_SAVE();
|
||||
free(fds);
|
||||
free(data);
|
||||
errno = serrno;
|
||||
ERRNO_RESTORE();
|
||||
return (ret);
|
||||
}
|
||||
|
||||
@ -896,7 +895,7 @@ nvlist_recv(int sock)
|
||||
nvlist_t *nvl, *ret;
|
||||
unsigned char *buf;
|
||||
size_t nfds, size, i;
|
||||
int serrno, *fds;
|
||||
int *fds;
|
||||
|
||||
if (buf_recv(sock, &nvlhdr, sizeof(nvlhdr)) == -1)
|
||||
return (NULL);
|
||||
@ -929,19 +928,19 @@ nvlist_recv(int sock)
|
||||
|
||||
nvl = nvlist_xunpack(buf, size, fds, nfds);
|
||||
if (nvl == NULL) {
|
||||
SAVE_ERRNO(serrno);
|
||||
ERRNO_SAVE();
|
||||
for (i = 0; i < nfds; i++)
|
||||
close(fds[i]);
|
||||
RESTORE_ERRNO(serrno);
|
||||
ERRNO_RESTORE();
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = nvl;
|
||||
out:
|
||||
serrno = errno;
|
||||
ERRNO_SAVE();
|
||||
free(buf);
|
||||
free(fds);
|
||||
errno = serrno;
|
||||
ERRNO_RESTORE();
|
||||
|
||||
return (ret);
|
||||
}
|
||||
@ -1054,19 +1053,19 @@ nvlist_add_nvpair(nvlist_t *nvl, const nvpair_t *nvp)
|
||||
NVPAIR_ASSERT(nvp);
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
if (nvlist_exists(nvl, nvpair_name(nvp))) {
|
||||
nvl->nvl_error = EEXIST;
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
newnvp = nvpair_clone(nvp);
|
||||
if (newnvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1090,14 +1089,14 @@ nvlist_add_stringv(nvlist_t *nvl, const char *name, const char *valuefmt,
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_stringv(name, valuefmt, valueap);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1109,14 +1108,14 @@ nvlist_add_null(nvlist_t *nvl, const char *name)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_null(name);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1128,14 +1127,14 @@ nvlist_add_bool(nvlist_t *nvl, const char *name, bool value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_bool(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1147,14 +1146,14 @@ nvlist_add_number(nvlist_t *nvl, const char *name, uint64_t value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_number(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1166,14 +1165,14 @@ nvlist_add_string(nvlist_t *nvl, const char *name, const char *value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_string(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1185,14 +1184,14 @@ nvlist_add_nvlist(nvlist_t *nvl, const char *name, const nvlist_t *value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_nvlist(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1224,14 +1223,14 @@ nvlist_add_binary(nvlist_t *nvl, const char *name, const void *value,
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_create_binary(name, value, size);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1246,13 +1245,13 @@ nvlist_move_nvpair(nvlist_t *nvl, nvpair_t *nvp)
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
nvpair_free(nvp);
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
if (nvlist_exists(nvl, nvpair_name(nvp))) {
|
||||
nvpair_free(nvp);
|
||||
nvl->nvl_error = EEXIST;
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1266,14 +1265,14 @@ nvlist_move_string(nvlist_t *nvl, const char *name, char *value)
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
nv_free(value);
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_move_string(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1287,14 +1286,14 @@ nvlist_move_nvlist(nvlist_t *nvl, const char *name, nvlist_t *value)
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
if (value != NULL && nvlist_get_nvpair_parent(value) != NULL)
|
||||
nvlist_destroy(value);
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_move_nvlist(name, value);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
@ -1308,15 +1307,17 @@ nvlist_move_descriptor(nvlist_t *nvl, const char *name, int value)
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
close(value);
|
||||
errno = nvlist_error(nvl);
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_move_descriptor(name, value);
|
||||
if (nvp == NULL)
|
||||
nvl->nvl_error = errno = (errno != 0 ? errno : ENOMEM);
|
||||
else
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1327,14 +1328,14 @@ nvlist_move_binary(nvlist_t *nvl, const char *name, void *value, size_t size)
|
||||
|
||||
if (nvlist_error(nvl) != 0) {
|
||||
nv_free(value);
|
||||
RESTORE_ERRNO(nvlist_error(nvl));
|
||||
ERRNO_SET(nvlist_error(nvl));
|
||||
return;
|
||||
}
|
||||
|
||||
nvp = nvpair_move_binary(name, value, size);
|
||||
if (nvp == NULL) {
|
||||
nvl->nvl_error = ERRNO_OR_DEFAULT(ENOMEM);
|
||||
RESTORE_ERRNO(nvl->nvl_error);
|
||||
ERRNO_SET(nvl->nvl_error);
|
||||
} else {
|
||||
nvlist_move_nvpair(nvl, nvp);
|
||||
}
|
||||
|
@ -468,7 +468,7 @@ nvpair_unpack_header(bool isbe, nvpair_t *nvp, const unsigned char *ptr,
|
||||
|
||||
return (ptr);
|
||||
failed:
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -480,7 +480,7 @@ nvpair_unpack_null(bool isbe __unused, nvpair_t *nvp, const unsigned char *ptr,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_NULL);
|
||||
|
||||
if (nvp->nvp_datasize != 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -496,11 +496,11 @@ nvpair_unpack_bool(bool isbe __unused, nvpair_t *nvp, const unsigned char *ptr,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_BOOL);
|
||||
|
||||
if (nvp->nvp_datasize != sizeof(value)) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
if (*leftp < sizeof(value)) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -509,7 +509,7 @@ nvpair_unpack_bool(bool isbe __unused, nvpair_t *nvp, const unsigned char *ptr,
|
||||
*leftp -= sizeof(value);
|
||||
|
||||
if (value != 0 && value != 1) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -526,11 +526,11 @@ nvpair_unpack_number(bool isbe, nvpair_t *nvp, const unsigned char *ptr,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_NUMBER);
|
||||
|
||||
if (nvp->nvp_datasize != sizeof(uint64_t)) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
if (*leftp < sizeof(uint64_t)) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -552,13 +552,13 @@ nvpair_unpack_string(bool isbe __unused, nvpair_t *nvp,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_STRING);
|
||||
|
||||
if (*leftp < nvp->nvp_datasize || nvp->nvp_datasize == 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (strnlen((const char *)ptr, nvp->nvp_datasize) !=
|
||||
nvp->nvp_datasize - 1) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -581,7 +581,7 @@ nvpair_unpack_nvlist(bool isbe __unused, nvpair_t *nvp,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_NVLIST);
|
||||
|
||||
if (*leftp < nvp->nvp_datasize || nvp->nvp_datasize == 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -609,11 +609,11 @@ nvpair_unpack_descriptor(bool isbe, nvpair_t *nvp, const unsigned char *ptr,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_DESCRIPTOR);
|
||||
|
||||
if (nvp->nvp_datasize != sizeof(idx)) {
|
||||
errno = EINVAL;
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
if (*leftp < sizeof(idx)) {
|
||||
errno = EINVAL;
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -623,12 +623,12 @@ nvpair_unpack_descriptor(bool isbe, nvpair_t *nvp, const unsigned char *ptr,
|
||||
idx = le64dec(ptr);
|
||||
|
||||
if (idx < 0) {
|
||||
errno = EINVAL;
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if ((size_t)idx >= nfds) {
|
||||
errno = EINVAL;
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -650,7 +650,7 @@ nvpair_unpack_binary(bool isbe __unused, nvpair_t *nvp,
|
||||
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_BINARY);
|
||||
|
||||
if (*leftp < nvp->nvp_datasize || nvp->nvp_datasize == 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -725,7 +725,7 @@ nvpair_allocv(const char *name, int type, uint64_t data, size_t datasize)
|
||||
|
||||
namelen = strlen(name);
|
||||
if (namelen >= NV_NAME_MAX) {
|
||||
RESTORE_ERRNO(ENAMETOOLONG);
|
||||
ERRNO_SET(ENAMETOOLONG);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -802,7 +802,7 @@ nvpair_create_string(const char *name, const char *value)
|
||||
char *data;
|
||||
|
||||
if (value == NULL) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -826,7 +826,7 @@ nvpair_create_nvlist(const char *name, const nvlist_t *value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (value == NULL) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -848,10 +848,9 @@ nvpair_t *
|
||||
nvpair_create_descriptor(const char *name, int value)
|
||||
{
|
||||
nvpair_t *nvp;
|
||||
int serrno;
|
||||
|
||||
if (value < 0 || !fd_is_valid(value)) {
|
||||
errno = EBADF;
|
||||
ERRNO_SET(EBADF);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -862,9 +861,9 @@ nvpair_create_descriptor(const char *name, int value)
|
||||
nvp = nvpair_allocv(name, NV_TYPE_DESCRIPTOR, (uint64_t)value,
|
||||
sizeof(int64_t));
|
||||
if (nvp == NULL) {
|
||||
SAVE_ERRNO(serrno);
|
||||
ERRNO_SAVE();
|
||||
close(value);
|
||||
RESTORE_ERRNO(serrno);
|
||||
ERRNO_RESTORE();
|
||||
}
|
||||
|
||||
return (nvp);
|
||||
@ -878,7 +877,7 @@ nvpair_create_binary(const char *name, const void *value, size_t size)
|
||||
void *data;
|
||||
|
||||
if (value == NULL || size == 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -899,19 +898,18 @@ nvpair_t *
|
||||
nvpair_move_string(const char *name, char *value)
|
||||
{
|
||||
nvpair_t *nvp;
|
||||
int serrno;
|
||||
|
||||
if (value == NULL) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
nvp = nvpair_allocv(name, NV_TYPE_STRING, (uint64_t)(uintptr_t)value,
|
||||
strlen(value) + 1);
|
||||
if (nvp == NULL) {
|
||||
SAVE_ERRNO(serrno);
|
||||
ERRNO_SAVE();
|
||||
nv_free(value);
|
||||
RESTORE_ERRNO(serrno);
|
||||
ERRNO_RESTORE();
|
||||
}
|
||||
|
||||
return (nvp);
|
||||
@ -923,12 +921,12 @@ nvpair_move_nvlist(const char *name, nvlist_t *value)
|
||||
nvpair_t *nvp;
|
||||
|
||||
if (value == NULL || nvlist_get_nvpair_parent(value) != NULL) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (nvlist_error(value) != 0) {
|
||||
RESTORE_ERRNO(nvlist_error(value));
|
||||
ERRNO_SET(nvlist_error(value));
|
||||
nvlist_destroy(value);
|
||||
return (NULL);
|
||||
}
|
||||
@ -948,19 +946,18 @@ nvpair_t *
|
||||
nvpair_move_descriptor(const char *name, int value)
|
||||
{
|
||||
nvpair_t *nvp;
|
||||
int serrno;
|
||||
|
||||
if (value < 0 || !fd_is_valid(value)) {
|
||||
errno = EBADF;
|
||||
ERRNO_SET(EBADF);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
nvp = nvpair_allocv(name, NV_TYPE_DESCRIPTOR, (uint64_t)value,
|
||||
sizeof(int64_t));
|
||||
if (nvp == NULL) {
|
||||
serrno = errno;
|
||||
ERRNO_SAVE();
|
||||
close(value);
|
||||
errno = serrno;
|
||||
ERRNO_RESTORE();
|
||||
}
|
||||
|
||||
return (nvp);
|
||||
@ -971,19 +968,18 @@ nvpair_t *
|
||||
nvpair_move_binary(const char *name, void *value, size_t size)
|
||||
{
|
||||
nvpair_t *nvp;
|
||||
int serrno;
|
||||
|
||||
if (value == NULL || size == 0) {
|
||||
RESTORE_ERRNO(EINVAL);
|
||||
ERRNO_SET(EINVAL);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
nvp = nvpair_allocv(name, NV_TYPE_BINARY, (uint64_t)(uintptr_t)value,
|
||||
size);
|
||||
if (nvp == NULL) {
|
||||
SAVE_ERRNO(serrno);
|
||||
ERRNO_SAVE();
|
||||
nv_free(value);
|
||||
RESTORE_ERRNO(serrno);
|
||||
ERRNO_RESTORE();
|
||||
}
|
||||
|
||||
return (nvp);
|
||||
|
@ -56,8 +56,9 @@ typedef struct nvpair nvpair_t;
|
||||
#define nv_strdup(buf) strdup((buf), M_NVLIST)
|
||||
#define nv_vasprintf(ptr, ...) vasprintf(ptr, M_NVLIST, __VA_ARGS__)
|
||||
|
||||
#define SAVE_ERRNO(var) ((void)(var))
|
||||
#define RESTORE_ERRNO(var) ((void)(var))
|
||||
#define ERRNO_SET(var) do { } while (0)
|
||||
#define ERRNO_SAVE() do { do { } while(0)
|
||||
#define ERRNO_RESTORE() } while (0)
|
||||
|
||||
#define ERRNO_OR_DEFAULT(default) (default)
|
||||
|
||||
@ -70,8 +71,14 @@ typedef struct nvpair nvpair_t;
|
||||
#define nv_strdup(buf) strdup((buf))
|
||||
#define nv_vasprintf(ptr, ...) vasprintf(ptr, __VA_ARGS__)
|
||||
|
||||
#define SAVE_ERRNO(var) (var) = errno
|
||||
#define RESTORE_ERRNO(var) errno = (var)
|
||||
#define ERRNO_SET(var) do { errno = (var); } while (0)
|
||||
#define ERRNO_SAVE() do { \
|
||||
int _serrno; \
|
||||
\
|
||||
_serrno = errno
|
||||
|
||||
#define ERRNO_RESTORE() errno = _serrno; \
|
||||
} while (0)
|
||||
|
||||
#define ERRNO_OR_DEFAULT(default) (errno == 0 ? (default) : errno)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user