XPG requires insque() and remque() to work with linear lists and not just
authorguenther <guenther@openbsd.org>
Fri, 15 Aug 2014 04:14:36 +0000 (04:14 +0000)
committerguenther <guenther@openbsd.org>
Fri, 15 Aug 2014 04:14:36 +0000 (04:14 +0000)
circular lists.  Amazingly, they managed to extend the requirements to no
longer match the behavior of the VAX instructions they were modeled after,
so the trivial VAX ASM versions have to go.  Nice job breaking it, X/Open!

Based on a diff from enh (at) google.com
ok miod@

lib/libc/arch/vax/stdlib/insque.S [deleted file]
lib/libc/arch/vax/stdlib/remque.S [deleted file]
lib/libc/stdlib/Makefile.inc
lib/libc/stdlib/insque.c
lib/libc/stdlib/remque.c

diff --git a/lib/libc/arch/vax/stdlib/insque.S b/lib/libc/arch/vax/stdlib/insque.S
deleted file mode 100644 (file)
index ba606ad..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*     $OpenBSD: insque.S,v 1.4 2013/07/05 21:10:50 miod Exp $ */
-
-/*
- * Copyright (c) 1983, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * From: "@(#)insque.s 8.1 (Berkeley) 6/4/93"
- */
-
-/* insque(new, pred) */
-
-#include "DEFS.h"
-
-ENTRY(insque, 0)
-       insque  *4(%ap), *8(%ap)
-       ret
diff --git a/lib/libc/arch/vax/stdlib/remque.S b/lib/libc/arch/vax/stdlib/remque.S
deleted file mode 100644 (file)
index e22acfd..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*     $OpenBSD: remque.S,v 1.4 2013/07/05 21:10:50 miod Exp $ */
-
-/*
- * Copyright (c) 1983, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * From: "@(#)remque.s 8.1 (Berkeley) 6/4/93"
- */
-
-/* remque(entry) */
-
-#include "DEFS.h"
-
-ENTRY(remque, 0)
-       remque  *4(%ap),%r0
-       ret
index 80c3e5f..0c0b149 100644 (file)
@@ -1,13 +1,14 @@
-#      $OpenBSD: Makefile.inc,v 1.53 2014/05/08 21:43:49 deraadt Exp $
+#      $OpenBSD: Makefile.inc,v 1.54 2014/08/15 04:14:36 guenther Exp $
 
 # stdlib sources
 .PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/stdlib ${LIBCSRCDIR}/stdlib
 
 SRCS+= a64l.c abort.c atexit.c atoi.c atof.c atol.c atoll.c bsearch.c \
        cfree.c exit.c ecvt.c gcvt.c getenv.c getopt_long.c \
-       getsubopt.c hcreate.c heapsort.c imaxabs.c imaxdiv.c l64a.c llabs.c \
-       lldiv.c lsearch.c malloc.c reallocarray.c merge.c posix_pty.c \
-       qsort.c radixsort.c rand.c random.c realpath.c setenv.c strtoimax.c \
+       getsubopt.c hcreate.c heapsort.c imaxabs.c imaxdiv.c insque.c \
+       l64a.c llabs.c lldiv.c lsearch.c malloc.c reallocarray.c \
+       merge.c posix_pty.c qsort.c radixsort.c rand.c random.c \
+       realpath.c remque.c setenv.c strtoimax.c \
        strtol.c strtoll.c strtonum.c strtoul.c strtoull.c strtoumax.c \
        system.c tfind.c tsearch.c _rand48.c drand48.c erand48.c jrand48.c \
        lcong48.c lrand48.c mrand48.c nrand48.c seed48.c srand48.c qabs.c \
@@ -24,12 +25,6 @@ SRCS+=       abs.c div.c labs.c ldiv.c
 SRCS+= abs.c div.c labs.c ldiv.c
 .endif
 
-.if (${MACHINE_CPU} == "vax")
-SRCS+= insque.S remque.S
-.else
-SRCS+= insque.c remque.c
-.endif
-
 MAN+=  a64l.3 abort.3 abs.3 alloca.3 atexit.3 atof.3 atoi.3 atol.3 atoll.3 \
        bsearch.3 div.3 ecvt.3 exit.3 getenv.3 getopt.3 getopt_long.3 \
        getsubopt.3 hcreate.3 imaxabs.3 imaxdiv.3 insque.3 labs.3 ldiv.3 \
index 8724efe..590ff83 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: insque.c,v 1.2 2005/08/08 08:05:36 espie Exp $        */
+/*     $OpenBSD: insque.c,v 1.3 2014/08/15 04:14:36 guenther Exp $     */
 
 /*
  *  Copyright (c) 1993 John Brezak
@@ -28,6 +28,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <stdlib.h>
 #include <search.h>
 
 struct qelem {
@@ -38,11 +39,16 @@ struct qelem {
 void
 insque(void *entry, void *pred)
 {
-       struct qelem *e = (struct qelem *) entry;
-       struct qelem *p = (struct qelem *) pred;
+       struct qelem *e = entry;
+       struct qelem *p = pred;
 
-       e->q_forw = p->q_forw;
-       e->q_back = p;
-       p->q_forw->q_back = e;
-       p->q_forw = e;
+       if (p == NULL)
+               e->q_forw = e->q_back = NULL;
+       else {
+               e->q_forw = p->q_forw;
+               e->q_back = p;
+               if (p->q_forw != NULL)
+                       p->q_forw->q_back = e;
+               p->q_forw = e;
+       }
 }
index ae249ae..71b74b2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: remque.c,v 1.2 2005/08/08 08:05:37 espie Exp $        */
+/*     $OpenBSD: remque.c,v 1.3 2014/08/15 04:14:36 guenther Exp $     */
 
 /*
  *  Copyright (c) 1993 John Brezak
@@ -28,6 +28,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <stdlib.h>
 #include <search.h>
 
 struct qelem {
@@ -38,7 +39,10 @@ struct qelem {
 void
 remque(void *element)
 {
-       struct qelem *e = (struct qelem *) element;
-       e->q_forw->q_back = e->q_back;
-       e->q_back->q_forw = e->q_forw;
+       struct qelem *e = element;
+
+       if (e->q_forw != NULL)
+               e->q_forw->q_back = e->q_back;
+       if (e->q_back != NULL)
+               e->q_back->q_forw = e->q_forw;
 }