svn commit: r258587 - in head/lib: libc libc/iconv libc_nonshared

Peter Wemm peter at FreeBSD.org
Mon Nov 25 20:17:58 UTC 2013


Author: peter
Date: Mon Nov 25 20:17:55 2013
New Revision: 258587
URL: http://svnweb.freebsd.org/changeset/base/258587

Log:
  Move the iconv wrapper source from libc_nonshared to libc/iconv so that
  it is all in the one place again.  Rename libc/iconv/iconv.c to
  bsd_iconv.c. Compile the wrappers into libc.a so that WITHOUT_DYNAMICROOT
  works again.
  
  Discussed with:	kib (and partly stolen from his patch)

Added:
  head/lib/libc/iconv/__iconv.c
     - copied unchanged from r258569, head/lib/libc_nonshared/__iconv.c
  head/lib/libc/iconv/__iconv_free_list.c
     - copied unchanged from r258569, head/lib/libc_nonshared/__iconv_free_list.c
  head/lib/libc/iconv/__iconv_get_list.c
     - copied unchanged from r258569, head/lib/libc_nonshared/__iconv_get_list.c
  head/lib/libc/iconv/bsd_iconv.c
     - copied unchanged from r258569, head/lib/libc/iconv/iconv.c
  head/lib/libc/iconv/iconv_canonicalize.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv_canonicalize.c
  head/lib/libc/iconv/iconv_close.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv_close.c
  head/lib/libc/iconv/iconv_open.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv_open.c
  head/lib/libc/iconv/iconv_open_into.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv_open_into.c
  head/lib/libc/iconv/iconv_set_relocation_prefix.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv_set_relocation_prefix.c
  head/lib/libc/iconv/iconvctl.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconvctl.c
  head/lib/libc/iconv/iconvlist.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconvlist.c
  head/lib/libc_nonshared/Makefile.iconv
     - copied, changed from r258569, head/lib/libc_nonshared/Makefile
Replaced:
  head/lib/libc/iconv/iconv.c
     - copied unchanged from r258569, head/lib/libc_nonshared/iconv.c
Deleted:
  head/lib/libc_nonshared/__iconv.c
  head/lib/libc_nonshared/__iconv_free_list.c
  head/lib/libc_nonshared/__iconv_get_list.c
  head/lib/libc_nonshared/iconv.c
  head/lib/libc_nonshared/iconv_canonicalize.c
  head/lib/libc_nonshared/iconv_close.c
  head/lib/libc_nonshared/iconv_open.c
  head/lib/libc_nonshared/iconv_open_into.c
  head/lib/libc_nonshared/iconv_set_relocation_prefix.c
  head/lib/libc_nonshared/iconvctl.c
  head/lib/libc_nonshared/iconvlist.c
Modified:
  head/lib/libc/Makefile
  head/lib/libc/iconv/Makefile.inc
  head/lib/libc_nonshared/Makefile

Modified: head/lib/libc/Makefile
==============================================================================
--- head/lib/libc/Makefile	Mon Nov 25 20:05:23 2013	(r258586)
+++ head/lib/libc/Makefile	Mon Nov 25 20:17:55 2013	(r258587)
@@ -50,6 +50,9 @@ LDADD+= -lgcc
 LDADD+= -lssp_nonshared
 .endif
 
+# Extras that live in either libc.a or libc_nonshared.a
+LIBC_NONSHARED_SRCS=
+
 # Define (empty) variables so that make doesn't give substitution
 # errors if the included makefiles don't change these:
 MDSRCS=
@@ -114,6 +117,8 @@ CFLAGS+= -DNS_CACHING
 CFLAGS+=-D_FREEFALL_CONFIG
 .endif
 
+STATICOBJS+=${LIBC_NONSHARED_SRCS:S/.c$/.o/}
+
 VERSION_DEF=${.CURDIR}/Versions.def
 SYMBOL_MAPS=${SYM_MAPS}
 CFLAGS+= -DSYMBOL_VERSIONING

