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