1dd969671SDavid van Moolenbroek #include "syslib.h"
2dd969671SDavid van Moolenbroek
3dd969671SDavid van Moolenbroek #include <unistd.h>
4dd969671SDavid van Moolenbroek #include <string.h>
5dd969671SDavid van Moolenbroek #include <minix/safecopies.h>
6dd969671SDavid van Moolenbroek
7dd969671SDavid van Moolenbroek int
socketpath(endpoint_t endpt,const char * path,size_t size,int what,dev_t * dev,ino_t * ino)8*27852ebeSDavid van Moolenbroek socketpath(endpoint_t endpt, const char * path, size_t size, int what,
9*27852ebeSDavid van Moolenbroek dev_t * dev, ino_t * ino)
10dd969671SDavid van Moolenbroek {
11dd969671SDavid van Moolenbroek cp_grant_id_t grant;
12dd969671SDavid van Moolenbroek message m;
13dd969671SDavid van Moolenbroek int r;
14dd969671SDavid van Moolenbroek
15dd969671SDavid van Moolenbroek if ((grant = cpf_grant_direct(VFS_PROC_NR, (vir_bytes)path, size,
16*27852ebeSDavid van Moolenbroek CPF_READ)) == GRANT_INVALID)
17dd969671SDavid van Moolenbroek return ENOMEM;
18dd969671SDavid van Moolenbroek
19dd969671SDavid van Moolenbroek memset(&m, 0, sizeof(m));
20dd969671SDavid van Moolenbroek m.m_lsys_vfs_socketpath.endpt = endpt;
21dd969671SDavid van Moolenbroek m.m_lsys_vfs_socketpath.grant = grant;
22dd969671SDavid van Moolenbroek m.m_lsys_vfs_socketpath.count = size;
23*27852ebeSDavid van Moolenbroek m.m_lsys_vfs_socketpath.what = what;
24dd969671SDavid van Moolenbroek
25dd969671SDavid van Moolenbroek r = _taskcall(VFS_PROC_NR, VFS_SOCKETPATH, &m);
26dd969671SDavid van Moolenbroek
27dd969671SDavid van Moolenbroek cpf_revoke(grant);
28dd969671SDavid van Moolenbroek
29dd969671SDavid van Moolenbroek if (r == OK) {
30dd969671SDavid van Moolenbroek *dev = m.m_vfs_lsys_socketpath.device;
31dd969671SDavid van Moolenbroek *ino = m.m_vfs_lsys_socketpath.inode;
32dd969671SDavid van Moolenbroek }
33dd969671SDavid van Moolenbroek
34dd969671SDavid van Moolenbroek return r;
35dd969671SDavid van Moolenbroek }
36