]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for PM_SYSUNAME
authorLionel Sambuc <lionel@minix3.org>
Tue, 13 May 2014 09:31:36 +0000 (11:31 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:35 +0000 (17:05 +0200)
Change-Id: I58bd2987393ea56e1886fbce70b4b2c26af4ef2b

include/minix/callnr.h
include/minix/ipc.h
lib/libc/sys-minix/sysuname.c
servers/pm/misc.c

index 5f15e58ff52e27aa90f1bb4838a1bcc0a5394bb7..9c3c666766f1739abe5ea4c78ff553be59a20092 100644 (file)
 /* Field names for the exit(2) call. */
 #define PM_EXIT_STATUS         m1_i1   /* int */
 
-/* Field names for the sysuname(2) call. */
-#define PM_SYSUNAME_REQ                m1_i1   /* int */
-#define PM_SYSUNAME_FIELD      m1_i2   /* int */
-#define PM_SYSUNAME_LEN                m1_i3   /* char * */
-#define PM_SYSUNAME_VALUE      m1_p1   /* size_t */
-
 /* Field names for the execve(2) call. */
 #define PM_EXEC_NAME           m1_p1   /* const char * */
 #define PM_EXEC_NAMELEN                m1_i1   /* size_t */
index f3f1075afa8e8878080c24f1ec6de111816ec53c..b307e531d0e8a3cb51b34b90e5ed45f793d8b40f 100644 (file)
@@ -171,6 +171,16 @@ typedef struct {
 } mess_pm_lc_ptrace;
 _ASSERT_MSG_SIZE(mess_pm_lc_ptrace);
 
+typedef struct {
+       int req;
+       int field;
+       size_t len;
+       vir_bytes value;
+
+       uint8_t padding[40];
+} mess_lc_pm_sysuname;
+_ASSERT_MSG_SIZE(mess_lc_pm_sysuname);
+
 typedef struct {
        time_t sec;
 
@@ -950,6 +960,7 @@ typedef struct {
 
                mess_lc_pm_itimer       m_lc_pm_itimer;
                mess_lc_pm_ptrace       m_lc_pm_ptrace;
+               mess_lc_pm_sysuname     m_lc_pm_sysuname;
                mess_lc_pm_time         m_lc_pm_time;
                mess_lc_pm_waitpid      m_lc_pm_waitpid;
 
index 6aa78c1b8c72aa224de50ff43f6c5e33b61d016f..f8f08d09f370978abefcd0f5e1ff1c6d84dc7cce 100644 (file)
@@ -13,10 +13,10 @@ int sysuname(int req, int field, char *value, size_t len)
        message m;
 
        memset(&m, 0, sizeof(m));
-       m.PM_SYSUNAME_REQ = req;
-       m.PM_SYSUNAME_FIELD = field;
-       m.PM_SYSUNAME_LEN = len;
-       m.PM_SYSUNAME_VALUE = value;
+       m.m_lc_pm_sysuname.req = req;
+       m.m_lc_pm_sysuname.field = field;
+       m.m_lc_pm_sysuname.len = len;
+       m.m_lc_pm_sysuname.value = (vir_bytes)value;
 
        return _syscall(PM_PROC_NR, PM_SYSUNAME, &m);
 }
index c4c3781ab4bc1130dd9d7ed6f2ea2812502f787c..4d9e05aa3936ff960452e6852cb3a4e30e88ec87 100644 (file)
@@ -81,32 +81,31 @@ int do_sysuname()
   };
 #endif
 
-  if ((unsigned) m_in.PM_SYSUNAME_FIELD >= _UTS_MAX) return(EINVAL);
+  if (m_in.m_lc_pm_sysuname.field >= _UTS_MAX) return(EINVAL);
 
-  string = uts_tbl[m_in.PM_SYSUNAME_FIELD];
+  string = uts_tbl[m_in.m_lc_pm_sysuname.field];
   if (string == NULL)
        return EINVAL;  /* Unsupported field */
 
-  switch (m_in.PM_SYSUNAME_REQ) {
+  switch (m_in.m_lc_pm_sysuname.req) {
   case _UTS_GET:
        /* Copy an uname string to the user. */
        n = strlen(string) + 1;
-       if (n > m_in.PM_SYSUNAME_LEN) n = m_in.PM_SYSUNAME_LEN;
-       r = sys_datacopy(SELF, (phys_bytes) string, 
-               mp->mp_endpoint, (phys_bytes) m_in.PM_SYSUNAME_VALUE,
-               (phys_bytes) n);
+       if (n > m_in.m_lc_pm_sysuname.len) n = m_in.m_lc_pm_sysuname.len;
+       r = sys_datacopy(SELF, (vir_bytes)string, mp->mp_endpoint,
+               m_in.m_lc_pm_sysuname.value, (phys_bytes)n);
        if (r < 0) return(r);
        break;
 
 #if 0  /* no updates yet */
   case _UTS_SET:
        /* Set an uname string, needs root power. */
-       len = sizes[m_in.PM_SYSUNAME_FIELD];
+       len = sizes[m_in.m_lc_pm_sysuname.field];
        if (mp->mp_effuid != 0 || len == 0) return(EPERM);
-       n = len < m_in.PM_SYSUNAME_LEN ? len : m_in.PM_SYSUNAME_LEN;
+       n = len < m_in.m_lc_pm_sysuname.len ? len : m_in.m_lc_pm_sysuname.len;
        if (n <= 0) return(EINVAL);
-       r = sys_datacopy(mp->mp_endpoint, (phys_bytes) m_in.PM_SYSUNAME_VALUE,
-               SELF, (phys_bytes) tmp, (phys_bytes) n);
+       r = sys_datacopy(mp->mp_endpoint, m_in.m_lc_pm_sysuname.value, SELF,
+               (phys_bytes)tmp, (phys_bytes)n);
        if (r < 0) return(r);
        tmp[n-1] = 0;
        strcpy(string, tmp);