aboutsummaryrefslogtreecommitdiffstats
path: root/util/fuse_ioslave.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/fuse_ioslave.c')
-rw-r--r--util/fuse_ioslave.c61
1 files changed, 0 insertions, 61 deletions
diff --git a/util/fuse_ioslave.c b/util/fuse_ioslave.c
deleted file mode 100644
index df7c66d..0000000
--- a/util/fuse_ioslave.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <stdio.h> /* fprintf */
-#include <errno.h> /* errno */
-#include <string.h> /* strerror */
-#include <unistd.h> /* read,write,close */
-#include <stdlib.h> /* getenv,strtol */
-#include <sys/select.h> /* select */
-#include <sys/socket.h> /* send, recv */
-#include <sys/un.h> /* struct sockaddr_un */
-#define BUFSIZE (2<<16)
-#undef IOSLAVE_DEBUG
-char *scratch;
-
-/* return values:
- * 0 => success
- * -1 => error condition
- */
-int send_fd(int sock_fd, int send_fd) {
- int retval;
- struct msghdr msg;
- struct cmsghdr *p_cmsg;
- struct iovec vec;
- char cmsgbuf[CMSG_SPACE(sizeof(send_fd))];
- int *p_fds;
- char sendchar = 0;
- msg.msg_control = cmsgbuf;
- msg.msg_controllen = sizeof(cmsgbuf);
- p_cmsg = CMSG_FIRSTHDR(&msg);
- p_cmsg->cmsg_level = SOL_SOCKET;
- p_cmsg->cmsg_type = SCM_RIGHTS;
- p_cmsg->cmsg_len = CMSG_LEN(sizeof(send_fd));
- p_fds = (int *) CMSG_DATA(p_cmsg);
- *p_fds = send_fd;
- msg.msg_controllen = p_cmsg->cmsg_len;
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- msg.msg_iov = &vec;
- msg.msg_iovlen = 1;
- msg.msg_flags = 0;
- /* "To pass file descriptors or credentials you need to send/read at
- * least one byte" (man 7 unix)
- */
- vec.iov_base = &sendchar;
- vec.iov_len = sizeof(sendchar);
- while((retval = sendmsg(sock_fd, &msg, 0)) == -1 && errno == EINTR);
- if (retval != 1) {
- perror("sendmsg");
- return -1;
- }
- return 0;
-}
-
-int main() {
- char *env = getenv("_FUSE_IOSLAVE_FD");
- int fd;
- if (!env)
- exit(fprintf(stderr, "fuse_ioslave: do not run me directly\n"));
- fd = strtol(env, NULL, 0);
- if(send_fd(fd, 0) == -1)
- fprintf(stderr,"failed to send fd\n");
- return 0;
-}