Commit 6a3cfcd5 authored by Kirill Tkhai's avatar Kirill Tkhai Committed by Pavel Emelyanov

scm: Return sensible error codes in recv_fds()

Replace "-1" return with errno codes.

ENOMSG and EBADFD were choosen to do not cross with
standard recvmsg() errors (described in its man page).

This patch is need as preparation to making recv_msg()
be able to be non-block, and return EAGAIN and EWOULDBLOCK
in case of no data.
Signed-off-by: 's avatarKirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 25d59cb2
...@@ -13,8 +13,10 @@ ...@@ -13,8 +13,10 @@
#ifdef CR_NOGLIBC #ifdef CR_NOGLIBC
# include "syscall.h" # include "syscall.h"
# define __sys(foo) sys_##foo # define __sys(foo) sys_##foo
# define __sys_err(ret) ret
#else #else
# define __sys(foo) foo # define __sys(foo) foo
# define __sys_err(ret) (-errno)
#endif #endif
#define __memcpy builtin_memcpy #define __memcpy builtin_memcpy
......
...@@ -90,7 +90,7 @@ int recv_fds(int sock, int *fds, int nr_fds, void *data, unsigned ch_size) ...@@ -90,7 +90,7 @@ int recv_fds(int sock, int *fds, int nr_fds, void *data, unsigned ch_size)
ret = __sys(recvmsg)(sock, &fdset.hdr, 0); ret = __sys(recvmsg)(sock, &fdset.hdr, 0);
if (ret <= 0) if (ret <= 0)
return ret ? : -1; return ret ? __sys_err(ret) : -ENOMSG;
cmsg = CMSG_FIRSTHDR(&fdset.hdr); cmsg = CMSG_FIRSTHDR(&fdset.hdr);
if (!cmsg || cmsg->cmsg_type != SCM_RIGHTS) if (!cmsg || cmsg->cmsg_type != SCM_RIGHTS)
...@@ -111,7 +111,7 @@ int recv_fds(int sock, int *fds, int nr_fds, void *data, unsigned ch_size) ...@@ -111,7 +111,7 @@ int recv_fds(int sock, int *fds, int nr_fds, void *data, unsigned ch_size)
BUG_ON(min_fd > CR_SCM_MAX_FD); BUG_ON(min_fd > CR_SCM_MAX_FD);
if (unlikely(min_fd <= 0)) if (unlikely(min_fd <= 0))
return -1; return -EBADFD;
__memcpy(&fds[i], cmsg_data, sizeof(int) * min_fd); __memcpy(&fds[i], cmsg_data, sizeof(int) * min_fd);
if (data) if (data)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment