1*433d6423SLionel Sambuc #define _SYSTEM 1 2*433d6423SLionel Sambuc 3*433d6423SLionel Sambuc #include <sys/cdefs.h> 4*433d6423SLionel Sambuc #include <lib.h> 5*433d6423SLionel Sambuc #include "namespace.h" 6*433d6423SLionel Sambuc 7*433d6423SLionel Sambuc #include <minix/rs.h> 8*433d6423SLionel Sambuc #include <sys/types.h> 9*433d6423SLionel Sambuc #include <sys/ipc.h> 10*433d6423SLionel Sambuc #include <sys/shm.h> 11*433d6423SLionel Sambuc #include <stdlib.h> 12*433d6423SLionel Sambuc #include <errno.h> 13*433d6423SLionel Sambuc #include <string.h> 14*433d6423SLionel Sambuc get_ipc_endpt(endpoint_t * pt)15*433d6423SLionel Sambucstatic int get_ipc_endpt(endpoint_t *pt) 16*433d6423SLionel Sambuc { 17*433d6423SLionel Sambuc return minix_rs_lookup("ipc", pt); 18*433d6423SLionel Sambuc } 19*433d6423SLionel Sambuc 20*433d6423SLionel Sambuc /* Get shared memory segment. */ shmget(key_t key,size_t size,int shmflg)21*433d6423SLionel Sambucint shmget(key_t key, size_t size, int shmflg) 22*433d6423SLionel Sambuc { 23*433d6423SLionel Sambuc message m; 24*433d6423SLionel Sambuc endpoint_t ipc_pt; 25*433d6423SLionel Sambuc int r; 26*433d6423SLionel Sambuc 27*433d6423SLionel Sambuc if (get_ipc_endpt(&ipc_pt) != OK) { 28*433d6423SLionel Sambuc errno = ENOSYS; 29*433d6423SLionel Sambuc return -1; 30*433d6423SLionel Sambuc } 31*433d6423SLionel Sambuc 32*433d6423SLionel Sambuc memset(&m, 0, sizeof(m)); 33*433d6423SLionel Sambuc m.m_lc_ipc_shmget.key = key; 34*433d6423SLionel Sambuc m.m_lc_ipc_shmget.size = size; 35*433d6423SLionel Sambuc m.m_lc_ipc_shmget.flag = shmflg; 36*433d6423SLionel Sambuc 37*433d6423SLionel Sambuc r = _syscall(ipc_pt, IPC_SHMGET, &m); 38*433d6423SLionel Sambuc if (r != OK) 39*433d6423SLionel Sambuc return r; 40*433d6423SLionel Sambuc return m.m_lc_ipc_shmget.retid; 41*433d6423SLionel Sambuc } 42