aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newlib/ChangeLog32
-rw-r--r--newlib/Makefile.am1
-rw-r--r--newlib/Makefile.in1
-rw-r--r--newlib/libc/Makefile.am4
-rw-r--r--newlib/libc/Makefile.in19
-rw-r--r--newlib/libc/argz/Makefile.am40
-rw-r--r--newlib/libc/argz/Makefile.in402
-rw-r--r--newlib/libc/argz/argz_add.c29
-rw-r--r--newlib/libc/argz/argz_add_sep.c29
-rw-r--r--newlib/libc/argz/argz_append.c24
-rw-r--r--newlib/libc/argz/argz_count.c21
-rw-r--r--newlib/libc/argz/argz_create.c46
-rw-r--r--newlib/libc/argz/argz_create_sep.c56
-rw-r--r--newlib/libc/argz/argz_delete.c37
-rw-r--r--newlib/libc/argz/argz_extract.c27
-rw-r--r--newlib/libc/argz/argz_insert.c38
-rw-r--r--newlib/libc/argz/argz_next.c33
-rw-r--r--newlib/libc/argz/argz_replace.c83
-rw-r--r--newlib/libc/argz/argz_stringify.c20
-rw-r--r--newlib/libc/argz/buf_findstr.c42
-rw-r--r--newlib/libc/argz/envz_add.c43
-rw-r--r--newlib/libc/argz/envz_entry.c43
-rw-r--r--newlib/libc/argz/envz_get.c40
-rw-r--r--newlib/libc/argz/envz_merge.c56
-rw-r--r--newlib/libc/argz/envz_remove.c34
-rw-r--r--newlib/libc/argz/envz_strip.c40
-rwxr-xr-xnewlib/libc/configure4
-rw-r--r--newlib/libc/configure.in2
-rw-r--r--newlib/libc/include/argz.h22
-rw-r--r--newlib/libc/include/envz.h16
-rw-r--r--newlib/libc/include/errno.h2
31 files changed, 1274 insertions, 12 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 6b729e9..3b160c9 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,35 @@
+2002-06-14 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * libc/argz: New directory.
+ * libc/argz/*: New files.
+ * libc/argz/argz_add.c: New file.
+ * libc/argz/argz_add_sep.c: New file.
+ * libc/argz/argz_append.c: New file.
+ * libc/argz/argz_count.c: New file.
+ * libc/argz/argz_create.c: New file.
+ * libc/argz/argz_create_sep.c: New file.
+ * libc/argz/argz_delete.c: New file.
+ * libc/argz/argz_extract.c: New file.
+ * libc/argz/argz_insert.c: New file.
+ * libc/argz/argz_next.c: New file.
+ * libc/argz/argz_replace.c: New file.
+ * libc/argz/argz_stringify.c: New file.
+ * libc/argz/buf_findstr.c: New file.
+ * libc/argz/envz_add.c: New file.
+ * libc/argz/envz_entry.c: New file.
+ * libc/argz/envz_get.c: New file.
+ * libc/argz/envz_merge.c: New file.
+ * libc/argz/envz_remove.c: New file.
+ * libc/argz/envz_strip.c: New file.
+ * libc/include/argz.h: New file.
+ * libc/include/envz.h: New file.
+ * Makefile.am (LIBC_OBJECTLISTS): Add
+ libc/argz/objectlist.awk.in.
+ * libc/Makefile.am (SUBDIRS): Add argz.
+ (SUBLIBS): Add argz/libargz.la.
+ * libc/configure.in (AC_OUTPUT): Add argz/Makefile.
+ * libc/include/errno.h: Add error_t typedef.
+
2002-06-13 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/stdlib.h: Add _Exit prototype.
diff --git a/newlib/Makefile.am b/newlib/Makefile.am
index 441162a..8fa905f 100644
--- a/newlib/Makefile.am
+++ b/newlib/Makefile.am
@@ -103,6 +103,7 @@ LIBC_OBJECTLISTS = \
$(SIGNAL_OBJECTLIST) \
$(SYSCALL_OBJECTLIST) \
$(UNIX_OBJECTLIST) \
+ libc/argz/objectlist.awk.in \
libc/stdlib/objectlist.awk.in \
libc/time/objectlist.awk.in \
libc/ctype/objectlist.awk.in \
diff --git a/newlib/Makefile.in b/newlib/Makefile.in
index 0f42661..eeac4f5 100644
--- a/newlib/Makefile.in
+++ b/newlib/Makefile.in
@@ -201,6 +201,7 @@ LIBC_OBJECTLISTS = \
$(SIGNAL_OBJECTLIST) \
$(SYSCALL_OBJECTLIST) \
$(UNIX_OBJECTLIST) \
+ libc/argz/objectlist.awk.in \
libc/stdlib/objectlist.awk.in \
libc/time/objectlist.awk.in \
libc/ctype/objectlist.awk.in \
diff --git a/newlib/libc/Makefile.am b/newlib/libc/Makefile.am
index fb8fbb5..67d32fe 100644
--- a/newlib/libc/Makefile.am
+++ b/newlib/libc/Makefile.am
@@ -20,7 +20,7 @@ endif
# The order of SUBDIRS is important for the integrated documentation.
# Do not change the order without considering the doc impact.
-SUBDIRS = stdlib ctype stdio string $(SIGNAL_SUBDIR) time locale sys reent \
+SUBDIRS = argz stdlib ctype stdio string $(SIGNAL_SUBDIR) time locale sys reent \
$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) .
noinst_DATA = $(CRT0)
@@ -28,6 +28,7 @@ noinst_DATA = $(CRT0)
if USE_LIBTOOL
noinst_LTLIBRARIES = libc.la
SUBLIBS = \
+ argz/libargz.$(aext) \
stdlib/libstdlib.$(aext) \
ctype/libctype.$(aext) \
stdio/libstdio.$(aext) \
@@ -47,6 +48,7 @@ SUBLIBS = \
else
noinst_LIBRARIES = libc.a
SUBLIBS = \
+ argz/lib.$(aext) \
stdlib/lib.$(aext) \
ctype/lib.$(aext) \
stdio/lib.$(aext) \
diff --git a/newlib/libc/Makefile.in b/newlib/libc/Makefile.in
index e9e554b..9952b6a 100644
--- a/newlib/libc/Makefile.in
+++ b/newlib/libc/Makefile.in
@@ -115,7 +115,7 @@ AUTOMAKE_OPTIONS = cygnus
# The order of SUBDIRS is important for the integrated documentation.
# Do not change the order without considering the doc impact.
-SUBDIRS = stdlib ctype stdio string $(SIGNAL_SUBDIR) time locale sys reent \
+SUBDIRS = argz stdlib ctype stdio string $(SIGNAL_SUBDIR) time locale sys reent \
$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) .
@@ -123,6 +123,7 @@ noinst_DATA = $(CRT0)
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = @USE_LIBTOOL_TRUE@libc.la
@USE_LIBTOOL_TRUE@SUBLIBS = @USE_LIBTOOL_TRUE@\
+@USE_LIBTOOL_TRUE@ argz/libargz.$(aext) \
@USE_LIBTOOL_TRUE@ stdlib/libstdlib.$(aext) \
@USE_LIBTOOL_TRUE@ ctype/libctype.$(aext) \
@USE_LIBTOOL_TRUE@ stdio/libstdio.$(aext) \
@@ -140,6 +141,7 @@ noinst_DATA = $(CRT0)
@USE_LIBTOOL_TRUE@ $(LIBC_POSIX_LIB) \
@USE_LIBTOOL_TRUE@ $(LIBC_SYSCALL_LIB)
@USE_LIBTOOL_FALSE@SUBLIBS = @USE_LIBTOOL_FALSE@\
+@USE_LIBTOOL_FALSE@ argz/lib.$(aext) \
@USE_LIBTOOL_FALSE@ stdlib/lib.$(aext) \
@USE_LIBTOOL_FALSE@ ctype/lib.$(aext) \
@USE_LIBTOOL_FALSE@ stdio/lib.$(aext) \
@@ -202,11 +204,12 @@ libc_a_SOURCES = libc.a.c
libc_a_OBJECTS = libc.a.$(OBJEXT)
LTLIBRARIES = $(noinst_LTLIBRARIES)
-@USE_LIBTOOL_TRUE@libc_la_DEPENDENCIES = stdlib/libstdlib.$(aext) \
-@USE_LIBTOOL_TRUE@ctype/libctype.$(aext) stdio/libstdio.$(aext) \
-@USE_LIBTOOL_TRUE@string/libstring.$(aext) time/libtime.$(aext) \
-@USE_LIBTOOL_TRUE@locale/liblocale.$(aext) reent/libreent.$(aext) \
-@USE_LIBTOOL_TRUE@errno/liberrno.$(aext) misc/libmisc.$(aext)
+@USE_LIBTOOL_TRUE@libc_la_DEPENDENCIES = argz/libargz.$(aext) \
+@USE_LIBTOOL_TRUE@stdlib/libstdlib.$(aext) ctype/libctype.$(aext) \
+@USE_LIBTOOL_TRUE@stdio/libstdio.$(aext) string/libstring.$(aext) \
+@USE_LIBTOOL_TRUE@time/libtime.$(aext) locale/liblocale.$(aext) \
+@USE_LIBTOOL_TRUE@reent/libreent.$(aext) errno/liberrno.$(aext) \
+@USE_LIBTOOL_TRUE@misc/libmisc.$(aext)
@USE_LIBTOOL_TRUE@libc_la_OBJECTS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -227,8 +230,8 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
-DIST_SUBDIRS = stdlib ctype stdio string signal time locale sys reent \
-@extra_dir@ errno misc machine unix posix syscalls .
+DIST_SUBDIRS = argz stdlib ctype stdio string signal time locale sys \
+reent @extra_dir@ errno misc machine unix posix syscalls .
SOURCES = libc.a.c $(libc_la_SOURCES)
OBJECTS = libc.a.$(OBJEXT) $(libc_la_OBJECTS)
diff --git a/newlib/libc/argz/Makefile.am b/newlib/libc/argz/Makefile.am
new file mode 100644
index 0000000..a4c0428
--- /dev/null
+++ b/newlib/libc/argz/Makefile.am
@@ -0,0 +1,40 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+LIB_SOURCES = \
+ argz_add.c \
+ argz_add_sep.c \
+ argz_append.c \
+ argz_count.c \
+ argz_create.c \
+ argz_create_sep.c \
+ argz_delete.c \
+ argz_extract.c \
+ argz_insert.c \
+ argz_next.c \
+ argz_replace.c \
+ argz_stringify.c \
+ buf_findstr.c \
+ envz_entry.c \
+ envz_get.c \
+ envz_add.c \
+ envz_remove.c \
+ envz_merge.c \
+ envz_strip.c
+
+libargz_la_LDFLAGS = -Xcompiler -nostdlib
+
+if USE_LIBTOOL
+noinst_LTLIBRARIES = libargz.la
+libargz_la_SOURCES = $(LIB_SOURCES)
+noinst_DATA = objectlist.awk.in
+else
+noinst_LIBRARIES = lib.a
+lib_a_SOURCES = $(LIB_SOURCES)
+noinst_DATA =
+endif # USE_LIBTOOL
+
+include $(srcdir)/../../Makefile.shared
diff --git a/newlib/libc/argz/Makefile.in b/newlib/libc/argz/Makefile.in
new file mode 100644
index 0000000..f5c9d14
--- /dev/null
+++ b/newlib/libc/argz/Makefile.in
@@ -0,0 +1,402 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AR = @AR@
+AS = @AS@
+CC = @CC@
+CPP = @CPP@
+CRT0 = @CRT0@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+DLLTOOL = @DLLTOOL@
+EXEEXT = @EXEEXT@
+GCJ = @GCJ@
+GCJFLAGS = @GCJFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBC_EXTRA_DEF = @LIBC_EXTRA_DEF@
+LIBC_EXTRA_LIB = @LIBC_EXTRA_LIB@
+LIBC_MACHINE_LIB = @LIBC_MACHINE_LIB@
+LIBC_POSIX_LIB = @LIBC_POSIX_LIB@
+LIBC_SIGNAL_DEF = @LIBC_SIGNAL_DEF@
+LIBC_SIGNAL_LIB = @LIBC_SIGNAL_LIB@
+LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@
+LIBC_SYS_LIB = @LIBC_SYS_LIB@
+LIBC_UNIX_LIB = @LIBC_UNIX_LIB@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+aext = @aext@
+extra_dir = @extra_dir@
+libm_machine_dir = @libm_machine_dir@
+machine_dir = @machine_dir@
+newlib_basedir = @newlib_basedir@
+oext = @oext@
+sys_dir = @sys_dir@
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+LIB_SOURCES = \
+ argz_add.c \
+ argz_add_sep.c \
+ argz_append.c \
+ argz_count.c \
+ argz_create.c \
+ argz_create_sep.c \
+ argz_delete.c \
+ argz_extract.c \
+ argz_insert.c \
+ argz_next.c \
+ argz_replace.c \
+ argz_stringify.c \
+ buf_findstr.c \
+ envz_entry.c \
+ envz_get.c \
+ envz_add.c \
+ envz_remove.c \
+ envz_merge.c \
+ envz_strip.c
+
+
+libargz_la_LDFLAGS = -Xcompiler -nostdlib
+
+@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = @USE_LIBTOOL_TRUE@libargz.la
+@USE_LIBTOOL_TRUE@libargz_la_SOURCES = @USE_LIBTOOL_TRUE@$(LIB_SOURCES)
+@USE_LIBTOOL_TRUE@noinst_DATA = @USE_LIBTOOL_TRUE@objectlist.awk.in
+@USE_LIBTOOL_FALSE@noinst_DATA =
+@USE_LIBTOOL_FALSE@noinst_LIBRARIES = @USE_LIBTOOL_FALSE@lib.a
+@USE_LIBTOOL_FALSE@lib_a_SOURCES = @USE_LIBTOOL_FALSE@$(LIB_SOURCES)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir)
+CPPFLAGS = @CPPFLAGS@
+LIBS = @LIBS@
+lib_a_LIBADD =
+@USE_LIBTOOL_FALSE@lib_a_OBJECTS = argz_add.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_add_sep.$(OBJEXT) argz_append.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_count.$(OBJEXT) argz_create.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_create_sep.$(OBJEXT) argz_delete.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_extract.$(OBJEXT) argz_insert.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_next.$(OBJEXT) argz_replace.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@argz_stringify.$(OBJEXT) buf_findstr.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@envz_entry.$(OBJEXT) envz_get.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@envz_add.$(OBJEXT) envz_remove.$(OBJEXT) \
+@USE_LIBTOOL_FALSE@envz_merge.$(OBJEXT) envz_strip.$(OBJEXT)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+
+libargz_la_LIBADD =
+@USE_LIBTOOL_TRUE@libargz_la_OBJECTS = argz_add.lo argz_add_sep.lo \
+@USE_LIBTOOL_TRUE@argz_append.lo argz_count.lo argz_create.lo \
+@USE_LIBTOOL_TRUE@argz_create_sep.lo argz_delete.lo argz_extract.lo \
+@USE_LIBTOOL_TRUE@argz_insert.lo argz_next.lo argz_replace.lo \
+@USE_LIBTOOL_TRUE@argz_stringify.lo buf_findstr.lo envz_entry.lo \
+@USE_LIBTOOL_TRUE@envz_get.lo envz_add.lo envz_remove.lo envz_merge.lo \
+@USE_LIBTOOL_TRUE@envz_strip.lo
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DATA = $(noinst_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(lib_a_SOURCES) $(libargz_la_SOURCES)
+OBJECTS = $(lib_a_OBJECTS) $(libargz_la_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .obj .s
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(srcdir)/../../Makefile.shared
+ cd $(top_srcdir) && $(AUTOMAKE) --cygnus argz/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstLIBRARIES:
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+distclean-noinstLIBRARIES:
+
+maintainer-clean-noinstLIBRARIES:
+
+.c.o:
+ $(COMPILE) -c $<
+
+# FIXME: We should only use cygpath when building on Windows,
+# and only if it is available.
+.c.obj:
+ $(COMPILE) -c `cygpath -w $<`
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+ -rm -f *.$(OBJEXT)
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)
+ -rm -f lib.a
+ $(AR) cru lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
+ $(RANLIB) lib.a
+
+mostlyclean-noinstLTLIBRARIES:
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+
+distclean-noinstLTLIBRARIES:
+
+maintainer-clean-noinstLTLIBRARIES:
+
+libargz.la: $(libargz_la_OBJECTS) $(libargz_la_DEPENDENCIES)
+ $(LINK) $(libargz_la_LDFLAGS) $(libargz_la_OBJECTS) $(libargz_la_LIBADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = argz
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am:
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-info-am:
+install-info: install-info-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-noinstLTLIBRARIES \
+ mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstLIBRARIES clean-compile clean-libtool \
+ clean-noinstLTLIBRARIES clean-tags clean-generic \
+ mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstLIBRARIES distclean-compile \
+ distclean-libtool distclean-noinstLTLIBRARIES \
+ distclean-tags distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
+ maintainer-clean-compile maintainer-clean-libtool \
+ maintainer-clean-noinstLTLIBRARIES \
+ maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
+clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+clean-libtool maintainer-clean-libtool mostlyclean-noinstLTLIBRARIES \
+distclean-noinstLTLIBRARIES clean-noinstLTLIBRARIES \
+maintainer-clean-noinstLTLIBRARIES tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-info-am install-info \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+objectlist.awk.in: $(noinst_LTLIBRARIES)
+ -rm -f objectlist.awk.in
+ for i in `ls *.lo` ; \
+ do \
+ echo $$i `pwd`/$$i >> objectlist.awk.in ; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/newlib/libc/argz/argz_add.c b/newlib/libc/argz/argz_add.c
new file mode 100644
index 0000000..80f1951
--- /dev/null
+++ b/newlib/libc/argz/argz_add.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+error_t
+argz_add (char **argz, size_t *argz_len, const char *str)
+{
+ int len_to_add = 0;
+ size_t last = *argz_len;
+
+ if (str == NULL)
+ return 0;
+
+ len_to_add = strlen(str) + 1;
+ *argz_len += len_to_add;
+
+ if(!(*argz = (char *)realloc(*argz, *argz_len)))
+ return ENOMEM;
+
+ memcpy(*argz + last, str, len_to_add);
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_add_sep.c b/newlib/libc/argz/argz_add_sep.c
new file mode 100644
index 0000000..e175554
--- /dev/null
+++ b/newlib/libc/argz/argz_add_sep.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <argz.h>
+
+error_t
+argz_add_sep (char **argz, size_t *argz_len, const char *str, int sep)
+{
+ char *str_argz = 0;
+ size_t str_argz_len = 0;
+ size_t last = *argz_len;
+
+ argz_create_sep (str, sep, &str_argz, &str_argz_len);
+
+ *argz_len += str_argz_len;
+
+ if(!(*argz = (char *)realloc(*argz, *argz_len)))
+ return ENOMEM;
+
+ memcpy(*argz + last, str_argz, str_argz_len);
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_append.c b/newlib/libc/argz/argz_append.c
new file mode 100644
index 0000000..708bc19
--- /dev/null
+++ b/newlib/libc/argz/argz_append.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+error_t
+argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len)
+{
+ size_t last = *argz_len;
+
+ *argz_len += buf_len;
+
+ if(!(*argz = (char *)realloc(*argz, *argz_len)))
+ return ENOMEM;
+
+ memcpy(*argz + last, buf, buf_len);
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_count.c b/newlib/libc/argz/argz_count.c
new file mode 100644
index 0000000..daecd24
--- /dev/null
+++ b/newlib/libc/argz/argz_count.c
@@ -0,0 +1,21 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <sys/types.h>
+
+size_t
+argz_count (const char *argz, size_t argz_len)
+{
+ int i;
+ size_t count = 0;
+
+ for (i = 0; i < argz_len; i++)
+ {
+ if (argz[i] == '\0')
+ count++;
+ }
+ return count;
+}
diff --git a/newlib/libc/argz/argz_create.c b/newlib/libc/argz/argz_create.c
new file mode 100644
index 0000000..1708a2e
--- /dev/null
+++ b/newlib/libc/argz/argz_create.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+error_t
+argz_create (char *const argv[], char **argz, size_t *argz_len)
+{
+ int argc = 0;
+ int i = 0;
+ int len = 0;
+ char *iter;
+
+ *argz_len = 0;
+
+ if (*argv == NULL)
+ {
+ *argz = NULL;
+ return 0;
+ }
+
+ while (argv[argc])
+ {
+ *argz_len += (strlen(argv[argc]) + 1);
+ argc++;
+ }
+
+ /* There are argc strings to copy into argz. */
+ if(!(*argz = (char *)malloc(*argz_len)))
+ return ENOMEM;
+
+ iter = *argz;
+ for(i = 0; i < argc; i++)
+ {
+ len = strlen(argv[i]) + 1;
+ memcpy(iter, argv[i], len);
+ iter += len;
+ }
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_create_sep.c b/newlib/libc/argz/argz_create_sep.c
new file mode 100644
index 0000000..f8d9ef1
--- /dev/null
+++ b/newlib/libc/argz/argz_create_sep.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+error_t
+argz_create_sep (const char *string, int sep, char **argz, size_t *argz_len)
+{
+ int len = 0;
+ int i = 0;
+ int num_strings = 0;
+ char delim[2];
+ char *running = 0;
+ char *old_running = 0;
+ char *token = 0;
+ char *iter = 0;
+
+ delim[0] = sep;
+ delim[1] = '\0';
+
+ running = strdup(string);
+ old_running = running;
+
+ while ((token = strsep(&running, delim)))
+ {
+ len = strlen(token);
+ *argz_len += (len + 1);
+ num_strings++;
+ }
+
+ if(!(*argz = (char *)malloc(*argz_len)))
+ return ENOMEM;
+
+ free(old_running);
+
+ running = strdup(string);
+ old_running = running;
+
+ iter = *argz;
+ for (i = 0; i < num_strings; i++)
+ {
+ token = strsep(&running, delim);
+ len = strlen(token) + 1;
+ memcpy(iter, token, len);
+ iter += len;
+ }
+
+ free(old_running);
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_delete.c b/newlib/libc/argz/argz_delete.c
new file mode 100644
index 0000000..47134cb
--- /dev/null
+++ b/newlib/libc/argz/argz_delete.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+error_t
+argz_delete (char **argz, size_t *argz_len, char *entry)
+{
+ int len = 0;
+ char *moveto = entry;
+
+ if (entry)
+ {
+ len = strlen(entry) + 1;
+ entry += len;
+
+ memmove(moveto, entry, *argz + *argz_len - entry);
+
+ *argz_len -= len;
+
+ if(!(*argz = (char *)realloc(*argz, *argz_len)))
+ return ENOMEM;
+
+ if (*argz_len <= 0)
+ {
+ free(*argz);
+ *argz = NULL;
+ }
+ }
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_extract.c b/newlib/libc/argz/argz_extract.c
new file mode 100644
index 0000000..54c1577
--- /dev/null
+++ b/newlib/libc/argz/argz_extract.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <argz.h>
+#include <sys/types.h>
+
+void
+argz_extract (char *argz, size_t argz_len, char **argv)
+{
+ size_t i = 0;
+ int j = 0;
+ const size_t count = argz_count(argz, argz_len);
+
+ for (i = argz_len - 2; i > 0; i--)
+ {
+ if (argz[i] == '\0')
+ {
+ j++;
+ argv[count - j] = &argz[i + 1];
+ }
+ }
+ argv[0] = &argz[0];
+ argv[count] = NULL;
+}
diff --git a/newlib/libc/argz/argz_insert.c b/newlib/libc/argz/argz_insert.c
new file mode 100644
index 0000000..af16301
--- /dev/null
+++ b/newlib/libc/argz/argz_insert.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+
+error_t
+argz_insert (char **argz, size_t *argz_len, char *before, const char *entry)
+{
+ int len = 0;
+
+ if (before == NULL)
+ argz_add(argz, argz_len, entry);
+
+ if (before < *argz || before >= *argz + *argz_len)
+ return EINVAL;
+
+ while (before != *argz && before[-1])
+ before--;
+
+ len = strlen(entry) + 1;
+
+ if(!(*argz = (char *)realloc(*argz, *argz_len + len)))
+ return ENOMEM;
+
+ memmove(before + len, before, *argz + *argz_len - before);
+ memcpy(before, entry, len);
+
+ *argz_len += len;
+
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_next.c b/newlib/libc/argz/argz_next.c
new file mode 100644
index 0000000..79da847
--- /dev/null
+++ b/newlib/libc/argz/argz_next.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+char *
+argz_next (char *argz, size_t argz_len, const char *entry)
+{
+ if (entry)
+ {
+ while(*entry != '\0')
+ entry++;
+ entry++;
+
+ if (entry >= argz + argz_len)
+ return NULL;
+ else
+ return (char *) entry;
+ }
+ else
+ {
+ if (argz_len > 0)
+ return (char *) argz;
+ else
+ return NULL;
+ }
+}
diff --git a/newlib/libc/argz/argz_replace.c b/newlib/libc/argz/argz_replace.c
new file mode 100644
index 0000000..92979e6
--- /dev/null
+++ b/newlib/libc/argz/argz_replace.c
@@ -0,0 +1,83 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+
+extern int buf_findstr(const char *str, char **buf, size_t *buf_len);
+
+error_t
+argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count)
+{
+ const int str_len = strlen(str);
+ const int with_len = strlen(with);
+ const int len_diff = with_len - str_len;
+
+ char *buf_iter = *argz;
+ size_t buf_len = *argz_len;
+ char *last_iter = NULL;
+ char *new_argz = NULL;
+ size_t new_argz_len = 0;
+ char *new_argz_iter = NULL;
+
+ *replace_count = 0;
+ new_argz_len = *argz_len;
+
+ while(buf_len)
+ {
+ if(buf_findstr(str, &buf_iter, &buf_len))
+ {
+ *replace_count += 1;
+ new_argz_len += len_diff;
+ }
+ }
+
+ if (*replace_count)
+ {
+ new_argz = (char *)malloc(new_argz_len);
+
+ buf_iter = *argz;
+ buf_len = *argz_len;
+ last_iter = buf_iter;
+ new_argz_iter = new_argz;
+
+ while(buf_len)
+ {
+ if (buf_findstr(str, &buf_iter, &buf_len))
+ {
+ /* copy everything up to, but not including str, from old argz to
+ new argz. */
+ memcpy(new_argz_iter, last_iter, buf_iter - last_iter - str_len);
+ new_argz_iter += (buf_iter - last_iter - str_len);
+ /* copy replacement string. */
+ memcpy(new_argz_iter, with, with_len);
+ new_argz_iter += with_len;
+ last_iter = buf_iter;
+ }
+ }
+ /* copy everything after last occurrence of str. */
+ memcpy(new_argz_iter, last_iter, *argz + *argz_len - last_iter);
+
+ /* reallocate argz, and copy over the new value. */
+ if(!(*argz = (char *)realloc(*argz, new_argz_len)))
+ return ENOMEM;
+
+ memcpy(*argz, new_argz, new_argz_len);
+ *argz_len = new_argz_len;
+
+ if (*argz_len == 0)
+ {
+ free(*argz);
+ *argz = NULL;
+ }
+ free(new_argz);
+ }
+
+ return 0;
+}
diff --git a/newlib/libc/argz/argz_stringify.c b/newlib/libc/argz/argz_stringify.c
new file mode 100644
index 0000000..739c9e1
--- /dev/null
+++ b/newlib/libc/argz/argz_stringify.c
@@ -0,0 +1,20 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <sys/types.h>
+
+void
+argz_stringify (char *argz, size_t argz_len, int sep)
+{
+ size_t i;
+
+ /* len includes trailing \0, which we don't want to replace. */
+ for (i = 0; i < argz_len - 1; i++)
+ {
+ if (argz[i] == '\0')
+ argz[i] = sep;
+ }
+}
diff --git a/newlib/libc/argz/buf_findstr.c b/newlib/libc/argz/buf_findstr.c
new file mode 100644
index 0000000..792706e
--- /dev/null
+++ b/newlib/libc/argz/buf_findstr.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* Find string str in buffer buf of length buf_len. Point buf to character after string,
+ or set it to NULL if end of buffer is reached. Return 1 if found, 0 if not. */
+int
+buf_findstr(const char *str, const char **buf, size_t *buf_len)
+{
+ int i = 0;
+ int j = 0;
+
+ for (i = 0; i < *buf_len; i++)
+ {
+ if (str[0] == (*buf)[i])
+ {
+ j = i;
+ while (str[j - i] && (str[j - i] == (*buf)[j])) j++;
+ if(str[j - i] == '\0')
+ {
+ *buf += j;
+ *buf_len -= j;
+ return 1;
+ }
+ }
+ }
+
+ if (i == *buf_len)
+ {
+ *buf += *buf_len;
+ *buf_len = 0;
+ }
+
+ return 0;
+}
diff --git a/newlib/libc/argz/envz_add.c b/newlib/libc/argz/envz_add.c
new file mode 100644
index 0000000..75fba66
--- /dev/null
+++ b/newlib/libc/argz/envz_add.c
@@ -0,0 +1,43 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+#include <envz.h>
+
+error_t
+envz_add (char **envz, size_t *envz_len, const char *name, const char *value)
+{
+ char *concat = NULL;
+ int name_len = 0;
+ int val_len = 0;
+ int retval = 0;
+
+ envz_remove(envz, envz_len, name);
+
+ if (value)
+ {
+ name_len = strlen(name);
+ val_len = strlen(value);
+ if(!(concat = (char *) malloc(name_len + val_len + 2)))
+ return ENOMEM;
+
+ memcpy(concat, name, name_len);
+ concat[name_len] = '=';
+ memcpy(concat + name_len + 1, value, val_len + 1);
+
+ retval = argz_add(envz, envz_len, concat);
+ free(concat);
+ }
+ else
+ {
+ retval = argz_add(envz, envz_len, name);
+ }
+ return retval;
+}
diff --git a/newlib/libc/argz/envz_entry.c b/newlib/libc/argz/envz_entry.c
new file mode 100644
index 0000000..4c06f0f
--- /dev/null
+++ b/newlib/libc/argz/envz_entry.c
@@ -0,0 +1,43 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <envz.h>
+
+extern int buf_findstr(const char *str, char **buf, size_t *buf_len);
+
+char *
+envz_entry (const char *envz, size_t envz_len, const char *name)
+{
+ const char *buf_ptr = envz;
+ size_t buf_len = envz_len;
+
+ while(buf_len)
+ {
+ if (buf_findstr(name, &buf_ptr, &buf_len))
+ {
+ if (buf_ptr)
+ {
+ if (*buf_ptr == '=' || *buf_ptr == '\0')
+ {
+ buf_ptr--;
+
+ /* Move buf_ptr back to start of entry. */
+ while(*buf_ptr != '\0' && buf_ptr != envz) buf_ptr--;
+
+ if(*buf_ptr == '\0')
+ buf_ptr++;
+
+ return buf_ptr;
+ }
+ }
+ }
+ }
+ return 0;
+}
diff --git a/newlib/libc/argz/envz_get.c b/newlib/libc/argz/envz_get.c
new file mode 100644
index 0000000..dae51be
--- /dev/null
+++ b/newlib/libc/argz/envz_get.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <envz.h>
+
+extern int buf_findstr(const char *str, char **buf, size_t *buf_len);
+
+char *
+envz_get (const char *envz, size_t envz_len, const char *name)
+{
+ const char *buf_ptr = envz;
+ size_t buf_len = envz_len;
+
+ while(buf_len)
+ {
+ if (buf_findstr(name, &buf_ptr, &buf_len))
+ {
+ if (*buf_ptr == '=')
+ {
+ buf_ptr++;
+ return buf_ptr;
+ }
+ else
+ {
+ if (*buf_ptr == '\0')
+ /* NULL entry. */
+ return NULL;
+ }
+ }
+ }
+ /* No matching entries found. */
+ return NULL;
+}
diff --git a/newlib/libc/argz/envz_merge.c b/newlib/libc/argz/envz_merge.c
new file mode 100644
index 0000000..b017330
--- /dev/null
+++ b/newlib/libc/argz/envz_merge.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+#include <envz.h>
+
+error_t
+envz_merge (char **envz, size_t *envz_len, const char *envz2, size_t envz2_len, int override)
+{
+ char *entry = NULL;
+ char *name_str = NULL;
+ char *val_str = NULL;
+ char *name_iter = NULL;
+ int retval = 0;
+
+ while((entry = argz_next(envz2, envz2_len, entry)) && !retval)
+ {
+ if (!override)
+ {
+ name_str = strdup (entry);
+ name_iter = strchr(name_str, '=');
+ if(name_iter)
+ *name_iter = '\0';
+
+ if(!envz_entry(*envz, *envz_len, name_str))
+ {
+ retval = argz_add(envz, envz_len, entry);
+ }
+ free(name_str);
+ }
+ else
+ {
+ name_str = strdup (entry);
+ name_iter = strchr(name_str, '=');
+ if(name_iter)
+ {
+ *name_iter = '\0';
+ val_str = name_iter + 1;
+ }
+ else
+ {
+ val_str = NULL;
+ }
+
+ retval = envz_add(envz, envz_len, name_str, val_str);
+ }
+ }
+ return retval;
+}
diff --git a/newlib/libc/argz/envz_remove.c b/newlib/libc/argz/envz_remove.c
new file mode 100644
index 0000000..ace5479
--- /dev/null
+++ b/newlib/libc/argz/envz_remove.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+#include <envz.h>
+
+void
+envz_remove(char **envz, size_t *envz_len, const char *name)
+{
+ char *entry = NULL;
+ int len = 0;
+ entry = envz_entry (*envz, *envz_len, name);
+
+ if (entry)
+ {
+ len = strlen(entry) + 1;
+
+ /* Not the last entry. */
+ if (*envz + *envz_len != entry + len - 1)
+ {
+ memmove(entry, entry + len, *envz + *envz_len - entry - len);
+ }
+
+ *envz = (char *)realloc(*envz, *envz_len - len);
+ *envz_len -= len;
+ }
+}
diff --git a/newlib/libc/argz/envz_strip.c b/newlib/libc/argz/envz_strip.c
new file mode 100644
index 0000000..f190bef
--- /dev/null
+++ b/newlib/libc/argz/envz_strip.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdlib.h>
+#include <argz.h>
+#include <envz.h>
+
+void
+envz_strip (char **envz, size_t *envz_len)
+{
+ char *entry = 0;
+ int len = 0;
+ int null_found = 0;
+
+ while((entry = argz_next(*envz, *envz_len, entry)))
+ {
+ if(!strchr(entry, '='))
+ {
+ null_found = 1;
+ len = strlen(entry) + 1;
+ /* Make sure this is not the last entry in envz. If it is, it
+ will be chopped off by the realloc anyway.*/
+ if(*envz + *envz_len != entry + len - 1)
+ {
+ memmove(entry, entry + len, *envz + *envz_len - entry - len);
+ }
+ *envz_len -= len;
+ }
+ }
+ if(null_found)
+ {
+ *envz = (char *)realloc(*envz, *envz_len);
+ }
+}
diff --git a/newlib/libc/configure b/newlib/libc/configure
index 81d1188..b6ffacf 100755
--- a/newlib/libc/configure
+++ b/newlib/libc/configure
@@ -3143,7 +3143,7 @@ done
ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"
-trap 'rm -fr `echo "Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+trap 'rm -fr `echo "Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@@ -3285,7 +3285,7 @@ EOF
cat >> $CONFIG_STATUS <<EOF
-CONFIG_FILES=\${CONFIG_FILES-"Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile"}
+CONFIG_FILES=\${CONFIG_FILES-"Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
diff --git a/newlib/libc/configure.in b/newlib/libc/configure.in
index 0fb6603..d03681d 100644
--- a/newlib/libc/configure.in
+++ b/newlib/libc/configure.in
@@ -110,4 +110,4 @@ fi
AC_SUBST(LIBC_MACHINE_LIB)
AC_SUBST(machine_dir)
-AC_OUTPUT(Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile)
+AC_OUTPUT(Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile stdio/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile)
diff --git a/newlib/libc/include/argz.h b/newlib/libc/include/argz.h
new file mode 100644
index 0000000..76afc06
--- /dev/null
+++ b/newlib/libc/include/argz.h
@@ -0,0 +1,22 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+
+/* The newlib implementation of these functions assumes that sizeof(char) == 1. */
+error_t argz_create (char *const argv[], char **argz, size_t *argz_len);
+error_t argz_create_sep (const char *string, int sep, char **argz, size_t *argz_len);
+size_t argz_count (const char *argz, size_t argz_len);
+void argz_extract (char *argz, size_t argz_len, char **argv);
+void argz_stringify (char *argz, size_t argz_len, int sep);
+error_t argz_add (char **argz, size_t *argz_len, const char *str);
+error_t argz_add_sep (char **argz, size_t *argz_len, const char *str, int sep);
+error_t argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len);
+error_t argz_delete (char **argz, size_t *argz_len, char *entry);
+error_t argz_insert (char **argz, size_t *argz_len, char *before, const char *entry);
+char * argz_next (char *argz, size_t argz_len, const char *entry);
+error_t argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, unsigned *replace_count);
diff --git a/newlib/libc/include/envz.h b/newlib/libc/include/envz.h
new file mode 100644
index 0000000..e6a31c3
--- /dev/null
+++ b/newlib/libc/include/envz.h
@@ -0,0 +1,16 @@
+/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <errno.h>
+#include <sys/types.h>
+
+/* The newlib implementation of these functions assumes that sizeof(char) == 1. */
+char * envz_entry (const char *envz, size_t envz_len, const char *name);
+char * envz_get (const char *envz, size_t envz_len, const char *name);
+error_t envz_add (char **envz, size_t *envz_len, const char *name, const char *value);
+error_t envz_merge (char **envz, size_t *envz_len, const char *envz2, size_t envz2_len, int override);
+void envz_remove(char **envz, size_t *envz_len, const char *name);
+void envz_strip (char **envz, size_t *envz_len);
diff --git a/newlib/libc/include/errno.h b/newlib/libc/include/errno.h
index fa8efb7..8584a63 100644
--- a/newlib/libc/include/errno.h
+++ b/newlib/libc/include/errno.h
@@ -1 +1,3 @@
+typedef int error_t;
+
#include <sys/errno.h>