Modified: head/lib/libc/iconv/Makefile.inc
==============================================================================
--- head/lib/libc/iconv/Makefile.inc	Mon Nov 25 20:05:23 2013	(r258586)
+++ head/lib/libc/iconv/Makefile.inc	Mon Nov 25 20:17:55 2013	(r258587)
@@ -14,5 +14,9 @@ SRCS+=	citrus_bcs.c citrus_bcs_strtol.c 
 	citrus_esdb.c citrus_hash.c citrus_iconv.c citrus_lookup.c \
 	citrus_lookup_factory.c citrus_mapper.c citrus_memstream.c \
 	citrus_mmap.c citrus_module.c citrus_none.c citrus_pivot_factory.c \
-	citrus_prop.c citrus_stdenc.c iconv.c iconv_compat.c
+	citrus_prop.c citrus_stdenc.c bsd_iconv.c iconv_compat.c
 SYM_MAPS+= ${.CURDIR}/iconv/Symbol.map
+
+.if ${MK_ICONV} == yes
+.include "${.CURDIR}/../libc_nonshared/Makefile.iconv"
+.endif

Copied: head/lib/libc/iconv/__iconv.c (from r258569, head/lib/libc_nonshared/__iconv.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/__iconv.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/__iconv.c)
@@ -0,0 +1,38 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+size_t
+__iconv(iconv_t a, const char **b, size_t *c, char **d,
+     size_t *e, __uint32_t f, size_t *g)
+{
+	return __bsd___iconv(a, b, c, d, e, f, g);
+}

