From: Sascha Wildner Date: Sun, 4 Jan 2015 04:13:56 +0000 (+0100) Subject: libc/sysvipc: Constify msgsnd()'s message pointer argument (per POSIX). X-Git-Tag: v4.2.0rc~1193 X-Git-Url: https://gitweb.dragonflybsd.org/~tuxillo/dragonfly.git/commitdiff_plain/d217426c317e15b34c1a61f020c85bd2b08f5c0d libc/sysvipc: Constify msgsnd()'s message pointer argument (per POSIX). Also add a comment in that our msgrcv() should really return ssize_t. --- diff --git a/lib/libc/gen/sysvipc_msgsnd.c b/lib/libc/gen/sysvipc_msgsnd.c index 30bf869f7c..cec65ba68f 100644 --- a/lib/libc/gen/sysvipc_msgsnd.c +++ b/lib/libc/gen/sysvipc_msgsnd.c @@ -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)); diff --git a/lib/libc/sys/msgsnd.2 b/lib/libc/sys/msgsnd.2 index 327334345a..887ec30fd1 100644 --- a/lib/libc/sys/msgsnd.2 +++ b/lib/libc/sys/msgsnd.2 @@ -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 diff --git a/lib/libc/sysvipc/msg.c b/lib/libc/sysvipc/msg.c index d87bae1b1e..a0dd533769 100644 --- a/lib/libc/sysvipc/msg.c +++ b/lib/libc/sysvipc/msg.c @@ -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; diff --git a/lib/libc/sysvipc/sysvipc_msg.h b/lib/libc/sysvipc/sysvipc_msg.h index 998827cd92..ab61836500 100644 --- a/lib/libc/sysvipc/sysvipc_msg.h +++ b/lib/libc/sysvipc/sysvipc_msg.h @@ -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_ */ diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master index 86f46f0a8a..b2dc99526e 100644 --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -348,7 +348,7 @@ 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); } diff --git a/sys/kern/sysv_msg.c b/sys/kern/sysv_msg.c index cd9709fbc5..e133716c1d 100644 --- a/sys/kern/sysv_msg.c +++ b/sys/kern/sysv_msg.c @@ -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) diff --git a/sys/sys/msg.h b/sys/sys/msg.h index 1fa89af1fb..9a1ab2e5c5 100644 --- a/sys/sys/msg.h +++ b/sys/sys/msg.h @@ -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 diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h index 22190f2249..1220912300 100644 --- a/sys/sys/sysproto.h +++ b/sys/sys/sysproto.h @@ -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)]; };