#include "syslib.h"

#include <unistd.h>
#include <string.h>
#include <minix/safecopies.h>

int
socketpath(endpoint_t endpt, const char * path, size_t size, int what,
	dev_t * dev, ino_t * ino)
{
	cp_grant_id_t grant;
	message m;
	int r;

	if ((grant = cpf_grant_direct(VFS_PROC_NR, (vir_bytes)path, size,
	    CPF_READ)) == GRANT_INVALID)
		return ENOMEM;

	memset(&m, 0, sizeof(m));
	m.m_lsys_vfs_socketpath.endpt = endpt;
	m.m_lsys_vfs_socketpath.grant = grant;
	m.m_lsys_vfs_socketpath.count = size;
	m.m_lsys_vfs_socketpath.what = what;

	r = _taskcall(VFS_PROC_NR, VFS_SOCKETPATH, &m);

	cpf_revoke(grant);

	if (r == OK) {
		*dev = m.m_vfs_lsys_socketpath.device;
		*ino = m.m_vfs_lsys_socketpath.inode;
	}

	return r;
}