libc/sysvipc: Constify msgsnd()'s message pointer argument (per POSIX).
authorSascha Wildner <saw@online.de>
Sun, 4 Jan 2015 04:13:56 +0000 (05:13 +0100)
committerSascha Wildner <saw@online.de>
Sun, 4 Jan 2015 04:14:24 +0000 (05:14 +0100)
Also add a comment in <sys/msg.h> that our msgrcv() should really
return ssize_t.

lib/libc/gen/sysvipc_msgsnd.c
lib/libc/sys/msgsnd.2
lib/libc/sysvipc/msg.c
lib/libc/sysvipc/sysvipc_msg.h
sys/kern/syscalls.master
sys/kern/sysv_msg.c
sys/sys/msg.h
sys/sys/sysproto.h

index 30bf869..cec65ba 100644 (file)
@@ -6,9 +6,9 @@
 
 extern char sysvipc_userland;
 
-extern int __sys_msgsnd(int, void *, size_t, int);
+extern int __sys_msgsnd(int, const void *, size_t, int);
 
-int msgsnd(int msqid, void *msgp, size_t msgsz, int msgflg)
+int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
 {
        if (sysvipc_userland)
                return (sysvipc_msgsnd(msqid, msgp, msgsz, msgflg));
index 3273343..887ec30 100644 (file)
@@ -31,7 +31,7 @@
 .\"
 .\" $FreeBSD: src/lib/libc/gen/msgsnd.3,v 1.9.2.5 2001/12/14 18:33:51 ru Exp $
 .\"
-.Dd January 4, 2014
+.Dd January 4, 2015
 .Dt MSGSND 2
 .Os
 .Sh NAME
@@ -44,7 +44,7 @@
 .In sys/ipc.h
 .In sys/msg.h
 .Ft int
-.Fn msgsnd "int msqid" "void *msgp" "size_t msgsz" "int msgflg"
+.Fn msgsnd "int msqid" "const void *msgp" "size_t msgsz" "int msgflg"
 .Sh DESCRIPTION
 The
 .Fn msgsnd
index d87bae1..a0dd533 100644 (file)
@@ -365,7 +365,7 @@ sysvipc_msgctl(int msqid, int cmd, struct msqid_ds *buf) {
 }
 
 int
-sysvipc_msgsnd(int msqid, void *msgp, size_t msgsz, int msgflg)
+sysvipc_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
 {
        int segs_needed, error;
        struct msg *msghdr;
index 998827c..ab61836 100644 (file)
@@ -120,7 +120,7 @@ struct msqid_pool {
 
 int sysvipc_msgctl (int, int, struct msqid_ds *);
 int sysvipc_msgget (key_t, int);
-int sysvipc_msgsnd (int, void *, size_t, int);
-int sysvipc_msgrcv (int, void*, size_t, long, int);
+int sysvipc_msgsnd (int, const void *, size_t, int);
+int sysvipc_msgrcv (int, void *, size_t, long, int);
 
 #endif /* !_SYSV_MSG_H_ */
index 86f46f0..b2dc995 100644 (file)
 224    STD     { int msgctl(int msqid, int cmd, \
                            struct msqid_ds *buf); }
 225    STD     { int msgget(key_t key, int msgflg); }
-226    STD     { int msgsnd(int msqid, void *msgp, size_t msgsz, \
+226    STD     { int msgsnd(int msqid, const void *msgp, size_t msgsz, \
                            int msgflg); }
 227    STD     { int msgrcv(int msqid, void *msgp, size_t msgsz, \
                            long msgtyp, int msgflg); }
index cd9709f..e133716 100644 (file)
@@ -456,7 +456,7 @@ sys_msgsnd(struct msgsnd_args *uap)
 {
        struct thread *td = curthread;
        int msqid = uap->msqid;
-       void *user_msgp = uap->msgp;
+       const void *user_msgp = uap->msgp;
        size_t msgsz = uap->msgsz;
        int msgflg = uap->msgflg;
        int segs_needed, eval;
@@ -686,7 +686,7 @@ sys_msgsnd(struct msgsnd_args *uap)
                wakeup((caddr_t)msqptr);
                goto done;
        }
-       user_msgp = (char *)user_msgp + sizeof(msghdr->msg_type);
+       user_msgp = (const char *)user_msgp + sizeof(msghdr->msg_type);
 
        /*
         * Validate the message type
@@ -729,7 +729,7 @@ sys_msgsnd(struct msgsnd_args *uap)
                        goto done;
                }
                msgsz -= tlen;
-               user_msgp = (char *)user_msgp + tlen;
+               user_msgp = (const char *)user_msgp + tlen;
                next = msgmaps[next].next;
        }
        if (next != -1)
index 1fa89af..9a1ab2e 100644 (file)
@@ -106,8 +106,8 @@ extern struct msginfo       msginfo;
 __BEGIN_DECLS
 int msgctl (int, int, struct msqid_ds *);
 int msgget (key_t, int);
-int msgsnd (int, void *, size_t, int);
-int msgrcv (int, void*, size_t, long, int);
+int msgsnd (int, const void *, size_t, int);
+int msgrcv (int, void *, size_t, long, int); /* XXX should return ssize_t */
 __END_DECLS
 #endif
 
index 22190f2..1220912 100644 (file)
@@ -1066,7 +1066,7 @@ struct    msgsnd_args {
        struct sysmsg sysmsg;
 #endif
        int     msqid;  char msqid_[PAD_(int)];
-       void *  msgp;   char msgp_[PAD_(void *)];
+       const void *    msgp;   char msgp_[PAD_(const void *)];
        size_t  msgsz;  char msgsz_[PAD_(size_t)];
        int     msgflg; char msgflg_[PAD_(int)];
 };