summaryrefslogtreecommitdiff
path: root/minix/lib/libsys/sys_getinfo.c
blob: fad4da4f254290b1b1eec71d53e014c85e59ba27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

#include <string.h>
#include <sys/param.h>
#include "syslib.h"

/*===========================================================================*
 *                                sys_getinfo				     *
 *===========================================================================*/
int sys_getinfo(request, ptr, len, ptr2, len2)
int request; 				/* system info requested */
void *ptr;				/* pointer where to store it */
int len;				/* max length of value to get */
void *ptr2;				/* second pointer */
int len2;				/* length or process nr */ 
{
    message m;

    m.m_lsys_krn_sys_getinfo.request = request;
    m.m_lsys_krn_sys_getinfo.endpt = SELF;	/* always store values at caller */
    m.m_lsys_krn_sys_getinfo.val_ptr = (vir_bytes)ptr;
    m.m_lsys_krn_sys_getinfo.val_len = len;
    m.m_lsys_krn_sys_getinfo.val_ptr2 = (vir_bytes)ptr2;
    m.m_lsys_krn_sys_getinfo.val_len2_e = len2;

    return(_kernel_call(SYS_GETINFO, &m));
}

/*===========================================================================*
 *                                sys_whoami				     *
 *===========================================================================*/
int sys_whoami(endpoint_t *who_ep, char *who_name, int len,
	int *priv_flags, int *init_flags)
{
	message m;
	int r;
	int lenmin;

	m.m_lsys_krn_sys_getinfo.request = GET_WHOAMI;

	if(len < 2)
		return EINVAL;

	if((r = _kernel_call(SYS_GETINFO, &m)) != OK)
		return r;

	lenmin = MIN((size_t) len, sizeof(m.m_krn_lsys_sys_getwhoami.name)) - 1;

	strncpy(who_name, m.m_krn_lsys_sys_getwhoami.name, lenmin);
	who_name[lenmin] = '\0';
	*who_ep = m.m_krn_lsys_sys_getwhoami.endpt;
	*priv_flags = m.m_krn_lsys_sys_getwhoami.privflags;
	*init_flags = m.m_krn_lsys_sys_getwhoami.initflags;

	return OK;
}