summaryrefslogtreecommitdiff
path: root/doio.c
diff options
context:
space:
mode:
authorBrian Childs <brian@rentec.com>2013-12-03 06:33:41 +0100
committerTony Cook <tony@develop-help.com>2013-12-09 14:31:00 +1100
commit64d7628235943ff18939a1ff98ace513aeb5260c (patch)
tree4a66ef3c015dffce9b6181e2a6401fdd044bf184 /doio.c
parent1c6ce212d37a2a17424675e94afb035a9a446f9f (diff)
downloadperl-64d7628235943ff18939a1ff98ace513aeb5260c.tar.gz
Fixes the case where on 64bit big-endian boxes, calls to semctl(id,semnum,SETVAL,$wantedval) will ignore the passed in $wantedval, and always use 0
Diffstat (limited to 'doio.c')
-rw-r--r--doio.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/doio.c b/doio.c
index 98e2c42024..b39c5876bd 100644
--- a/doio.c
+++ b/doio.c
@@ -2155,11 +2155,16 @@ Perl_do_ipcctl(pTHX_ I32 optype, SV **mark, SV **sp)
#ifdef Semctl
union semun unsemds;
+ if(cmd == SETVAL) {
+ unsemds.val = PTR2nat(a);
+ }
+ else {
#ifdef EXTRA_F_IN_SEMUN_BUF
- unsemds.buff = (struct semid_ds *)a;
+ unsemds.buff = (struct semid_ds *)a;
#else
- unsemds.buf = (struct semid_ds *)a;
+ unsemds.buf = (struct semid_ds *)a;
#endif
+ }
ret = Semctl(id, n, cmd, unsemds);
#else
/* diag_listed_as: sem%s not implemented */