Copied: head/lib/libc/iconv/__iconv_free_list.c (from r258569, head/lib/libc_nonshared/__iconv_free_list.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/__iconv_free_list.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/__iconv_free_list.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+void
+__iconv_free_list(char **a, size_t b)
+{
+	__bsd___iconv_free_list(a, b);
+}

Copied: head/lib/libc/iconv/__iconv_get_list.c (from r258569, head/lib/libc_nonshared/__iconv_get_list.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/__iconv_get_list.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/__iconv_get_list.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+int
+__iconv_get_list(char ***a, size_t *b, __iconv_bool c)
+{
+	return __bsd___iconv_get_list(a, b, c);
+}

Copied: head/lib/libc/iconv/bsd_iconv.c (from r258569, head/lib/libc/iconv/iconv.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/bsd_iconv.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc/iconv/iconv.c)
@@ -0,0 +1,318 @@
+/* $FreeBSD$ */
+/* $NetBSD: iconv.c,v 1.11 2009/03/03 16:22:33 explorer Exp $ */
+
+/*-
+ * Copyright (c) 2003 Citrus Project,
+ * Copyright (c) 2009, 2010 Gabor Kovesdan <gabor at FreeBSD.org>,
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ */
+
+#include <sys/cdefs.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <iconv.h>
+#include <limits.h>
+#include <paths.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "citrus_types.h"
+#include "citrus_module.h"
+#include "citrus_esdb.h"
+#include "citrus_hash.h"
+#include "citrus_iconv.h"
+
+#include "iconv-internal.h"
+
+#define ISBADF(_h_)	(!(_h_) || (_h_) == (iconv_t)-1)
+
+static iconv_t
+__bsd___iconv_open(const char *out, const char *in, struct _citrus_iconv *handle)
+{
+	const char *out_slashes;
+	char *out_noslashes;
+	int ret;
+
+	/*
+	 * Remove anything following a //, as these are options (like
+	 * //ignore, //translate, etc) and we just don't handle them.
+	 * This is for compatibility with software that uses these
+	 * blindly.
+	 */
+	out_slashes = strstr(out, "//");
+	if (out_slashes != NULL) {
+		out_noslashes = strndup(out, out_slashes - out);
+		if (out_noslashes == NULL) {
+			errno = ENOMEM;
+			return ((iconv_t)-1);
+		}
+		ret = _citrus_iconv_open(&handle, in, out_noslashes);
+		free(out_noslashes);
+	} else {
+		ret = _citrus_iconv_open(&handle, in, out);
+	}
+
+	if (ret) {
+		errno = ret == ENOENT ? EINVAL : ret;
+		return ((iconv_t)-1);
+	}
+
+	handle->cv_shared->ci_discard_ilseq = strcasestr(out, "//IGNORE");
+	handle->cv_shared->ci_hooks = NULL;
+
+	return ((iconv_t)(void *)handle);
+}
+
+iconv_t
+__bsd_iconv_open(const char *out, const char *in)
+{
+
+	return (__bsd___iconv_open(out, in, NULL));
+}
+
+int
+__bsd_iconv_open_into(const char *out, const char *in, iconv_allocation_t *ptr)
+{
+	struct _citrus_iconv *handle;
+
+	handle = (struct _citrus_iconv *)ptr;
+	return ((__bsd___iconv_open(out, in, handle) == (iconv_t)-1) ? -1 : 0);
+}
+
+int
+__bsd_iconv_close(iconv_t handle)
+{
+
+	if (ISBADF(handle)) {
+		errno = EBADF;
+		return (-1);
+	}
+
+	_citrus_iconv_close((struct _citrus_iconv *)(void *)handle);
+
+	return (0);
+}
+
+size_t
+__bsd_iconv(iconv_t handle, const char **in, size_t *szin, char **out, size_t *szout)
+{
+	size_t ret;
+	int err;
+
+	if (ISBADF(handle)) {
+		errno = EBADF;
+		return ((size_t)-1);
+	}
+
+	err = _citrus_iconv_convert((struct _citrus_iconv *)(void *)handle,
+	    in, szin, out, szout, 0, &ret);
+	if (err) {
+		errno = err;
+		ret = (size_t)-1;
+	}
+
+	return (ret);
+}
+
+size_t
+__bsd___iconv(iconv_t handle, const char **in, size_t *szin, char **out,
+    size_t *szout, uint32_t flags, size_t *invalids)
+{
+	size_t ret;
+	int err;
+
+	if (ISBADF(handle)) {
+		errno = EBADF;
+		return ((size_t)-1);
+	}
+
+	err = _citrus_iconv_convert((struct _citrus_iconv *)(void *)handle,
+	    in, szin, out, szout, flags, &ret);
+	if (invalids)
+		*invalids = ret;
+	if (err) {
+		errno = err;
+		ret = (size_t)-1;
+	}
+
+	return (ret);
+}
+
+int
+__bsd___iconv_get_list(char ***rlist, size_t *rsz, bool sorted)
+{
+	int ret;
+
+	ret = _citrus_esdb_get_list(rlist, rsz, sorted);
+	if (ret) {
+		errno = ret;
+		return (-1);
+	}
+
+	return (0);
+}
+
+void
+__bsd___iconv_free_list(char **list, size_t sz)
+{
+
+	_citrus_esdb_free_list(list, sz);
+}
+
+/*
+ * GNU-compatibile non-standard interfaces.
+ */
+static int
+qsort_helper(const void *first, const void *second)
+{
+	const char * const *s1;
+	const char * const *s2;
+
+	s1 = first;
+	s2 = second;
+	return (strcmp(*s1, *s2));
+}
+
+void
+__bsd_iconvlist(int (*do_one) (unsigned int, const char * const *,
+    void *), void *data)
+{
+	char **list, **names;
+	const char * const *np;
+	char *curitem, *curkey, *slashpos;
+	size_t sz;
+	unsigned int i, j;
+
+	i = 0;
+
+	if (__bsd___iconv_get_list(&list, &sz, true))
+		list = NULL;
+	qsort((void *)list, sz, sizeof(char *), qsort_helper);
+	while (i < sz) {
+		j = 0;
+		slashpos = strchr(list[i], '/');
+		curkey = (char *)malloc(slashpos - list[i] + 2);
+		names = (char **)malloc(sz * sizeof(char *));
+		if ((curkey == NULL) || (names == NULL)) {
+			__bsd___iconv_free_list(list, sz);
+			return;
+		}
+		strlcpy(curkey, list[i], slashpos - list[i] + 1);
+		names[j++] = strdup(curkey);
+		for (; (i < sz) && (memcmp(curkey, list[i], strlen(curkey)) == 0); i++) {
+			slashpos = strchr(list[i], '/');
+			curitem = (char *)malloc(strlen(slashpos) + 1);
+			if (curitem == NULL) {
+				__bsd___iconv_free_list(list, sz);
+				return;
+			}
+			strlcpy(curitem, &slashpos[1], strlen(slashpos) + 1);
+			if (strcmp(curkey, curitem) == 0) {
+				continue;
+			}
+			names[j++] = strdup(curitem);
+		}
+		np = (const char * const *)names;
+		do_one(j, np, data);
+		free(names);
+	}
+
+	__bsd___iconv_free_list(list, sz);
+}
+
+__inline const char *
+__bsd_iconv_canonicalize(const char *name)
+{
+
+	return (_citrus_iconv_canonicalize(name));
+}
+
+int
+__bsd_iconvctl(iconv_t cd, int request, void *argument)
+{
+	struct _citrus_iconv *cv;
+	struct iconv_hooks *hooks;
+	const char *convname;
+	char src[PATH_MAX], *dst;
+	int *i;
+
+	cv = (struct _citrus_iconv *)(void *)cd;
+	hooks = (struct iconv_hooks *)argument;
+	i = (int *)argument;
+
+	if (ISBADF(cd)) {
+		errno = EBADF;
+		return (-1);
+	}
+
+	switch (request) {
+	case ICONV_TRIVIALP:
+		convname = cv->cv_shared->ci_convname;
+		dst = strchr(convname, '/');
+
+		strlcpy(src, convname, dst - convname + 1);
+		dst++;
+		if ((convname == NULL) || (src == NULL) || (dst == NULL))
+			return (-1);
+		*i = strcmp(src, dst) == 0 ? 1 : 0;
+		return (0);
+	case ICONV_GET_TRANSLITERATE:
+		*i = 1;
+		return (0);
+	case ICONV_SET_TRANSLITERATE:
+		return  ((*i == 1) ? 0 : -1);
+	case ICONV_GET_DISCARD_ILSEQ:
+		*i = cv->cv_shared->ci_discard_ilseq ? 1 : 0;
+		return (0);
+	case ICONV_SET_DISCARD_ILSEQ:
+		cv->cv_shared->ci_discard_ilseq = *i;
+		return (0);
+	case ICONV_SET_HOOKS:
+		cv->cv_shared->ci_hooks = hooks;
+		return (0);
+	case ICONV_SET_FALLBACKS:
+		errno = EOPNOTSUPP;
+		return (-1);
+	case ICONV_GET_ILSEQ_INVALID:
+		*i = cv->cv_shared->ci_ilseq_invalid ? 1 : 0;
+		return (0);
+	case ICONV_SET_ILSEQ_INVALID:
+		cv->cv_shared->ci_ilseq_invalid = *i;
+		return (0);
+	default:
+		errno = EINVAL;
+		return (-1);
+	}
+}
+
+void
+__bsd_iconv_set_relocation_prefix(const char *orig_prefix __unused,
+    const char *curr_prefix __unused)
+{
+
+}

Copied: head/lib/libc/iconv/iconv.c (from r258569, head/lib/libc_nonshared/iconv.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv.c)
@@ -0,0 +1,39 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+size_t
+iconv(iconv_t a, const char ** __restrict b,
+      size_t * __restrict c, char ** __restrict d,
+      size_t * __restrict e)
+{
+	return __bsd_iconv(a, b, c, d, e);
+}

Copied: head/lib/libc/iconv/iconv_canonicalize.c (from r258569, head/lib/libc_nonshared/iconv_canonicalize.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv_canonicalize.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv_canonicalize.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+const char *
+iconv_canonicalize(const char *a)
+{
+	return __bsd_iconv_canonicalize(a);
+}

Copied: head/lib/libc/iconv/iconv_close.c (from r258569, head/lib/libc_nonshared/iconv_close.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv_close.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv_close.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+int
+iconv_close(iconv_t a)
+{
+	return __bsd_iconv_close(a);
+}

Copied: head/lib/libc/iconv/iconv_open.c (from r258569, head/lib/libc_nonshared/iconv_open.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv_open.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv_open.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+iconv_t
+iconv_open(const char *a, const char *b)
+{
+	return __bsd_iconv_open(a, b);
+}

Copied: head/lib/libc/iconv/iconv_open_into.c (from r258569, head/lib/libc_nonshared/iconv_open_into.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv_open_into.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv_open_into.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+int
+iconv_open_into(const char *a, const char *b, iconv_allocation_t *c)
+{
+	return __bsd_iconv_open_into(a, b, c);
+}

Copied: head/lib/libc/iconv/iconv_set_relocation_prefix.c (from r258569, head/lib/libc_nonshared/iconv_set_relocation_prefix.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconv_set_relocation_prefix.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconv_set_relocation_prefix.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+void
+iconv_set_relocation_prefix(const char *a, const char *b)
+{
+	return __bsd_iconv_set_relocation_prefix(a, b);
+}

Copied: head/lib/libc/iconv/iconvctl.c (from r258569, head/lib/libc_nonshared/iconvctl.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconvctl.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconvctl.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+int
+iconvctl(iconv_t a, int b, void *c)
+{
+	return __bsd_iconvctl(a, b, c);
+}

Copied: head/lib/libc/iconv/iconvlist.c (from r258569, head/lib/libc_nonshared/iconvlist.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libc/iconv/iconvlist.c	Mon Nov 25 20:17:55 2013	(r258587, copy of r258569, head/lib/libc_nonshared/iconvlist.c)
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2013 Peter Wemm
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "iconv-internal.h"
+
+void
+iconvlist(int (*a) (unsigned int, const char * const *, void *), void *b)
+{
+	return __bsd_iconvlist(a, b);
+}

Modified: head/lib/libc_nonshared/Makefile
==============================================================================
--- head/lib/libc_nonshared/Makefile	Mon Nov 25 20:05:23 2013	(r258586)
+++ head/lib/libc_nonshared/Makefile	Mon Nov 25 20:17:55 2013	(r258587)
@@ -12,16 +12,17 @@ CFLAGS+=${PICFLAG} -DPIC -fvisibility=hi
 
 LIB=	c_nonshared
 
+LIBC_NONSHARED_SRCS=
+
 # So that an empty .a file doesn't cause errors.
 SRCS=	__stub.c
 
 .if ${MK_ICONV} == "yes"
-SRCS+=	__iconv.c __iconv_free_list.c __iconv_get_list.c \
-	iconv.c iconv_canonicalize.c iconv_close.c \
-	iconv_open.c iconv_open_into.c \
-	iconv_set_relocation_prefix.c iconvctl.c iconvlist.c
+.PATH: ${.CURDIR}/../libc/iconv
+.include "Makefile.iconv"
 CFLAGS+=-I${.CURDIR}/../libc/iconv
 .endif
 
-.include <bsd.lib.mk>
+SRCS+=	${LIBC_NONSHARED_SRCS}
 
+.include <bsd.lib.mk>

Copied and modified: head/lib/libc_nonshared/Makefile.iconv (from r258569, head/lib/libc_nonshared/Makefile)
==============================================================================
--- head/lib/libc_nonshared/Makefile	Mon Nov 25 17:52:16 2013	(r258569, copy source)
+++ head/lib/libc_nonshared/Makefile.iconv	Mon Nov 25 20:17:55 2013	(r258587)
@@ -1,27 +1,9 @@
 # $FreeBSD$
 
-# We're actually creating a libc_noshared.a that is PIC along side libc.so.*
-# It is used exclusively with libc.so.* - there is no need for any other
-# compile modes.
-# bsd.lib.mk doesn't have an easy way to express that.
-NO_PROFILE?=
-.include <bsd.own.mk>
-NO_PIC=	
-# -fpic on some platforms, -fPIC on others.
-CFLAGS+=${PICFLAG} -DPIC -fvisibility=hidden
-
-LIB=	c_nonshared
-
-# So that an empty .a file doesn't cause errors.
-SRCS=	__stub.c
-
 .if ${MK_ICONV} == "yes"
-SRCS+=	__iconv.c __iconv_free_list.c __iconv_get_list.c \
+LIBC_NONSHARED_SRCS+=	\
+	__iconv.c __iconv_free_list.c __iconv_get_list.c \
 	iconv.c iconv_canonicalize.c iconv_close.c \
 	iconv_open.c iconv_open_into.c \
 	iconv_set_relocation_prefix.c iconvctl.c iconvlist.c
-CFLAGS+=-I${.CURDIR}/../libc/iconv
 .endif
-
-.include <bsd.lib.mk>
-


More information about the svn-src-all mailing list