Add eXtensible Data Record (XDR) support
* configure.host: Build libc/xdr only on cygwin. * Makefile.am: Install xdr headers. * libc/configure.in: Support new libc/xdr subdirectory. * libc/Makefile.am: Support new libc/xdr subdirectory. * libc/include/rpc/types.h: New. * libc/include/rpc/xdr.h: New. * libc/xdr/README: New. * libc/xdr/Makefile.am: New. * libc/xdr/dummy.c: New. * libc/xdr/xdr.c: New. * libc/xdr/xdr_array.c: New. * libc/xdr/xdr_float.c: New. * libc/xdr/xdr_float_vax.c: New. * libc/xdr/xdr_mem.c: New. * libc/xdr/xdr_private.c: New. * libc/xdr/xdr_private.h: New. * libc/xdr/xdr_rec.c: New. * libc/xdr/xdr_reference.c: New. * libc/xdr/xdr_sizeof.c: New. * libc/xdr/xdr_stdio.c: New. Regenerate using ac-2.63 and am-1.11.1 * libc/xdr/Makefile.in: New. * Makefile.in: Regenerate. * libc/configure: Regenerate. * libc/Makefile.in: Regenerate. * libc/argz/Makefile.in: Regenerate. * libc/ctype/Makefile.in: Regenerate. * libc/errno/Makefile.in: Regenerate. * libc/iconv/ccs/binary/Makefile.in: Regenerate. * libc/iconv/ccs/Makefile.in: Regenerate. * libc/iconv/ces/Makefile.in: Regenerate. * libc/iconv/lib/Makefile.in: Regenerate. * libc/iconv/Makefile.in: Regenerate. * libc/locale/Makefile.in: Regenerate. * libc/misc/Makefile.in: Regenerate. * libc/posix/Makefile.in: Regenerate. * libc/reent/Makefile.in: Regenerate. * libc/search/Makefile.in: Regenerate. * libc/signal/Makefile.in: Regenerate. * libc/stdio/Makefile.in: Regenerate. * libc/stdio64/Makefile.in: Regenerate. * libc/stdlib/Makefile.in: Regenerate. * libc/string/Makefile.in: Regenerate. * libc/syscalls/Makefile.in: Regenerate. * libc/time/Makefile.in: Regenerate. * libc/unix/Makefile.in: Regenerate.
This commit is contained in:
		| @@ -1,3 +1,54 @@ | |||||||
|  | 2010-03-02  Charles Wilson  <cygwin@cwilson.fastmail.fm> | ||||||
|  |  | ||||||
|  | 	Add eXtensible Data Record (XDR) support | ||||||
|  | 	* configure.host: Build libc/xdr only on cygwin. | ||||||
|  | 	* Makefile.am: Install xdr headers. | ||||||
|  | 	* libc/configure.in: Support new libc/xdr subdirectory. | ||||||
|  | 	* libc/Makefile.am: Support new libc/xdr subdirectory. | ||||||
|  | 	* libc/include/rpc/types.h: New. | ||||||
|  | 	* libc/include/rpc/xdr.h: New. | ||||||
|  | 	* libc/xdr/README: New. | ||||||
|  | 	* libc/xdr/Makefile.am: New. | ||||||
|  | 	* libc/xdr/dummy.c: New. | ||||||
|  | 	* libc/xdr/xdr.c: New. | ||||||
|  | 	* libc/xdr/xdr_array.c: New. | ||||||
|  | 	* libc/xdr/xdr_float.c: New. | ||||||
|  | 	* libc/xdr/xdr_float_vax.c: New. | ||||||
|  | 	* libc/xdr/xdr_mem.c: New. | ||||||
|  | 	* libc/xdr/xdr_private.c: New. | ||||||
|  | 	* libc/xdr/xdr_private.h: New. | ||||||
|  | 	* libc/xdr/xdr_rec.c: New. | ||||||
|  | 	* libc/xdr/xdr_reference.c: New. | ||||||
|  | 	* libc/xdr/xdr_sizeof.c: New. | ||||||
|  | 	* libc/xdr/xdr_stdio.c: New. | ||||||
|  |  | ||||||
|  | 	Regenerate using ac-2.63 and am-1.11.1 | ||||||
|  | 	* libc/xdr/Makefile.in: New. | ||||||
|  | 	* Makefile.in: Regenerate. | ||||||
|  | 	* libc/configure: Regenerate. | ||||||
|  | 	* libc/Makefile.in: Regenerate. | ||||||
|  | 	* libc/argz/Makefile.in: Regenerate. | ||||||
|  | 	* libc/ctype/Makefile.in: Regenerate. | ||||||
|  | 	* libc/errno/Makefile.in: Regenerate. | ||||||
|  | 	* libc/iconv/ccs/binary/Makefile.in: Regenerate. | ||||||
|  | 	* libc/iconv/ccs/Makefile.in: Regenerate. | ||||||
|  | 	* libc/iconv/ces/Makefile.in: Regenerate. | ||||||
|  | 	* libc/iconv/lib/Makefile.in: Regenerate. | ||||||
|  | 	* libc/iconv/Makefile.in: Regenerate. | ||||||
|  | 	* libc/locale/Makefile.in: Regenerate. | ||||||
|  | 	* libc/misc/Makefile.in: Regenerate. | ||||||
|  | 	* libc/posix/Makefile.in: Regenerate. | ||||||
|  | 	* libc/reent/Makefile.in: Regenerate. | ||||||
|  | 	* libc/search/Makefile.in: Regenerate. | ||||||
|  | 	* libc/signal/Makefile.in: Regenerate. | ||||||
|  | 	* libc/stdio/Makefile.in: Regenerate. | ||||||
|  | 	* libc/stdio64/Makefile.in: Regenerate. | ||||||
|  | 	* libc/stdlib/Makefile.in: Regenerate. | ||||||
|  | 	* libc/string/Makefile.in: Regenerate. | ||||||
|  | 	* libc/syscalls/Makefile.in: Regenerate. | ||||||
|  | 	* libc/time/Makefile.in: Regenerate. | ||||||
|  | 	* libc/unix/Makefile.in: Regenerate. | ||||||
|  |  | ||||||
| 2010-02-26  Craig Howland <howland@LGSInnovations.com> | 2010-02-26  Craig Howland <howland@LGSInnovations.com> | ||||||
|  |  | ||||||
| 	* libm/common/s_ilogb.c:  Fix typo in comments that causes doc | 	* libm/common/s_ilogb.c:  Fix typo in comments that causes doc | ||||||
|   | |||||||
| @@ -269,6 +269,10 @@ endif | |||||||
| 	     $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \ | 	     $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \ | ||||||
| 	    else true; fi ; \ | 	    else true; fi ; \ | ||||||
| 	  done; \ | 	  done; \ | ||||||
|  | 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/rpc; \ | ||||||
|  | 	  for i in $(srcdir)/libc/include/rpc/*.h; do \ | ||||||
|  | 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/rpc/`basename $$i`; \ | ||||||
|  | 	  done; \ | ||||||
| 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/sys; \ | 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/sys; \ | ||||||
| 	  for i in $(srcdir)/libc/include/sys/*.h; do \ | 	  for i in $(srcdir)/libc/include/sys/*.h; do \ | ||||||
| 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/sys/`basename $$i`; \ | 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/sys/`basename $$i`; \ | ||||||
|   | |||||||
| @@ -974,6 +974,10 @@ install-data-local:	install-toollibLIBRARIES | |||||||
| 	     $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \ | 	     $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \ | ||||||
| 	    else true; fi ; \ | 	    else true; fi ; \ | ||||||
| 	  done; \ | 	  done; \ | ||||||
|  | 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/rpc; \ | ||||||
|  | 	  for i in $(srcdir)/libc/include/rpc/*.h; do \ | ||||||
|  | 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/rpc/`basename $$i`; \ | ||||||
|  | 	  done; \ | ||||||
| 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/sys; \ | 	  $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/sys; \ | ||||||
| 	  for i in $(srcdir)/libc/include/sys/*.h; do \ | 	  for i in $(srcdir)/libc/include/sys/*.h; do \ | ||||||
| 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/sys/`basename $$i`; \ | 	   $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/sys/`basename $$i`; \ | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ posix_dir= | |||||||
| signal_dir=signal | signal_dir=signal | ||||||
| stdio_dir=stdio | stdio_dir=stdio | ||||||
| stdio64_dir= | stdio64_dir= | ||||||
|  | xdr_dir= | ||||||
| syscall_dir= | syscall_dir= | ||||||
| unix_dir= | unix_dir= | ||||||
| mach_add_setjmp= | mach_add_setjmp= | ||||||
| @@ -349,6 +350,7 @@ case "${host}" in | |||||||
|   *-*-cygwin*) |   *-*-cygwin*) | ||||||
| 	posix_dir=posix | 	posix_dir=posix | ||||||
| 	stdio64_dir=stdio64 | 	stdio64_dir=stdio64 | ||||||
|  | 	xdr_dir=xdr | ||||||
| 	;; | 	;; | ||||||
|   *-*-netware*) |   *-*-netware*) | ||||||
| 	signal_dir= | 	signal_dir= | ||||||
|   | |||||||
| @@ -34,10 +34,15 @@ NEWLIB_ICONV_DIRS = | |||||||
| NEWLIB_ICONV_LIBS = | NEWLIB_ICONV_LIBS = | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | if HAVE_XDR_DIR | ||||||
|  | XDR_SUBDIR = xdr | ||||||
|  | endif | ||||||
|  |  | ||||||
| # The order of SUBDIRS is important for the integrated documentation. | # The order of SUBDIRS is important for the integrated documentation. | ||||||
| # Do not change the order without considering the doc impact. | # Do not change the order without considering the doc impact. | ||||||
| SUBDIRS = argz stdlib ctype search $(STDIO_SUBDIR) $(STDIO64_SUBDIR) string $(SIGNAL_SUBDIR) time locale sys reent \ | SUBDIRS = argz stdlib ctype search $(STDIO_SUBDIR) $(STDIO64_SUBDIR) string $(SIGNAL_SUBDIR) time locale sys reent \ | ||||||
| 	$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) $(NEWLIB_ICONV_DIRS) . | 	$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) $(NEWLIB_ICONV_DIRS) \ | ||||||
|  | 	$(XDR_SUBDIR) . | ||||||
|  |  | ||||||
| noinst_DATA = $(CRT0) | noinst_DATA = $(CRT0) | ||||||
|  |  | ||||||
| @@ -50,6 +55,7 @@ SUBLIBS = \ | |||||||
| 	search/libsearch.$(aext) \ | 	search/libsearch.$(aext) \ | ||||||
| 	$(LIBC_STDIO_LIB) \ | 	$(LIBC_STDIO_LIB) \ | ||||||
| 	$(LIBC_STDIO64_LIB) \ | 	$(LIBC_STDIO64_LIB) \ | ||||||
|  | 	$(LIBC_XDR_LIB) \ | ||||||
| 	string/libstring.$(aext) \ | 	string/libstring.$(aext) \ | ||||||
| 	$(LIBC_SIGNAL_LIB) \ | 	$(LIBC_SIGNAL_LIB) \ | ||||||
| 	time/libtime.$(aext) \ | 	time/libtime.$(aext) \ | ||||||
| @@ -72,6 +78,7 @@ SUBLIBS = \ | |||||||
| 	search/lib.$(aext) \ | 	search/lib.$(aext) \ | ||||||
| 	$(LIBC_STDIO_LIB) \ | 	$(LIBC_STDIO_LIB) \ | ||||||
| 	$(LIBC_STDIO64_LIB) \ | 	$(LIBC_STDIO64_LIB) \ | ||||||
|  | 	$(LIBC_XDR_LIB) \ | ||||||
| 	string/lib.$(aext) \ | 	string/lib.$(aext) \ | ||||||
| 	$(LIBC_SIGNAL_LIB) \ | 	$(LIBC_SIGNAL_LIB) \ | ||||||
| 	time/lib.$(aext) \ | 	time/lib.$(aext) \ | ||||||
| @@ -125,6 +132,7 @@ SUBDEFS = \ | |||||||
| 	ctype/stmp-def \ | 	ctype/stmp-def \ | ||||||
| 	$(LIBC_STDIO_DEF) \ | 	$(LIBC_STDIO_DEF) \ | ||||||
| 	$(LIBC_STDIO64_DEF) \ | 	$(LIBC_STDIO64_DEF) \ | ||||||
|  | 	$(LIBC_XDR_DEF) \ | ||||||
| 	string/stmp-def \ | 	string/stmp-def \ | ||||||
| 	$(LIBC_SIGNAL_DEF) \ | 	$(LIBC_SIGNAL_DEF) \ | ||||||
| 	time/stmp-def \ | 	time/stmp-def \ | ||||||
|   | |||||||
| @@ -68,19 +68,20 @@ am__DEPENDENCIES_1 = | |||||||
| @USE_LIBTOOL_FALSE@am__DEPENDENCIES_3 = argz/lib.$(aext) \ | @USE_LIBTOOL_FALSE@am__DEPENDENCIES_3 = argz/lib.$(aext) \ | ||||||
| @USE_LIBTOOL_FALSE@	stdlib/lib.$(aext) ctype/lib.$(aext) \ | @USE_LIBTOOL_FALSE@	stdlib/lib.$(aext) ctype/lib.$(aext) \ | ||||||
| @USE_LIBTOOL_FALSE@	search/lib.$(aext) $(am__DEPENDENCIES_1) \ | @USE_LIBTOOL_FALSE@	search/lib.$(aext) $(am__DEPENDENCIES_1) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) string/lib.$(aext) \ |  | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) time/lib.$(aext) \ |  | ||||||
| @USE_LIBTOOL_FALSE@	locale/lib.$(aext) reent/lib.$(aext) \ |  | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) errno/lib.$(aext) \ |  | ||||||
| @USE_LIBTOOL_FALSE@	misc/lib.$(aext) $(am__DEPENDENCIES_1) \ |  | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ | @USE_LIBTOOL_FALSE@	string/lib.$(aext) $(am__DEPENDENCIES_1) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) | @USE_LIBTOOL_FALSE@	time/lib.$(aext) locale/lib.$(aext) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	reent/lib.$(aext) $(am__DEPENDENCIES_1) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	errno/lib.$(aext) misc/lib.$(aext) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) | ||||||
| @USE_LIBTOOL_TRUE@am__DEPENDENCIES_3 = argz/libargz.$(aext) \ | @USE_LIBTOOL_TRUE@am__DEPENDENCIES_3 = argz/libargz.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	stdlib/libstdlib.$(aext) \ | @USE_LIBTOOL_TRUE@	stdlib/libstdlib.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	ctype/libctype.$(aext) \ | @USE_LIBTOOL_TRUE@	ctype/libctype.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	search/libsearch.$(aext) \ | @USE_LIBTOOL_TRUE@	search/libsearch.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | @USE_LIBTOOL_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ | ||||||
|  | @USE_LIBTOOL_TRUE@	$(am__DEPENDENCIES_1) \ | ||||||
| @USE_LIBTOOL_TRUE@	string/libstring.$(aext) \ | @USE_LIBTOOL_TRUE@	string/libstring.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	$(am__DEPENDENCIES_1) time/libtime.$(aext) \ | @USE_LIBTOOL_TRUE@	$(am__DEPENDENCIES_1) time/libtime.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	locale/liblocale.$(aext) \ | @USE_LIBTOOL_TRUE@	locale/liblocale.$(aext) \ | ||||||
| @@ -162,7 +163,7 @@ ETAGS = etags | |||||||
| CTAGS = ctags | CTAGS = ctags | ||||||
| DIST_SUBDIRS = argz stdlib ctype search stdio stdio64 string signal \ | DIST_SUBDIRS = argz stdlib ctype search stdio stdio64 string signal \ | ||||||
| 	time locale sys reent @extra_dir@ errno misc machine unix \ | 	time locale sys reent @extra_dir@ errno misc machine unix \ | ||||||
| 	posix syscalls iconv . | 	posix syscalls iconv xdr . | ||||||
| ACLOCAL = @ACLOCAL@ | ACLOCAL = @ACLOCAL@ | ||||||
| AMTAR = @AMTAR@ | AMTAR = @AMTAR@ | ||||||
| AR = @AR@ | AR = @AR@ | ||||||
| @@ -212,6 +213,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
| @@ -313,11 +316,13 @@ AUTOMAKE_OPTIONS = cygnus | |||||||
| @ENABLE_NEWLIB_ICONV_TRUE@NEWLIB_ICONV_DIRS = iconv | @ENABLE_NEWLIB_ICONV_TRUE@NEWLIB_ICONV_DIRS = iconv | ||||||
| @ENABLE_NEWLIB_ICONV_FALSE@NEWLIB_ICONV_LIBS =  | @ENABLE_NEWLIB_ICONV_FALSE@NEWLIB_ICONV_LIBS =  | ||||||
| @ENABLE_NEWLIB_ICONV_TRUE@NEWLIB_ICONV_LIBS = iconv/ces/lib.$(aext) iconv/ccs/lib.$(aext) iconv/lib/lib.$(aext) | @ENABLE_NEWLIB_ICONV_TRUE@NEWLIB_ICONV_LIBS = iconv/ces/lib.$(aext) iconv/ccs/lib.$(aext) iconv/lib/lib.$(aext) | ||||||
|  | @HAVE_XDR_DIR_TRUE@XDR_SUBDIR = xdr | ||||||
|  |  | ||||||
| # The order of SUBDIRS is important for the integrated documentation. | # The order of SUBDIRS is important for the integrated documentation. | ||||||
| # Do not change the order without considering the doc impact. | # Do not change the order without considering the doc impact. | ||||||
| SUBDIRS = argz stdlib ctype search $(STDIO_SUBDIR) $(STDIO64_SUBDIR) string $(SIGNAL_SUBDIR) time locale sys reent \ | SUBDIRS = argz stdlib ctype search $(STDIO_SUBDIR) $(STDIO64_SUBDIR) string $(SIGNAL_SUBDIR) time locale sys reent \ | ||||||
| 	$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) $(NEWLIB_ICONV_DIRS) . | 	$(extra_dir) errno misc machine $(UNIX_SUBDIR) $(POSIX_SUBDIR) $(SYSCALLS_SUBDIR) $(NEWLIB_ICONV_DIRS) \ | ||||||
|  | 	$(XDR_SUBDIR) . | ||||||
|  |  | ||||||
| noinst_DATA = $(CRT0) | noinst_DATA = $(CRT0) | ||||||
| @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libc.la | @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libc.la | ||||||
| @@ -328,6 +333,7 @@ noinst_DATA = $(CRT0) | |||||||
| @USE_LIBTOOL_FALSE@	search/lib.$(aext) \ | @USE_LIBTOOL_FALSE@	search/lib.$(aext) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(LIBC_STDIO_LIB) \ | @USE_LIBTOOL_FALSE@	$(LIBC_STDIO_LIB) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(LIBC_STDIO64_LIB) \ | @USE_LIBTOOL_FALSE@	$(LIBC_STDIO64_LIB) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	$(LIBC_XDR_LIB) \ | ||||||
| @USE_LIBTOOL_FALSE@	string/lib.$(aext) \ | @USE_LIBTOOL_FALSE@	string/lib.$(aext) \ | ||||||
| @USE_LIBTOOL_FALSE@	$(LIBC_SIGNAL_LIB) \ | @USE_LIBTOOL_FALSE@	$(LIBC_SIGNAL_LIB) \ | ||||||
| @USE_LIBTOOL_FALSE@	time/lib.$(aext) \ | @USE_LIBTOOL_FALSE@	time/lib.$(aext) \ | ||||||
| @@ -350,6 +356,7 @@ noinst_DATA = $(CRT0) | |||||||
| @USE_LIBTOOL_TRUE@	search/libsearch.$(aext) \ | @USE_LIBTOOL_TRUE@	search/libsearch.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	$(LIBC_STDIO_LIB) \ | @USE_LIBTOOL_TRUE@	$(LIBC_STDIO_LIB) \ | ||||||
| @USE_LIBTOOL_TRUE@	$(LIBC_STDIO64_LIB) \ | @USE_LIBTOOL_TRUE@	$(LIBC_STDIO64_LIB) \ | ||||||
|  | @USE_LIBTOOL_TRUE@	$(LIBC_XDR_LIB) \ | ||||||
| @USE_LIBTOOL_TRUE@	string/libstring.$(aext) \ | @USE_LIBTOOL_TRUE@	string/libstring.$(aext) \ | ||||||
| @USE_LIBTOOL_TRUE@	$(LIBC_SIGNAL_LIB) \ | @USE_LIBTOOL_TRUE@	$(LIBC_SIGNAL_LIB) \ | ||||||
| @USE_LIBTOOL_TRUE@	time/libtime.$(aext) \ | @USE_LIBTOOL_TRUE@	time/libtime.$(aext) \ | ||||||
| @@ -379,6 +386,7 @@ SUBDEFS = \ | |||||||
| 	ctype/stmp-def \ | 	ctype/stmp-def \ | ||||||
| 	$(LIBC_STDIO_DEF) \ | 	$(LIBC_STDIO_DEF) \ | ||||||
| 	$(LIBC_STDIO64_DEF) \ | 	$(LIBC_STDIO64_DEF) \ | ||||||
|  | 	$(LIBC_XDR_DEF) \ | ||||||
| 	string/stmp-def \ | 	string/stmp-def \ | ||||||
| 	$(LIBC_SIGNAL_DEF) \ | 	$(LIBC_SIGNAL_DEF) \ | ||||||
| 	time/stmp-def \ | 	time/stmp-def \ | ||||||
|   | |||||||
| @@ -159,6 +159,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								newlib/libc/configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								newlib/libc/configure
									
									
									
									
										vendored
									
									
								
							| @@ -675,6 +675,10 @@ LIBC_UNIX_LIB | |||||||
| HAVE_SYSCALL_DIR_FALSE | HAVE_SYSCALL_DIR_FALSE | ||||||
| HAVE_SYSCALL_DIR_TRUE | HAVE_SYSCALL_DIR_TRUE | ||||||
| LIBC_SYSCALL_LIB | LIBC_SYSCALL_LIB | ||||||
|  | HAVE_XDR_DIR_FALSE | ||||||
|  | HAVE_XDR_DIR_TRUE | ||||||
|  | LIBC_XDR_DEF | ||||||
|  | LIBC_XDR_LIB | ||||||
| HAVE_STDIO64_DIR_FALSE | HAVE_STDIO64_DIR_FALSE | ||||||
| HAVE_STDIO64_DIR_TRUE | HAVE_STDIO64_DIR_TRUE | ||||||
| LIBC_STDIO64_DEF | LIBC_STDIO64_DEF | ||||||
| @@ -12395,7 +12399,7 @@ else | |||||||
|   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 |   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 | ||||||
|   lt_status=$lt_dlunknown |   lt_status=$lt_dlunknown | ||||||
|   cat > conftest.$ac_ext <<_LT_EOF |   cat > conftest.$ac_ext <<_LT_EOF | ||||||
| #line 12398 "configure" | #line 12402 "configure" | ||||||
| #include "confdefs.h" | #include "confdefs.h" | ||||||
|  |  | ||||||
| #if HAVE_DLFCN_H | #if HAVE_DLFCN_H | ||||||
| @@ -12501,7 +12505,7 @@ else | |||||||
|   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 |   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 | ||||||
|   lt_status=$lt_dlunknown |   lt_status=$lt_dlunknown | ||||||
|   cat > conftest.$ac_ext <<_LT_EOF |   cat > conftest.$ac_ext <<_LT_EOF | ||||||
| #line 12504 "configure" | #line 12508 "configure" | ||||||
| #include "confdefs.h" | #include "confdefs.h" | ||||||
|  |  | ||||||
| #if HAVE_DLFCN_H | #if HAVE_DLFCN_H | ||||||
| @@ -12833,6 +12837,27 @@ else | |||||||
| fi | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | LIBC_XDR_LIB= | ||||||
|  | LIBC_XDR_DEF= | ||||||
|  | if test -n "${xdr_dir}"; then | ||||||
|  |   if test "${use_libtool}" = "yes"; then | ||||||
|  |     LIBC_XDR_LIB=${xdr_dir}/lib${xdr_dir}.${aext} | ||||||
|  |   else | ||||||
|  |     LIBC_XDR_LIB=${xdr_dir}/lib.${aext} | ||||||
|  |   fi | ||||||
|  |   LIBC_XDR_DEF=${xdr_dir}/stmp-def | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  if test x${xdr_dir} != x; then | ||||||
|  |   HAVE_XDR_DIR_TRUE= | ||||||
|  |   HAVE_XDR_DIR_FALSE='#' | ||||||
|  | else | ||||||
|  |   HAVE_XDR_DIR_TRUE='#' | ||||||
|  |   HAVE_XDR_DIR_FALSE= | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
| LIBC_SYSCALL_LIB= | LIBC_SYSCALL_LIB= | ||||||
| if test -n "${syscall_dir}"; then | if test -n "${syscall_dir}"; then | ||||||
|   if test "${use_libtool}" = "yes"; then |   if test "${use_libtool}" = "yes"; then | ||||||
| @@ -12943,7 +12968,7 @@ fi | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ac_config_files="$ac_config_files Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile search/Makefile stdio/Makefile stdio64/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile iconv/Makefile iconv/ces/Makefile iconv/ccs/Makefile iconv/ccs/binary/Makefile iconv/lib/Makefile" | ac_config_files="$ac_config_files Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile search/Makefile stdio/Makefile stdio64/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile iconv/Makefile iconv/ces/Makefile iconv/ccs/Makefile iconv/ccs/binary/Makefile iconv/lib/Makefile xdr/Makefile" | ||||||
|  |  | ||||||
| cat >confcache <<\_ACEOF | cat >confcache <<\_ACEOF | ||||||
| # This file is a shell script that caches the results of configure | # This file is a shell script that caches the results of configure | ||||||
| @@ -13191,6 +13216,13 @@ $as_echo "$as_me: error: conditional \"HAVE_STDIO64_DIR\" was never defined. | |||||||
| Usually this means the macro was only invoked conditionally." >&2;} | Usually this means the macro was only invoked conditionally." >&2;} | ||||||
|    { (exit 1); exit 1; }; } |    { (exit 1); exit 1; }; } | ||||||
| fi | fi | ||||||
|  | if test -z "${HAVE_XDR_DIR_TRUE}" && test -z "${HAVE_XDR_DIR_FALSE}"; then | ||||||
|  |   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_XDR_DIR\" was never defined. | ||||||
|  | Usually this means the macro was only invoked conditionally." >&5 | ||||||
|  | $as_echo "$as_me: error: conditional \"HAVE_XDR_DIR\" was never defined. | ||||||
|  | Usually this means the macro was only invoked conditionally." >&2;} | ||||||
|  |    { (exit 1); exit 1; }; } | ||||||
|  | fi | ||||||
| if test -z "${HAVE_SYSCALL_DIR_TRUE}" && test -z "${HAVE_SYSCALL_DIR_FALSE}"; then | if test -z "${HAVE_SYSCALL_DIR_TRUE}" && test -z "${HAVE_SYSCALL_DIR_FALSE}"; then | ||||||
|   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_SYSCALL_DIR\" was never defined. |   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_SYSCALL_DIR\" was never defined. | ||||||
| Usually this means the macro was only invoked conditionally." >&5 | Usually this means the macro was only invoked conditionally." >&5 | ||||||
| @@ -13994,6 +14026,7 @@ do | |||||||
|     "iconv/ccs/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/ccs/Makefile" ;; |     "iconv/ccs/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/ccs/Makefile" ;; | ||||||
|     "iconv/ccs/binary/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/ccs/binary/Makefile" ;; |     "iconv/ccs/binary/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/ccs/binary/Makefile" ;; | ||||||
|     "iconv/lib/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/lib/Makefile" ;; |     "iconv/lib/Makefile") CONFIG_FILES="$CONFIG_FILES iconv/lib/Makefile" ;; | ||||||
|  |     "xdr/Makefile") CONFIG_FILES="$CONFIG_FILES xdr/Makefile" ;; | ||||||
|  |  | ||||||
|   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 |   *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 | ||||||
| $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} | $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} | ||||||
|   | |||||||
| @@ -94,6 +94,20 @@ AC_SUBST(LIBC_STDIO64_LIB) | |||||||
| AC_SUBST(LIBC_STDIO64_DEF) | AC_SUBST(LIBC_STDIO64_DEF) | ||||||
| AM_CONDITIONAL(HAVE_STDIO64_DIR, test x${stdio64_dir} != x) | AM_CONDITIONAL(HAVE_STDIO64_DIR, test x${stdio64_dir} != x) | ||||||
|  |  | ||||||
|  | LIBC_XDR_LIB= | ||||||
|  | LIBC_XDR_DEF= | ||||||
|  | if test -n "${xdr_dir}"; then | ||||||
|  |   if test "${use_libtool}" = "yes"; then | ||||||
|  |     LIBC_XDR_LIB=${xdr_dir}/lib${xdr_dir}.${aext} | ||||||
|  |   else | ||||||
|  |     LIBC_XDR_LIB=${xdr_dir}/lib.${aext} | ||||||
|  |   fi | ||||||
|  |   LIBC_XDR_DEF=${xdr_dir}/stmp-def | ||||||
|  | fi | ||||||
|  | AC_SUBST(LIBC_XDR_LIB) | ||||||
|  | AC_SUBST(LIBC_XDR_DEF) | ||||||
|  | AM_CONDITIONAL(HAVE_XDR_DIR, test x${xdr_dir} != x) | ||||||
|  |  | ||||||
| LIBC_SYSCALL_LIB= | LIBC_SYSCALL_LIB= | ||||||
| if test -n "${syscall_dir}"; then | if test -n "${syscall_dir}"; then | ||||||
|   if test "${use_libtool}" = "yes"; then |   if test "${use_libtool}" = "yes"; then | ||||||
| @@ -171,5 +185,5 @@ fi | |||||||
| AC_SUBST(LIBC_MACHINE_LIB) | AC_SUBST(LIBC_MACHINE_LIB) | ||||||
| AC_SUBST(machine_dir) | AC_SUBST(machine_dir) | ||||||
|  |  | ||||||
| AC_CONFIG_FILES([Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile search/Makefile stdio/Makefile stdio64/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile iconv/Makefile iconv/ces/Makefile iconv/ccs/Makefile iconv/ccs/binary/Makefile iconv/lib/Makefile]) | AC_CONFIG_FILES([Makefile argz/Makefile ctype/Makefile errno/Makefile locale/Makefile misc/Makefile reent/Makefile search/Makefile stdio/Makefile stdio64/Makefile stdlib/Makefile string/Makefile time/Makefile posix/Makefile signal/Makefile syscalls/Makefile unix/Makefile iconv/Makefile iconv/ces/Makefile iconv/ccs/Makefile iconv/ccs/binary/Makefile iconv/lib/Makefile xdr/Makefile]) | ||||||
| AC_OUTPUT | AC_OUTPUT | ||||||
|   | |||||||
| @@ -172,6 +172,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -132,6 +132,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -138,6 +138,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -183,6 +183,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -124,6 +124,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -137,6 +137,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -130,6 +130,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
							
								
								
									
										79
									
								
								newlib/libc/include/rpc/types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								newlib/libc/include/rpc/types.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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: @(#)types.h 1.18 87/07/24 SMI | ||||||
|  |  *        from: @(#)types.h        2.3 88/08/15 4.0 RPCSRC | ||||||
|  |  *        $FreeBSD: src/include/rpc/types.h,v 1.10.6.1 2003/12/18 00:59:50 peter Exp $ | ||||||
|  |  *        $NetBSD: types.h,v 1.13 2000/06/13 01:02:44 thorpej Exp $ | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Rpc additions to <sys/types.h> | ||||||
|  |  */ | ||||||
|  | #ifndef _RPC_TYPES_H | ||||||
|  | #define _RPC_TYPES_H | ||||||
|  |  | ||||||
|  | #include <stdint.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(___int64_t_defined) | ||||||
|  | typedef u_int64_t u_quad_t; | ||||||
|  | typedef int64_t   quad_t; | ||||||
|  | #endif /* ___int64_t_defined */ | ||||||
|  | typedef int32_t   bool_t; | ||||||
|  | typedef int32_t   enum_t; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef NULL | ||||||
|  | # define NULL 0 | ||||||
|  | #endif | ||||||
|  | #define __dontcare__ -1 | ||||||
|  |  | ||||||
|  | #ifndef FALSE | ||||||
|  | # define FALSE 0 | ||||||
|  | #endif | ||||||
|  | #ifndef TRUE | ||||||
|  | # define TRUE 1 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifndef mem_alloc | ||||||
|  | #define mem_alloc(bsize)        calloc(1, bsize) | ||||||
|  | #endif | ||||||
|  | #ifndef mem_free | ||||||
|  | #define mem_free(ptr, bsize)    free(ptr) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* !_RPC_TYPES_H */ | ||||||
							
								
								
									
										379
									
								
								newlib/libc/include/rpc/xdr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										379
									
								
								newlib/libc/include/rpc/xdr.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,379 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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: @(#)xdr.h 1.19 87/04/22 SMI | ||||||
|  |  *      from: @(#)xdr.h        2.2 88/07/29 4.0 RPCSRC | ||||||
|  |  *      $FreeBSD: src/include/rpc/xdr.h,v 1.23 2003/03/07 13:19:40 nectar Exp $ | ||||||
|  |  *      $NetBSD: xdr.h,v 1.19 2000/07/17 05:00:45 matt Exp $ | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr.h, External Data Representation Serialization Routines. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifndef _RPC_XDR_H | ||||||
|  | #define _RPC_XDR_H | ||||||
|  | #include <_ansi.h> | ||||||
|  | #include <rpc/types.h> | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * XDR provides a conventional way for converting between C data | ||||||
|  |  * types and an external bit-string representation.  Library supplied | ||||||
|  |  * routines provide for the conversion on built-in C data types.  These | ||||||
|  |  * routines and utility routines defined here are used to help implement | ||||||
|  |  * a type encode/decode routine for each user-defined type. | ||||||
|  |  * | ||||||
|  |  * Each data type provides a single procedure which takes two arguments: | ||||||
|  |  * | ||||||
|  |  *        bool_t | ||||||
|  |  *        xdrproc(XDR *xdrs, <type> *argresp) | ||||||
|  |  * | ||||||
|  |  * xdrs is an instance of a XDR handle, to which or from which the data | ||||||
|  |  * type is to be converted.  argresp is a pointer to the structure to be | ||||||
|  |  * converted.  The XDR handle contains an operation field which indicates | ||||||
|  |  * which of the operations (ENCODE, DECODE * or FREE) is to be performed. | ||||||
|  |  * | ||||||
|  |  * XDR_DECODE may allocate space if the pointer argresp is null.  This | ||||||
|  |  * data can be freed with the XDR_FREE operation. | ||||||
|  |  * | ||||||
|  |  * We write only one procedure per data type to make it easy | ||||||
|  |  * to keep the encode and decode procedures for a data type consistent. | ||||||
|  |  * In many cases the same code performs all operations on a user defined type, | ||||||
|  |  * because all the hard work is done in the component type routines. | ||||||
|  |  * decode as a series of calls on the nested data types. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Xdr operations.  XDR_ENCODE causes the type to be encoded into the | ||||||
|  |  * stream.  XDR_DECODE causes the type to be extracted from the stream. | ||||||
|  |  * XDR_FREE can be used to release the space allocated by an XDR_DECODE | ||||||
|  |  * request. | ||||||
|  |  */ | ||||||
|  | enum xdr_op | ||||||
|  | { | ||||||
|  |   XDR_ENCODE = 0, | ||||||
|  |   XDR_DECODE = 1, | ||||||
|  |   XDR_FREE = 2 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * This is the number of bytes per unit of external data. | ||||||
|  |  */ | ||||||
|  | #define BYTES_PER_XDR_UNIT        (4) | ||||||
|  | #if 1 | ||||||
|  | /* faster version when BYTES_PER_XDR_UNIT is a power of two */ | ||||||
|  | # define RNDUP(x)  (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1)) | ||||||
|  | #else /* old version */ | ||||||
|  | #define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \ | ||||||
|  |     * BYTES_PER_XDR_UNIT) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The XDR handle. | ||||||
|  |  * Contains operation which is being applied to the stream, | ||||||
|  |  * an operations vector for the particular implementation (e.g. see xdr_mem.c), | ||||||
|  |  * and two private fields for the use of the particular implementation. | ||||||
|  |  */ | ||||||
|  | typedef struct __rpc_xdr | ||||||
|  | { | ||||||
|  |   enum xdr_op x_op;             /* operation; fast additional param */ | ||||||
|  |   _CONST struct xdr_ops | ||||||
|  |   { | ||||||
|  |     /* get a long from underlying stream */ | ||||||
|  |     bool_t _EXFNPTR (x_getlong, (struct __rpc_xdr *, long *)); | ||||||
|  |  | ||||||
|  |     /* put a long to " */ | ||||||
|  |     bool_t _EXFNPTR (x_putlong, (struct __rpc_xdr *, _CONST long *)); | ||||||
|  |  | ||||||
|  |     /* get some bytes from " */ | ||||||
|  |     bool_t _EXFNPTR (x_getbytes, (struct __rpc_xdr *, char *, u_int)); | ||||||
|  |  | ||||||
|  |     /* put some bytes to " */ | ||||||
|  |     bool_t _EXFNPTR (x_putbytes, (struct __rpc_xdr *, _CONST char *, u_int)); | ||||||
|  |  | ||||||
|  |     /* returns bytes off from beginning */ | ||||||
|  |     u_int _EXFNPTR (x_getpostn, (struct __rpc_xdr *)); | ||||||
|  |  | ||||||
|  |     /* lets you reposition the stream */ | ||||||
|  |     bool_t _EXFNPTR (x_setpostn, (struct __rpc_xdr *, u_int)); | ||||||
|  |  | ||||||
|  |     /* buf quick ptr to buffered data */ | ||||||
|  |     int32_t * _EXFNPTR (x_inline, (struct __rpc_xdr *, u_int)); | ||||||
|  |  | ||||||
|  |     /* free privates of this xdr_stream */ | ||||||
|  |     void _EXFNPTR (x_destroy, (struct __rpc_xdr *)); | ||||||
|  |  | ||||||
|  |     /* get an int32 from this xdr_stream */ | ||||||
|  |     bool_t _EXFNPTR (x_getint32, (struct __rpc_xdr *, int32_t *)); | ||||||
|  |  | ||||||
|  |     /* put an int32 to the underlying stream */ | ||||||
|  |     bool_t _EXFNPTR (x_putint32, (struct __rpc_xdr *, _CONST int32_t *)); | ||||||
|  |  | ||||||
|  |   } *x_ops; | ||||||
|  |   char *x_public;               /* users' data */ | ||||||
|  |   void *x_private;              /* pointer to private data */ | ||||||
|  |   char *x_base;                 /* private used for position info */ | ||||||
|  |   u_int x_handy;                /* extra private word */ | ||||||
|  | } XDR; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * A xdrproc_t exists for each data type which is to be encoded or decoded. | ||||||
|  |  * | ||||||
|  |  * The second argument to the xdrproc_t is a pointer to an opaque pointer. | ||||||
|  |  * The opaque pointer generally points to a structure of the data type | ||||||
|  |  * to be decoded.  If this pointer is 0, then the type routines should | ||||||
|  |  * allocate dynamic storage of the appropriate size and return it. | ||||||
|  |  * bool_t (*xdrproc_t)(XDR *, some_type *) | ||||||
|  |  */ | ||||||
|  | typedef bool_t _EXFNPTR(xdrproc_t, (XDR *, ...)); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Operations defined on a XDR handle | ||||||
|  |  * | ||||||
|  |  * XDR   *xdrs; | ||||||
|  |  * long  *longp; | ||||||
|  |  * char  *addr; | ||||||
|  |  * u_int  len; | ||||||
|  |  * u_int  pos; | ||||||
|  |  */ | ||||||
|  | #define XDR_GETINT32(xdrs, int32p)                      \ | ||||||
|  |         (*(xdrs)->x_ops->x_getint32)(xdrs, int32p) | ||||||
|  | #define xdr_getint32(xdrs, int32p)                      \ | ||||||
|  |         (*(xdrs)->x_ops->x_getint32)(xdrs, int32p) | ||||||
|  |  | ||||||
|  | #define XDR_PUTINT32(xdrs, int32p)                      \ | ||||||
|  |         (*(xdrs)->x_ops->x_putint32)(xdrs, int32p) | ||||||
|  | #define xdr_putint32(xdrs, int32p)                      \ | ||||||
|  |         (*(xdrs)->x_ops->x_putint32)(xdrs, int32p) | ||||||
|  |  | ||||||
|  | #define XDR_GETLONG(xdrs, longp)                        \ | ||||||
|  |     (*(xdrs)->x_ops->x_getlong)(xdrs, longp) | ||||||
|  | #define xdr_getlong(xdrs, longp)                        \ | ||||||
|  |     (*(xdrs)->x_ops->x_getlong)(xdrs, longp) | ||||||
|  |  | ||||||
|  | #define XDR_PUTLONG(xdrs, longp)                        \ | ||||||
|  |     (*(xdrs)->x_ops->x_putlong)(xdrs, longp) | ||||||
|  | #define xdr_putlong(xdrs, longp)                        \ | ||||||
|  |     (*(xdrs)->x_ops->x_putlong)(xdrs, longp) | ||||||
|  |  | ||||||
|  | #define XDR_GETBYTES(xdrs, addr, len)                   \ | ||||||
|  |     (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len) | ||||||
|  | #define xdr_getbytes(xdrs, addr, len)                   \ | ||||||
|  |     (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len) | ||||||
|  |  | ||||||
|  | #define XDR_PUTBYTES(xdrs, addr, len)                   \ | ||||||
|  |     (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len) | ||||||
|  | #define xdr_putbytes(xdrs, addr, len)                   \ | ||||||
|  |     (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len) | ||||||
|  |  | ||||||
|  | #define XDR_GETPOS(xdrs)                                \ | ||||||
|  |     (*(xdrs)->x_ops->x_getpostn)(xdrs) | ||||||
|  | #define xdr_getpos(xdrs)                                \ | ||||||
|  |     (*(xdrs)->x_ops->x_getpostn)(xdrs) | ||||||
|  |  | ||||||
|  | #define XDR_SETPOS(xdrs, pos)                           \ | ||||||
|  |     (*(xdrs)->x_ops->x_setpostn)(xdrs, pos) | ||||||
|  | #define xdr_setpos(xdrs, pos)                           \ | ||||||
|  |     (*(xdrs)->x_ops->x_setpostn)(xdrs, pos) | ||||||
|  |  | ||||||
|  | #define XDR_INLINE(xdrs, len)                           \ | ||||||
|  |     (*(xdrs)->x_ops->x_inline)(xdrs, len) | ||||||
|  | #define xdr_inline(xdrs, len)                           \ | ||||||
|  |     (*(xdrs)->x_ops->x_inline)(xdrs, len) | ||||||
|  |  | ||||||
|  | #define XDR_DESTROY(xdrs)                               \ | ||||||
|  |     do {                                                \ | ||||||
|  |         if ((xdrs)->x_ops->x_destroy)                   \ | ||||||
|  |             (*(xdrs)->x_ops->x_destroy)(xdrs);          \ | ||||||
|  |     } while (0) | ||||||
|  | #define xdr_destroy(xdrs)                               \ | ||||||
|  |     do {                                                \ | ||||||
|  |         if ((xdrs)->x_ops->x_destroy)                   \ | ||||||
|  |             (*(xdrs)->x_ops->x_destroy)(xdrs);          \ | ||||||
|  |     } while (0) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Support struct for discriminated unions. | ||||||
|  |  * You create an array of xdrdiscrim structures, terminated with | ||||||
|  |  * an entry with a null procedure pointer.  The xdr_union routine gets | ||||||
|  |  * the discriminant value and then searches the array of structures | ||||||
|  |  * for a matching value.  If a match is found the associated xdr routine | ||||||
|  |  * is called to handle that part of the union.  If there is | ||||||
|  |  * no match, then a default routine may be called. | ||||||
|  |  * If there is no match and no default routine it is an error. | ||||||
|  |  */ | ||||||
|  | #define NULL_xdrproc_t ((xdrproc_t)0) | ||||||
|  | struct xdr_discrim | ||||||
|  | { | ||||||
|  |   int value; | ||||||
|  |   xdrproc_t proc; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * In-line routines for fast encode/decode of primitive data types. | ||||||
|  |  * Caveat emptor: these use single memory cycles to get the | ||||||
|  |  * data from the underlying buffer, and will fail to operate | ||||||
|  |  * properly if the data is not aligned.  The standard way to use these | ||||||
|  |  * is to say: | ||||||
|  |  *        if ((buf = XDR_INLINE(xdrs, count)) == NULL) | ||||||
|  |  *            return (FALSE); | ||||||
|  |  *        <<< macro calls >>> | ||||||
|  |  * where ``count'' is the number of bytes of data occupied | ||||||
|  |  * by the primitive data types. | ||||||
|  |  * | ||||||
|  |  * N.B. and frozen for all time: each data type here uses 4 bytes | ||||||
|  |  * of external representation. | ||||||
|  |  */ | ||||||
|  | #define IXDR_GET_INT32(buf)           ((int32_t)ntohl((u_int32_t)*(buf)++)) | ||||||
|  | #define IXDR_PUT_INT32(buf, v)        (*(buf)++ =(int32_t)htonl((u_int32_t)v)) | ||||||
|  | #define IXDR_GET_U_INT32(buf)         ((uint32_t)IXDR_GET_INT32(buf)) | ||||||
|  | #define IXDR_PUT_U_INT32(buf, v)      IXDR_PUT_INT32((buf), ((int32_t)(v))) | ||||||
|  |  | ||||||
|  | /* Warning: inline long routines are broken for 64 bit platforms. | ||||||
|  |  * Because the other inline routines below are implemented in terms | ||||||
|  |  * of them, they are all also broken for 64 bit platforms. | ||||||
|  |  */ | ||||||
|  | #define IXDR_GET_LONG(buf)            ((long)ntohl((u_int32_t)*(buf)++)) | ||||||
|  | #define IXDR_PUT_LONG(buf, v)         (*(buf)++ =(int32_t)htonl((u_int32_t)v)) | ||||||
|  | #define IXDR_GET_U_LONG(buf)          ((u_long)IXDR_GET_LONG(buf)) | ||||||
|  | #define IXDR_PUT_U_LONG(buf, v)       IXDR_PUT_LONG((buf), (v)) | ||||||
|  |  | ||||||
|  | #define IXDR_GET_BOOL(buf)            ((bool_t)IXDR_GET_LONG(buf)) | ||||||
|  | #define IXDR_GET_ENUM(buf, t)         ((t)IXDR_GET_LONG(buf)) | ||||||
|  | #define IXDR_GET_SHORT(buf)           ((short)IXDR_GET_LONG(buf)) | ||||||
|  | #define IXDR_GET_U_SHORT(buf)         ((u_short)IXDR_GET_LONG(buf)) | ||||||
|  |  | ||||||
|  | #define IXDR_PUT_BOOL(buf, v)         IXDR_PUT_LONG((buf), (v)) | ||||||
|  | #define IXDR_PUT_ENUM(buf, v)         IXDR_PUT_LONG((buf), (v)) | ||||||
|  | #define IXDR_PUT_SHORT(buf, v)        IXDR_PUT_LONG((buf), (v)) | ||||||
|  | #define IXDR_PUT_U_SHORT(buf, v)      IXDR_PUT_LONG((buf), (v)) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * These are the "generic" xdr routines. | ||||||
|  |  */ | ||||||
|  | extern bool_t _EXFUN (xdr_void, (void)); | ||||||
|  | extern bool_t _EXFUN (xdr_short, (XDR *, short *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_short, (XDR *, u_short *)); | ||||||
|  | extern bool_t _EXFUN (xdr_int, (XDR *, int *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_int, (XDR *, u_int *)); | ||||||
|  | extern bool_t _EXFUN (xdr_long, (XDR *, long *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_long, (XDR *, u_long *)); | ||||||
|  | extern bool_t _EXFUN (xdr_int8_t, (XDR *, int8_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_uint8_t, (XDR *, uint8_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_int8_t, (XDR *, u_int8_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_int16_t, (XDR *, int16_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_uint16_t, (XDR *, uint16_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_int16_t, (XDR *, u_int16_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_int32_t, (XDR *, int32_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_uint32_t, (XDR *, uint32_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_int32_t, (XDR *, u_int32_t *)); | ||||||
|  | #if defined(___int64_t_defined) | ||||||
|  | extern bool_t _EXFUN (xdr_int64_t, (XDR *, int64_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_uint64_t, (XDR *, uint64_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_int64_t, (XDR *, u_int64_t *)); | ||||||
|  | #endif /* ___int64_t_defined */ | ||||||
|  | extern bool_t _EXFUN (xdr_bool, (XDR *, bool_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_enum, (XDR *, enum_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_array, (XDR *, char **, u_int *, u_int, u_int, xdrproc_t)); | ||||||
|  | extern bool_t _EXFUN (xdr_bytes, (XDR *, char **, u_int *, u_int)); | ||||||
|  | extern bool_t _EXFUN (xdr_opaque, (XDR *, char *, u_int)); | ||||||
|  | extern bool_t _EXFUN (xdr_string, (XDR *, char **, u_int)); | ||||||
|  | extern bool_t _EXFUN (xdr_union, (XDR *, enum_t *, char *, | ||||||
|  |                                   _CONST struct xdr_discrim *, xdrproc_t)); | ||||||
|  | extern bool_t _EXFUN (xdr_char, (XDR *, char *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_char, (XDR *, u_char *)); | ||||||
|  | extern bool_t _EXFUN (xdr_vector, (XDR *, char *, u_int, u_int, xdrproc_t)); | ||||||
|  | extern bool_t _EXFUN (xdr_float, (XDR *, float *)); | ||||||
|  | extern bool_t _EXFUN (xdr_double, (XDR *, double *)); | ||||||
|  | /* extern bool_t _EXFUN (xdr_quadruple, (XDR *, long double *)); */ | ||||||
|  | extern bool_t _EXFUN (xdr_reference, (XDR *, char **, u_int, xdrproc_t)); | ||||||
|  | extern bool_t _EXFUN (xdr_pointer, (XDR *, char **, u_int, xdrproc_t)); | ||||||
|  | extern bool_t _EXFUN (xdr_wrapstring, (XDR *, char **)); | ||||||
|  | #if defined(___int64_t_defined) | ||||||
|  | extern bool_t _EXFUN (xdr_hyper, (XDR *, quad_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_hyper, (XDR *, u_quad_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_longlong_t, (XDR *, quad_t *)); | ||||||
|  | extern bool_t _EXFUN (xdr_u_longlong_t, (XDR *, u_quad_t *)); | ||||||
|  | #endif /* ___int64_t_defined */ | ||||||
|  | extern u_long _EXFUN (xdr_sizeof, (xdrproc_t, void *)); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Common opaque bytes objects used by many rpc protocols; | ||||||
|  |  * declared here due to commonality. | ||||||
|  |  */ | ||||||
|  | #define MAX_NETOBJ_SZ 1024 | ||||||
|  | struct netobj | ||||||
|  | { | ||||||
|  |   u_int n_len; | ||||||
|  |   char *n_bytes; | ||||||
|  | }; | ||||||
|  | typedef struct netobj netobj; | ||||||
|  | extern bool_t _EXFUN (xdr_netobj, (XDR *, struct netobj *)); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * These are the public routines for the various implementations of | ||||||
|  |  * xdr streams. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* XDR using memory buffers */ | ||||||
|  | extern void _EXFUN (xdrmem_create, (XDR *, char *, u_int, enum xdr_op)); | ||||||
|  |  | ||||||
|  | /* XDR using stdio library */ | ||||||
|  | #if defined(_STDIO_H_) | ||||||
|  | extern void _EXFUN (xdrstdio_create, (XDR *, FILE *, enum xdr_op)); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* XDR pseudo records for tcp */ | ||||||
|  | extern void _EXFUN (xdrrec_create, (XDR *, u_int, u_int, void *, | ||||||
|  |                                     int _EXPARM (, (void *, void *, int)), | ||||||
|  |                                     int _EXPARM (, (void *, void *, int)))); | ||||||
|  |  | ||||||
|  | /* make end of xdr record */ | ||||||
|  | extern bool_t _EXFUN (xdrrec_endofrecord, (XDR *, bool_t)); | ||||||
|  |  | ||||||
|  | /* move to beginning of next record */ | ||||||
|  | extern bool_t _EXFUN (xdrrec_skiprecord, (XDR *)); | ||||||
|  |  | ||||||
|  | /* true if no more input */ | ||||||
|  | extern bool_t _EXFUN (xdrrec_eof, (XDR *)); | ||||||
|  | extern u_int _EXFUN (xdrrec_readbytes, (XDR *, caddr_t, u_int)); | ||||||
|  |  | ||||||
|  | /* free memory buffers for xdr */ | ||||||
|  | extern void _EXFUN (xdr_free, (xdrproc_t, void *)); | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* !_RPC_XDR_H */ | ||||||
| @@ -144,6 +144,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -133,6 +133,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -170,6 +170,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -167,6 +167,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -151,6 +151,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -132,6 +132,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -263,6 +263,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -147,6 +147,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -232,6 +232,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -199,6 +199,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -149,6 +149,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -145,6 +145,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
| @@ -152,6 +152,8 @@ LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | |||||||
| LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
| LIBC_SYS_LIB = @LIBC_SYS_LIB@ | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
| LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
| LIBOBJS = @LIBOBJS@ | LIBOBJS = @LIBOBJS@ | ||||||
| LIBS = @LIBS@ | LIBS = @LIBS@ | ||||||
| LIBTOOL = @LIBTOOL@ | LIBTOOL = @LIBTOOL@ | ||||||
|   | |||||||
							
								
								
									
										77
									
								
								newlib/libc/xdr/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								newlib/libc/xdr/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | |||||||
|  | ## Process this file with automake to generate Makefile.in | ||||||
|  |  | ||||||
|  | AUTOMAKE_OPTIONS = cygnus | ||||||
|  |  | ||||||
|  | INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) | ||||||
|  |  | ||||||
|  | GENERAL_SOURCES = \ | ||||||
|  |   xdr_private.c \ | ||||||
|  |   xdr.c \ | ||||||
|  |   xdr_float.c \ | ||||||
|  |   xdr_array.c \ | ||||||
|  |   xdr_mem.c \ | ||||||
|  |   xdr_rec.c \ | ||||||
|  |   xdr_reference.c \ | ||||||
|  |   xdr_sizeof.c | ||||||
|  |  | ||||||
|  | STDIO_SOURCES = \ | ||||||
|  |   xdr_stdio.c | ||||||
|  |  | ||||||
|  | EXTRA_SOURCES = \ | ||||||
|  |   xdr_float_vax.c | ||||||
|  |  | ||||||
|  | ## None of these functions are specified by EL/IX | ||||||
|  | if ELIX_LEVEL_1 | ||||||
|  | ELIX_SOURCES = | ||||||
|  | else | ||||||
|  | if ELIX_LEVEL_2 | ||||||
|  | ELIX_SOURCES = | ||||||
|  | else | ||||||
|  | if ELIX_LEVEL_3 | ||||||
|  | ELIX_SOURCES = | ||||||
|  | else | ||||||
|  | if ELIX_LEVEL_4 | ||||||
|  | ELIX_SOURCES = | ||||||
|  | else | ||||||
|  | if HAVE_STDIO_DIR | ||||||
|  | ELIX_SOURCES = $(GENERAL_SOURCES) $(STDIO_SOURCES) | ||||||
|  | else | ||||||
|  | ELIX_SOURCES = $(GENERAL_SOURCES) | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | EXTRA_DIST = README $(EXTRA_SOURCES) | ||||||
|  |  | ||||||
|  | libxdr_la_LDFLAGS = -Xcompiler -nostdlib | ||||||
|  |  | ||||||
|  | if USE_LIBTOOL | ||||||
|  | noinst_LTLIBRARIES = libxdr.la | ||||||
|  | libxdr_la_SOURCES = dummy.c $(ELIX_SOURCES) | ||||||
|  | noinst_DATA = objectlist.awk.in | ||||||
|  | else | ||||||
|  | noinst_LIBRARIES = lib.a | ||||||
|  | lib_a_SOURCES = dummy.c $(ELIX_SOURCES) | ||||||
|  | lib_a_CFLAGS = $(AM_CFLAGS) | ||||||
|  | noinst_DATA = | ||||||
|  | endif # USE_LIBTOOL | ||||||
|  |  | ||||||
|  | SUFFIXES = .def | ||||||
|  |  | ||||||
|  | CHEWOUT_FILES = | ||||||
|  |  | ||||||
|  | CHEW = ../../doc/makedoc -f $(srcdir)/../../doc/doc.str | ||||||
|  |  | ||||||
|  | .c.def: | ||||||
|  | 	$(CHEW) < $< > $*.def 2> $*.ref | ||||||
|  | 	touch stmp-def | ||||||
|  |  | ||||||
|  | TARGETDOC = ../tmp.texi | ||||||
|  |  | ||||||
|  | doc: $(CHEWOUT_FILES) | ||||||
|  |  | ||||||
|  | CLEANFILES = $(CHEWOUT_FILES) *.ref | ||||||
|  |  | ||||||
|  | include $(srcdir)/../../Makefile.shared | ||||||
							
								
								
									
										582
									
								
								newlib/libc/xdr/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										582
									
								
								newlib/libc/xdr/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,582 @@ | |||||||
|  | # Makefile.in generated by automake 1.11.1 from Makefile.am. | ||||||
|  | # @configure_input@ | ||||||
|  |  | ||||||
|  | # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | ||||||
|  | # 2003, 2004, 2005, 2006, 2007, 2008, 2009  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. | ||||||
|  |  | ||||||
|  | @SET_MAKE@ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | VPATH = @srcdir@ | ||||||
|  | pkgdatadir = $(datadir)/@PACKAGE@ | ||||||
|  | pkgincludedir = $(includedir)/@PACKAGE@ | ||||||
|  | pkglibdir = $(libdir)/@PACKAGE@ | ||||||
|  | pkglibexecdir = $(libexecdir)/@PACKAGE@ | ||||||
|  | am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | ||||||
|  | install_sh_DATA = $(install_sh) -c -m 644 | ||||||
|  | install_sh_PROGRAM = $(install_sh) -c | ||||||
|  | install_sh_SCRIPT = $(install_sh) -c | ||||||
|  | INSTALL_HEADER = $(INSTALL_DATA) | ||||||
|  | transform = $(program_transform_name) | ||||||
|  | NORMAL_INSTALL = : | ||||||
|  | PRE_INSTALL = : | ||||||
|  | POST_INSTALL = : | ||||||
|  | NORMAL_UNINSTALL = : | ||||||
|  | PRE_UNINSTALL = : | ||||||
|  | POST_UNINSTALL = : | ||||||
|  | build_triplet = @build@ | ||||||
|  | host_triplet = @host@ | ||||||
|  | DIST_COMMON = $(srcdir)/../../Makefile.shared $(srcdir)/Makefile.in \ | ||||||
|  | 	$(srcdir)/Makefile.am | ||||||
|  | subdir = xdr | ||||||
|  | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | ||||||
|  | am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \ | ||||||
|  | 	$(top_srcdir)/../../ltoptions.m4 \ | ||||||
|  | 	$(top_srcdir)/../../ltsugar.m4 \ | ||||||
|  | 	$(top_srcdir)/../../ltversion.m4 \ | ||||||
|  | 	$(top_srcdir)/../../lt~obsolete.m4 \ | ||||||
|  | 	$(top_srcdir)/../acinclude.m4 $(top_srcdir)/configure.in | ||||||
|  | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | ||||||
|  | 	$(ACLOCAL_M4) | ||||||
|  | mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs | ||||||
|  | CONFIG_CLEAN_FILES = | ||||||
|  | CONFIG_CLEAN_VPATH_FILES = | ||||||
|  | LIBRARIES = $(noinst_LIBRARIES) | ||||||
|  | ARFLAGS = cru | ||||||
|  | lib_a_AR = $(AR) $(ARFLAGS) | ||||||
|  | lib_a_LIBADD = | ||||||
|  | am__objects_1 = lib_a-xdr_private.$(OBJEXT) lib_a-xdr.$(OBJEXT) \ | ||||||
|  | 	lib_a-xdr_float.$(OBJEXT) lib_a-xdr_array.$(OBJEXT) \ | ||||||
|  | 	lib_a-xdr_mem.$(OBJEXT) lib_a-xdr_rec.$(OBJEXT) \ | ||||||
|  | 	lib_a-xdr_reference.$(OBJEXT) lib_a-xdr_sizeof.$(OBJEXT) \ | ||||||
|  | 	lib_a-xdr_stdio.$(OBJEXT) | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@@ELIX_LEVEL_4_FALSE@am__objects_2 = $(am__objects_1) | ||||||
|  | @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = lib_a-dummy.$(OBJEXT) \ | ||||||
|  | @USE_LIBTOOL_FALSE@	$(am__objects_2) | ||||||
|  | lib_a_OBJECTS = $(am_lib_a_OBJECTS) | ||||||
|  | LTLIBRARIES = $(noinst_LTLIBRARIES) | ||||||
|  | libxdr_la_LIBADD = | ||||||
|  | am__objects_3 = xdr_private.lo xdr.lo xdr_float.lo xdr_array.lo \ | ||||||
|  | 	xdr_mem.lo xdr_rec.lo xdr_reference.lo xdr_sizeof.lo \ | ||||||
|  | 	xdr_stdio.lo | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@@ELIX_LEVEL_4_FALSE@am__objects_4 = $(am__objects_3) | ||||||
|  | @USE_LIBTOOL_TRUE@am_libxdr_la_OBJECTS = dummy.lo $(am__objects_4) | ||||||
|  | libxdr_la_OBJECTS = $(am_libxdr_la_OBJECTS) | ||||||
|  | libxdr_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||||||
|  | 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||||||
|  | 	$(libxdr_la_LDFLAGS) $(LDFLAGS) -o $@ | ||||||
|  | @USE_LIBTOOL_TRUE@am_libxdr_la_rpath = | ||||||
|  | DEFAULT_INCLUDES = -I.@am__isrc@ | ||||||
|  | depcomp = | ||||||
|  | am__depfiles_maybe = | ||||||
|  | COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | ||||||
|  | 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | ||||||
|  | LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | ||||||
|  | 	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ | ||||||
|  | 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | ||||||
|  | CCLD = $(CC) | ||||||
|  | LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ | ||||||
|  | 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ | ||||||
|  | 	$(LDFLAGS) -o $@ | ||||||
|  | SOURCES = $(lib_a_SOURCES) $(libxdr_la_SOURCES) | ||||||
|  | DATA = $(noinst_DATA) | ||||||
|  | ETAGS = etags | ||||||
|  | CTAGS = ctags | ||||||
|  | ACLOCAL = @ACLOCAL@ | ||||||
|  | AMTAR = @AMTAR@ | ||||||
|  | AR = @AR@ | ||||||
|  | AS = @AS@ | ||||||
|  | AUTOCONF = @AUTOCONF@ | ||||||
|  | AUTOHEADER = @AUTOHEADER@ | ||||||
|  | AUTOMAKE = @AUTOMAKE@ | ||||||
|  | AWK = @AWK@ | ||||||
|  | CC = @CC@ | ||||||
|  | CCAS = @CCAS@ | ||||||
|  | CCASFLAGS = @CCASFLAGS@ | ||||||
|  | CCDEPMODE = @CCDEPMODE@ | ||||||
|  | CFLAGS = @CFLAGS@ | ||||||
|  | CPP = @CPP@ | ||||||
|  | CPPFLAGS = @CPPFLAGS@ | ||||||
|  | CRT0 = @CRT0@ | ||||||
|  | CYGPATH_W = @CYGPATH_W@ | ||||||
|  | DEFS = @DEFS@ | ||||||
|  | DEPDIR = @DEPDIR@ | ||||||
|  | DLLTOOL = @DLLTOOL@ | ||||||
|  | DSYMUTIL = @DSYMUTIL@ | ||||||
|  | DUMPBIN = @DUMPBIN@ | ||||||
|  | ECHO_C = @ECHO_C@ | ||||||
|  | ECHO_N = @ECHO_N@ | ||||||
|  | ECHO_T = @ECHO_T@ | ||||||
|  | EGREP = @EGREP@ | ||||||
|  | EXEEXT = @EXEEXT@ | ||||||
|  | FGREP = @FGREP@ | ||||||
|  | GREP = @GREP@ | ||||||
|  | INSTALL = @INSTALL@ | ||||||
|  | INSTALL_DATA = @INSTALL_DATA@ | ||||||
|  | INSTALL_PROGRAM = @INSTALL_PROGRAM@ | ||||||
|  | INSTALL_SCRIPT = @INSTALL_SCRIPT@ | ||||||
|  | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | ||||||
|  | LD = @LD@ | ||||||
|  | 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_STDIO64_DEF = @LIBC_STDIO64_DEF@ | ||||||
|  | LIBC_STDIO64_LIB = @LIBC_STDIO64_LIB@ | ||||||
|  | LIBC_STDIO_DEF = @LIBC_STDIO_DEF@ | ||||||
|  | LIBC_STDIO_LIB = @LIBC_STDIO_LIB@ | ||||||
|  | LIBC_SYSCALL_LIB = @LIBC_SYSCALL_LIB@ | ||||||
|  | LIBC_SYS_LIB = @LIBC_SYS_LIB@ | ||||||
|  | LIBC_UNIX_LIB = @LIBC_UNIX_LIB@ | ||||||
|  | LIBC_XDR_DEF = @LIBC_XDR_DEF@ | ||||||
|  | LIBC_XDR_LIB = @LIBC_XDR_LIB@ | ||||||
|  | LIBOBJS = @LIBOBJS@ | ||||||
|  | LIBS = @LIBS@ | ||||||
|  | LIBTOOL = @LIBTOOL@ | ||||||
|  | LIPO = @LIPO@ | ||||||
|  | LN_S = @LN_S@ | ||||||
|  | LTLIBOBJS = @LTLIBOBJS@ | ||||||
|  | MAINT = @MAINT@ | ||||||
|  | MAKEINFO = @MAKEINFO@ | ||||||
|  | MKDIR_P = @MKDIR_P@ | ||||||
|  | NEWLIB_CFLAGS = @NEWLIB_CFLAGS@ | ||||||
|  | NM = @NM@ | ||||||
|  | NMEDIT = @NMEDIT@ | ||||||
|  | OBJDUMP = @OBJDUMP@ | ||||||
|  | OBJEXT = @OBJEXT@ | ||||||
|  | OTOOL = @OTOOL@ | ||||||
|  | OTOOL64 = @OTOOL64@ | ||||||
|  | PACKAGE = @PACKAGE@ | ||||||
|  | PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | ||||||
|  | PACKAGE_NAME = @PACKAGE_NAME@ | ||||||
|  | PACKAGE_STRING = @PACKAGE_STRING@ | ||||||
|  | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||||||
|  | PACKAGE_VERSION = @PACKAGE_VERSION@ | ||||||
|  | PATH_SEPARATOR = @PATH_SEPARATOR@ | ||||||
|  | RANLIB = @RANLIB@ | ||||||
|  | READELF = @READELF@ | ||||||
|  | SED = @SED@ | ||||||
|  | SET_MAKE = @SET_MAKE@ | ||||||
|  | SHELL = @SHELL@ | ||||||
|  | STRIP = @STRIP@ | ||||||
|  | VERSION = @VERSION@ | ||||||
|  | abs_builddir = @abs_builddir@ | ||||||
|  | abs_srcdir = @abs_srcdir@ | ||||||
|  | abs_top_builddir = @abs_top_builddir@ | ||||||
|  | abs_top_srcdir = @abs_top_srcdir@ | ||||||
|  | ac_ct_CC = @ac_ct_CC@ | ||||||
|  | ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | ||||||
|  | aext = @aext@ | ||||||
|  | am__include = @am__include@ | ||||||
|  | am__leading_dot = @am__leading_dot@ | ||||||
|  | am__quote = @am__quote@ | ||||||
|  | am__tar = @am__tar@ | ||||||
|  | am__untar = @am__untar@ | ||||||
|  | bindir = @bindir@ | ||||||
|  | build = @build@ | ||||||
|  | build_alias = @build_alias@ | ||||||
|  | build_cpu = @build_cpu@ | ||||||
|  | build_os = @build_os@ | ||||||
|  | build_vendor = @build_vendor@ | ||||||
|  | builddir = @builddir@ | ||||||
|  | datadir = @datadir@ | ||||||
|  | datarootdir = @datarootdir@ | ||||||
|  | docdir = @docdir@ | ||||||
|  | dvidir = @dvidir@ | ||||||
|  | exec_prefix = @exec_prefix@ | ||||||
|  | extra_dir = @extra_dir@ | ||||||
|  | host = @host@ | ||||||
|  | host_alias = @host_alias@ | ||||||
|  | host_cpu = @host_cpu@ | ||||||
|  | host_os = @host_os@ | ||||||
|  | host_vendor = @host_vendor@ | ||||||
|  | htmldir = @htmldir@ | ||||||
|  | includedir = @includedir@ | ||||||
|  | infodir = @infodir@ | ||||||
|  | install_sh = @install_sh@ | ||||||
|  | libdir = @libdir@ | ||||||
|  | libexecdir = @libexecdir@ | ||||||
|  | libm_machine_dir = @libm_machine_dir@ | ||||||
|  | localedir = @localedir@ | ||||||
|  | localstatedir = @localstatedir@ | ||||||
|  | lpfx = @lpfx@ | ||||||
|  | machine_dir = @machine_dir@ | ||||||
|  | mandir = @mandir@ | ||||||
|  | mkdir_p = @mkdir_p@ | ||||||
|  | newlib_basedir = @newlib_basedir@ | ||||||
|  | oext = @oext@ | ||||||
|  | oldincludedir = @oldincludedir@ | ||||||
|  | pdfdir = @pdfdir@ | ||||||
|  | prefix = @prefix@ | ||||||
|  | program_transform_name = @program_transform_name@ | ||||||
|  | psdir = @psdir@ | ||||||
|  | sbindir = @sbindir@ | ||||||
|  | sharedstatedir = @sharedstatedir@ | ||||||
|  | srcdir = @srcdir@ | ||||||
|  | subdirs = @subdirs@ | ||||||
|  | sys_dir = @sys_dir@ | ||||||
|  | sysconfdir = @sysconfdir@ | ||||||
|  | target_alias = @target_alias@ | ||||||
|  | top_build_prefix = @top_build_prefix@ | ||||||
|  | top_builddir = @top_builddir@ | ||||||
|  | top_srcdir = @top_srcdir@ | ||||||
|  | AUTOMAKE_OPTIONS = cygnus | ||||||
|  | INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) | ||||||
|  | GENERAL_SOURCES = \ | ||||||
|  |   xdr_private.c \ | ||||||
|  |   xdr.c \ | ||||||
|  |   xdr_float.c \ | ||||||
|  |   xdr_array.c \ | ||||||
|  |   xdr_mem.c \ | ||||||
|  |   xdr_rec.c \ | ||||||
|  |   xdr_reference.c \ | ||||||
|  |   xdr_sizeof.c \ | ||||||
|  |   xdr_stdio.c | ||||||
|  |  | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@@ELIX_LEVEL_4_FALSE@ELIX_SOURCES = $(GENERAL_SOURCES) | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@@ELIX_LEVEL_4_TRUE@ELIX_SOURCES =  | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_TRUE@ELIX_SOURCES =  | ||||||
|  | @ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_TRUE@ELIX_SOURCES =  | ||||||
|  | @ELIX_LEVEL_1_TRUE@ELIX_SOURCES =  | ||||||
|  | libxdr_la_LDFLAGS = -Xcompiler -nostdlib | ||||||
|  | @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libxdr.la | ||||||
|  | @USE_LIBTOOL_TRUE@libxdr_la_SOURCES = dummy.c $(ELIX_SOURCES) | ||||||
|  | @USE_LIBTOOL_FALSE@noinst_DATA =  | ||||||
|  | @USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in | ||||||
|  | @USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a | ||||||
|  | @USE_LIBTOOL_FALSE@lib_a_SOURCES = dummy.c $(ELIX_SOURCES) | ||||||
|  | @USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS) | ||||||
|  | SUFFIXES = .def | ||||||
|  | CHEWOUT_FILES =  | ||||||
|  | CHEW = ../../doc/makedoc -f $(srcdir)/../../doc/doc.str | ||||||
|  | TARGETDOC = ../tmp.texi | ||||||
|  | CLEANFILES = $(CHEWOUT_FILES) *.ref | ||||||
|  | all: all-am | ||||||
|  |  | ||||||
|  | .SUFFIXES: | ||||||
|  | .SUFFIXES: .def .c .lo .o .obj | ||||||
|  | $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../Makefile.shared $(am__configure_deps) | ||||||
|  | 	@for dep in $?; do \ | ||||||
|  | 	  case '$(am__configure_deps)' in \ | ||||||
|  | 	    *$$dep*) \ | ||||||
|  | 	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ | ||||||
|  | 	        && { if test -f $@; then exit 0; else break; fi; }; \ | ||||||
|  | 	      exit 1;; \ | ||||||
|  | 	  esac; \ | ||||||
|  | 	done; \ | ||||||
|  | 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus xdr/Makefile'; \ | ||||||
|  | 	$(am__cd) $(top_srcdir) && \ | ||||||
|  | 	  $(AUTOMAKE) --cygnus xdr/Makefile | ||||||
|  | .PRECIOUS: Makefile | ||||||
|  | Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | ||||||
|  | 	@case '$?' in \ | ||||||
|  | 	  *config.status*) \ | ||||||
|  | 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ | ||||||
|  | 	  *) \ | ||||||
|  | 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ | ||||||
|  | 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ | ||||||
|  | 	esac; | ||||||
|  |  | ||||||
|  | $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | ||||||
|  | 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||||
|  |  | ||||||
|  | $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) | ||||||
|  | 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||||
|  | $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) | ||||||
|  | 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||||||
|  | $(am__aclocal_m4_deps): | ||||||
|  |  | ||||||
|  | clean-noinstLIBRARIES: | ||||||
|  | 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) | ||||||
|  | lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)  | ||||||
|  | 	-rm -f lib.a | ||||||
|  | 	$(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD) | ||||||
|  | 	$(RANLIB) lib.a | ||||||
|  |  | ||||||
|  | clean-noinstLTLIBRARIES: | ||||||
|  | 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) | ||||||
|  | 	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ | ||||||
|  | 	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ | ||||||
|  | 	  test "$$dir" != "$$p" || dir=.; \ | ||||||
|  | 	  echo "rm -f \"$${dir}/so_locations\""; \ | ||||||
|  | 	  rm -f "$${dir}/so_locations"; \ | ||||||
|  | 	done | ||||||
|  | libxdr.la: $(libxdr_la_OBJECTS) $(libxdr_la_DEPENDENCIES)  | ||||||
|  | 	$(libxdr_la_LINK) $(am_libxdr_la_rpath) $(libxdr_la_OBJECTS) $(libxdr_la_LIBADD) $(LIBS) | ||||||
|  |  | ||||||
|  | mostlyclean-compile: | ||||||
|  | 	-rm -f *.$(OBJEXT) | ||||||
|  |  | ||||||
|  | distclean-compile: | ||||||
|  | 	-rm -f *.tab.c | ||||||
|  |  | ||||||
|  | .c.o: | ||||||
|  | 	$(COMPILE) -c $< | ||||||
|  |  | ||||||
|  | .c.obj: | ||||||
|  | 	$(COMPILE) -c `$(CYGPATH_W) '$<'` | ||||||
|  |  | ||||||
|  | .c.lo: | ||||||
|  | 	$(LTCOMPILE) -c -o $@ $< | ||||||
|  |  | ||||||
|  | lib_a-dummy.o: dummy.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c | ||||||
|  |  | ||||||
|  | lib_a-dummy.obj: dummy.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-dummy.obj `if test -f 'dummy.c'; then $(CYGPATH_W) 'dummy.c'; else $(CYGPATH_W) '$(srcdir)/dummy.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_private.o: xdr_private.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_private.o `test -f 'xdr_private.c' || echo '$(srcdir)/'`xdr_private.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_private.obj: xdr_private.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_private.obj `if test -f 'xdr_private.c'; then $(CYGPATH_W) 'xdr_private.c'; else $(CYGPATH_W) '$(srcdir)/xdr_private.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr.o: xdr.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr.o `test -f 'xdr.c' || echo '$(srcdir)/'`xdr.c | ||||||
|  |  | ||||||
|  | lib_a-xdr.obj: xdr.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr.obj `if test -f 'xdr.c'; then $(CYGPATH_W) 'xdr.c'; else $(CYGPATH_W) '$(srcdir)/xdr.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_float.o: xdr_float.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_float.o `test -f 'xdr_float.c' || echo '$(srcdir)/'`xdr_float.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_float.obj: xdr_float.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_float.obj `if test -f 'xdr_float.c'; then $(CYGPATH_W) 'xdr_float.c'; else $(CYGPATH_W) '$(srcdir)/xdr_float.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_array.o: xdr_array.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_array.o `test -f 'xdr_array.c' || echo '$(srcdir)/'`xdr_array.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_array.obj: xdr_array.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_array.obj `if test -f 'xdr_array.c'; then $(CYGPATH_W) 'xdr_array.c'; else $(CYGPATH_W) '$(srcdir)/xdr_array.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_mem.o: xdr_mem.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_mem.o `test -f 'xdr_mem.c' || echo '$(srcdir)/'`xdr_mem.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_mem.obj: xdr_mem.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_mem.obj `if test -f 'xdr_mem.c'; then $(CYGPATH_W) 'xdr_mem.c'; else $(CYGPATH_W) '$(srcdir)/xdr_mem.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_rec.o: xdr_rec.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_rec.o `test -f 'xdr_rec.c' || echo '$(srcdir)/'`xdr_rec.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_rec.obj: xdr_rec.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_rec.obj `if test -f 'xdr_rec.c'; then $(CYGPATH_W) 'xdr_rec.c'; else $(CYGPATH_W) '$(srcdir)/xdr_rec.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_reference.o: xdr_reference.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_reference.o `test -f 'xdr_reference.c' || echo '$(srcdir)/'`xdr_reference.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_reference.obj: xdr_reference.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_reference.obj `if test -f 'xdr_reference.c'; then $(CYGPATH_W) 'xdr_reference.c'; else $(CYGPATH_W) '$(srcdir)/xdr_reference.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_sizeof.o: xdr_sizeof.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_sizeof.o `test -f 'xdr_sizeof.c' || echo '$(srcdir)/'`xdr_sizeof.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_sizeof.obj: xdr_sizeof.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_sizeof.obj `if test -f 'xdr_sizeof.c'; then $(CYGPATH_W) 'xdr_sizeof.c'; else $(CYGPATH_W) '$(srcdir)/xdr_sizeof.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-xdr_stdio.o: xdr_stdio.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_stdio.o `test -f 'xdr_stdio.c' || echo '$(srcdir)/'`xdr_stdio.c | ||||||
|  |  | ||||||
|  | lib_a-xdr_stdio.obj: xdr_stdio.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-xdr_stdio.obj `if test -f 'xdr_stdio.c'; then $(CYGPATH_W) 'xdr_stdio.c'; else $(CYGPATH_W) '$(srcdir)/xdr_stdio.c'; fi` | ||||||
|  |  | ||||||
|  | mostlyclean-libtool: | ||||||
|  | 	-rm -f *.lo | ||||||
|  |  | ||||||
|  | clean-libtool: | ||||||
|  | 	-rm -rf .libs _libs | ||||||
|  |  | ||||||
|  | ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||||||
|  | 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||||||
|  | 	unique=`for i in $$list; do \ | ||||||
|  | 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||||
|  | 	  done | \ | ||||||
|  | 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||||
|  | 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||||
|  | 	mkid -fID $$unique | ||||||
|  | tags: TAGS | ||||||
|  |  | ||||||
|  | TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||||
|  | 		$(TAGS_FILES) $(LISP) | ||||||
|  | 	set x; \ | ||||||
|  | 	here=`pwd`; \ | ||||||
|  | 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||||
|  | 	unique=`for i in $$list; do \ | ||||||
|  | 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||||
|  | 	  done | \ | ||||||
|  | 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||||
|  | 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||||
|  | 	shift; \ | ||||||
|  | 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | ||||||
|  | 	  test -n "$$unique" || unique=$$empty_fix; \ | ||||||
|  | 	  if test $$# -gt 0; then \ | ||||||
|  | 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||||||
|  | 	      "$$@" $$unique; \ | ||||||
|  | 	  else \ | ||||||
|  | 	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||||||
|  | 	      $$unique; \ | ||||||
|  | 	  fi; \ | ||||||
|  | 	fi | ||||||
|  | ctags: CTAGS | ||||||
|  | CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \ | ||||||
|  | 		$(TAGS_FILES) $(LISP) | ||||||
|  | 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \ | ||||||
|  | 	unique=`for i in $$list; do \ | ||||||
|  | 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||||||
|  | 	  done | \ | ||||||
|  | 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||||||
|  | 	      END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||||||
|  | 	test -z "$(CTAGS_ARGS)$$unique" \ | ||||||
|  | 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | ||||||
|  | 	     $$unique | ||||||
|  |  | ||||||
|  | GTAGS: | ||||||
|  | 	here=`$(am__cd) $(top_builddir) && pwd` \ | ||||||
|  | 	  && $(am__cd) $(top_srcdir) \ | ||||||
|  | 	  && gtags -i $(GTAGS_ARGS) "$$here" | ||||||
|  |  | ||||||
|  | distclean-tags: | ||||||
|  | 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | ||||||
|  | check-am: | ||||||
|  | check: check-am | ||||||
|  | all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA) | ||||||
|  | installdirs: | ||||||
|  | install: install-am | ||||||
|  | install-exec: install-exec-am | ||||||
|  | install-data: install-data-am | ||||||
|  | uninstall: uninstall-am | ||||||
|  |  | ||||||
|  | install-am: all-am | ||||||
|  | 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | ||||||
|  |  | ||||||
|  | installcheck: installcheck-am | ||||||
|  | install-strip: | ||||||
|  | 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | ||||||
|  | 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | ||||||
|  | 	  `test -z '$(STRIP)' || \ | ||||||
|  | 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install | ||||||
|  | mostlyclean-generic: | ||||||
|  |  | ||||||
|  | clean-generic: | ||||||
|  | 	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) | ||||||
|  |  | ||||||
|  | distclean-generic: | ||||||
|  | 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | ||||||
|  | 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | ||||||
|  |  | ||||||
|  | maintainer-clean-generic: | ||||||
|  | 	@echo "This command is intended for maintainers to use" | ||||||
|  | 	@echo "it deletes files that may require special tools to rebuild." | ||||||
|  | clean: clean-am | ||||||
|  |  | ||||||
|  | clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ | ||||||
|  | 	clean-noinstLTLIBRARIES mostlyclean-am | ||||||
|  |  | ||||||
|  | distclean: distclean-am | ||||||
|  | 	-rm -f Makefile | ||||||
|  | distclean-am: clean-am distclean-compile distclean-generic \ | ||||||
|  | 	distclean-tags | ||||||
|  |  | ||||||
|  | dvi: dvi-am | ||||||
|  |  | ||||||
|  | dvi-am: | ||||||
|  |  | ||||||
|  | html: html-am | ||||||
|  |  | ||||||
|  | html-am: | ||||||
|  |  | ||||||
|  | info: info-am | ||||||
|  |  | ||||||
|  | info-am: | ||||||
|  |  | ||||||
|  | install-data-am: | ||||||
|  |  | ||||||
|  | install-dvi: install-dvi-am | ||||||
|  |  | ||||||
|  | install-dvi-am: | ||||||
|  |  | ||||||
|  | install-exec-am: | ||||||
|  |  | ||||||
|  | install-html: install-html-am | ||||||
|  |  | ||||||
|  | install-html-am: | ||||||
|  |  | ||||||
|  | install-info: install-info-am | ||||||
|  |  | ||||||
|  | install-info-am: | ||||||
|  |  | ||||||
|  | install-man: | ||||||
|  |  | ||||||
|  | install-pdf: install-pdf-am | ||||||
|  |  | ||||||
|  | install-pdf-am: | ||||||
|  |  | ||||||
|  | install-ps: install-ps-am | ||||||
|  |  | ||||||
|  | install-ps-am: | ||||||
|  |  | ||||||
|  | installcheck-am: | ||||||
|  |  | ||||||
|  | maintainer-clean: maintainer-clean-am | ||||||
|  | 	-rm -f Makefile | ||||||
|  | maintainer-clean-am: distclean-am maintainer-clean-generic | ||||||
|  |  | ||||||
|  | mostlyclean: mostlyclean-am | ||||||
|  |  | ||||||
|  | mostlyclean-am: mostlyclean-compile mostlyclean-generic \ | ||||||
|  | 	mostlyclean-libtool | ||||||
|  |  | ||||||
|  | pdf: pdf-am | ||||||
|  |  | ||||||
|  | pdf-am: | ||||||
|  |  | ||||||
|  | ps: ps-am | ||||||
|  |  | ||||||
|  | ps-am: | ||||||
|  |  | ||||||
|  | uninstall-am: | ||||||
|  |  | ||||||
|  | .MAKE: install-am install-strip | ||||||
|  |  | ||||||
|  | .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ | ||||||
|  | 	clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ | ||||||
|  | 	ctags distclean distclean-compile distclean-generic \ | ||||||
|  | 	distclean-libtool distclean-tags dvi dvi-am html html-am info \ | ||||||
|  | 	info-am install install-am install-data install-data-am \ | ||||||
|  | 	install-dvi install-dvi-am install-exec install-exec-am \ | ||||||
|  | 	install-html install-html-am install-info install-info-am \ | ||||||
|  | 	install-man install-pdf install-pdf-am install-ps \ | ||||||
|  | 	install-ps-am install-strip installcheck installcheck-am \ | ||||||
|  | 	installdirs maintainer-clean maintainer-clean-generic \ | ||||||
|  | 	mostlyclean mostlyclean-compile mostlyclean-generic \ | ||||||
|  | 	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ | ||||||
|  | 	uninstall-am | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .c.def: | ||||||
|  | 	$(CHEW) < $< > $*.def 2> $*.ref | ||||||
|  | 	touch stmp-def | ||||||
|  |  | ||||||
|  | doc: $(CHEWOUT_FILES) | ||||||
|  | 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: | ||||||
							
								
								
									
										192
									
								
								newlib/libc/xdr/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								newlib/libc/xdr/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,192 @@ | |||||||
|  | INTRODUCTION | ||||||
|  | ====================== | ||||||
|  | This directory contains a port of the Sun RPC code (derived | ||||||
|  | from the relicensed -- to 3-clause BSD -- implementation in | ||||||
|  | Fedora 11's libtirpc package version 0.1.10-7). It has been | ||||||
|  | adapted for newlib in the following ways: | ||||||
|  |  | ||||||
|  | 1) xdr_* functions for fixed-width integral types have been | ||||||
|  |    added, such as xdr_int32_t() and similar. The implementation | ||||||
|  |    of stream-specific x_putlong() and x_getlong() functions | ||||||
|  |    has been modified to work properly whenever possible, even | ||||||
|  |    if sizeof(long) > 32bits -- and to correctly report failure | ||||||
|  |    when that is not possible. | ||||||
|  | 2) Use of DEFUN(), EXFUN(), and various other portability | ||||||
|  |    macros. | ||||||
|  | 3) Uses of 64bit types, such as xdr_hyper, xdr_u_longlong_t, | ||||||
|  |    and xdr_int64_t, as well as the xdr-specific typedefs | ||||||
|  |    quad_t and u_quad_t, are guarded by ___int64_t_defined. | ||||||
|  | 4) Out-of-memory conditions are indicated by returning FALSE | ||||||
|  |    and setting errno = ENOMEM, rather than by printing error | ||||||
|  |    messages to stderr. (See #8, below). | ||||||
|  | 5) Only xdrstdio.c requires stdio support, and it is only | ||||||
|  |    compiled if the target supports stdio (see stdio_dir in | ||||||
|  |    configure.host) | ||||||
|  | 6) Uses a local implementation of ntohl/htonl, rather than | ||||||
|  |    one provided elsewhere. No dependency on any networking | ||||||
|  |    functions. | ||||||
|  | 7) Floating point support refactored. Currently supports | ||||||
|  |    IEEE single and double precision, and VAX single and | ||||||
|  |    double precision. | ||||||
|  |    a) Those platforms which use float to represent double | ||||||
|  |       do not provide xdr_double(). | ||||||
|  | 8) Error reporting can be customized using a private hook. | ||||||
|  |    This is described below. | ||||||
|  |  | ||||||
|  | xdr is compiled and supported only for those platforms which | ||||||
|  | set xdr_dir nonempty in configure.host. At present, the list | ||||||
|  | of platforms which do this is: | ||||||
|  |    cygwin | ||||||
|  |  | ||||||
|  |  | ||||||
|  | PORTING | ||||||
|  | ====================== | ||||||
|  | To port XDR to a new newlib target, first enable building it | ||||||
|  | by modifying configure.host.  Search for the 'case' statement | ||||||
|  | where various *_dir= variables are set, and look for your | ||||||
|  | target's entry (or add one if not present).  Set xdr_dir: | ||||||
|  |  | ||||||
|  |   *-*-myplatform*) | ||||||
|  |         xdr_dir=xdr | ||||||
|  | 	;; | ||||||
|  |  | ||||||
|  | If your platform does not use IEEE754 standard formats for | ||||||
|  | floating point values (floats, doubles) you may need to add | ||||||
|  | a new xdr_float_*.c implementation, and modify the bottom of | ||||||
|  | xdr_float.c: | ||||||
|  |  | ||||||
|  |   ... | ||||||
|  |   #elif defined(__vax__) | ||||||
|  |   #include "xdr_float_vax.c" | ||||||
|  |  +#else defined(__my_platform__) | ||||||
|  |  +#include "xdr_float_my_platform.c" | ||||||
|  |   #endif | ||||||
|  |  | ||||||
|  | You may want to customize your platform's startup objects to set | ||||||
|  | the error reporting callback for xdr (not likely, but see ERROR | ||||||
|  | MESSAGES section).  | ||||||
|  |  | ||||||
|  | You may also want to customize the memory allocation semantics | ||||||
|  | employed by the xdr routines.  As stated in the xdr.h header: | ||||||
|  |  | ||||||
|  |   XDR_DECODE may allocate space if the pointer [to the location | ||||||
|  |   at which the decoded data is to be stored] is NULL. This | ||||||
|  |   data can be freed with the XDR_FREE operation. | ||||||
|  |  | ||||||
|  | The default implementation defines the following macros in | ||||||
|  | rpc/types.h, used throughout xdr/ to deal with memory | ||||||
|  | allocation: | ||||||
|  |  | ||||||
|  |   #ifndef mem_alloc | ||||||
|  |   #define mem_alloc(bsize)        calloc(1, bsize) | ||||||
|  |   #endif | ||||||
|  |   #ifndef mem_free | ||||||
|  |   #define mem_free(ptr, bsize)    free(ptr) | ||||||
|  |   #endif | ||||||
|  |  | ||||||
|  | By arranging that these symbols are #defined to some other | ||||||
|  | memory allocation functions, different memory semantics can be | ||||||
|  | imposed. To disallow memory allocation entirely, use the | ||||||
|  | following: | ||||||
|  |  | ||||||
|  |   -D'mem_alloc(a)'=NULL -D'mem_free(a,b)'='do { ; } while(0)' | ||||||
|  |  | ||||||
|  | In this case, any operations which would otherwise require | ||||||
|  | memory to be allocated, will instead fail (return FALSE), | ||||||
|  | and set errno=ENOMEM. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ERROR MESSAGES | ||||||
|  | ====================== | ||||||
|  | This implementation of xdr provides a special hook, so that | ||||||
|  | error messages generated by xdr may be captured by a user- | ||||||
|  | defined facility. For certain error conditions, the internal | ||||||
|  | printf-like function | ||||||
|  |   xdr_warnx (fmt, ...) | ||||||
|  | is called.  However, that function simply delegates to an | ||||||
|  | internal function pointer to a callback function if set; | ||||||
|  | otherwise, xdr_warnx does nothing. | ||||||
|  |  | ||||||
|  | By setting this function pointer to a user-defined callback, | ||||||
|  | the user can enable these messages to go to a syslog, stderr, | ||||||
|  | or some other facility.  The function should match the | ||||||
|  | following typedef (see xdr_private.h): | ||||||
|  |  | ||||||
|  |   typedef void (* xdr_vprintf_t) (const char *, va_list); | ||||||
|  |  | ||||||
|  | The desired callback can be registered by calling: | ||||||
|  |  | ||||||
|  |   xdr_vprintf_t xdr_set_vprintf (xdr_vprintf_t fnptr); | ||||||
|  |  | ||||||
|  | The return value is the "old" function pointer, which may | ||||||
|  | be NULL. | ||||||
|  |  | ||||||
|  | However, neither the typedef or the registration function | ||||||
|  | are declared in the public headers. Clients wishing to use | ||||||
|  | them must either declare the necessary symbols manually, | ||||||
|  | or #include "xdr_private.h". More on this point, below. | ||||||
|  |  | ||||||
|  | For instance: | ||||||
|  |   #include <stdarg.h> | ||||||
|  |   #include <stdio.h> | ||||||
|  |   typedef void (* xdr_vprintf_t) (const char *, va_list); | ||||||
|  |   xdr_vprintf_t xdr_set_vprintf (xdr_vprintf_t fnptr); | ||||||
|  |  | ||||||
|  |   void my_vwarnx (const char * fmt, va_list ap) | ||||||
|  |   { | ||||||
|  |     (void) fprintf (stderr, fmt, ap); | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   main() | ||||||
|  |   { | ||||||
|  |     (void) xdr_set_vprintf (&my_vwarnx); | ||||||
|  |     ... | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | Will cause xdr-generated error messages to go to stderr. | ||||||
|  |  | ||||||
|  | It is not expected that end-user applications will make use | ||||||
|  | of this facility.  Rather, it is expected that IF certain | ||||||
|  | *platforms* desire that these error messages be recorded, | ||||||
|  | rather expecting client apps print error messages as | ||||||
|  | necessary, then those platforms will, in their startup | ||||||
|  | objects or static initialization, direct these messages to | ||||||
|  | a logging facility, strace debug facility, etc. | ||||||
|  |  | ||||||
|  | Therefore, the platform startup code, if part of newlib, can | ||||||
|  | #include "xdr_private.h", or simply copy the two declarations | ||||||
|  | from that file. | ||||||
|  |  | ||||||
|  | However, most newlib targets will probably be satisfied with | ||||||
|  | the default (silent) behavior. Note that the original Sun RPC, | ||||||
|  | as well as the glibc implementation, print these error messages | ||||||
|  | to stderr.  Cygwin, for greater similarity to glibc, registers | ||||||
|  | an error message handler similar to the example above, within | ||||||
|  | its startup code. | ||||||
|  |  | ||||||
|  | (*) Client apps should already check for FALSE return values; | ||||||
|  |     in this case they would then check errno and act appropriately. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | LICENSING AND PEDIGREE | ||||||
|  | ====================== | ||||||
|  | For years, the Sun RPC code, and the XDR implementation, was in | ||||||
|  | legal license limbo | ||||||
|  |   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=181493 | ||||||
|  | as its license terms, while open, were of debatable compatibility | ||||||
|  | with the GPL. In February of 2009, that changed: | ||||||
|  |   http://blogs.sun.com/webmink/entry/old_code_and_old_licenses | ||||||
|  |   http://lwn.net/Articles/319648/ | ||||||
|  |  | ||||||
|  | As documented in the libtirpc rpm.spec file from Fedora 11: | ||||||
|  | * Tue May 19 2009 Tom "spot" Callaway <xxxx@redhat.com> 0.1.10-7 | ||||||
|  |   - Replace the Sun RPC license with the BSD license, with the | ||||||
|  |     explicit permission of Sun Microsystems | ||||||
|  |  | ||||||
|  | So, in the XDR implementation from Fedora 11's libtirpc package, | ||||||
|  | after the modification above by Tom Callaway, each file carries | ||||||
|  | the 3-clause BSD license, and not the so-called "SunRPC" license. | ||||||
|  | It is from this version that the newlib implementation here was | ||||||
|  | derived, with the modifications described in the introduction, | ||||||
|  | above. | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								newlib/libc/xdr/dummy.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								newlib/libc/xdr/dummy.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | /* empty stub so there's at least one file to put in objectlist.awk.in */ | ||||||
							
								
								
									
										1041
									
								
								newlib/libc/xdr/xdr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1041
									
								
								newlib/libc/xdr/xdr.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										161
									
								
								newlib/libc/xdr/xdr_array.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								newlib/libc/xdr/xdr_array.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,161 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_array.c, Generic XDR routines impelmentation. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * These are the "non-trivial" xdr primitives used to serialize and de-serialize | ||||||
|  |  * arrays.  See xdr.h for more info on the interface to xdr. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <limits.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <errno.h> | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * XDR an array of arbitrary elements | ||||||
|  |  * *addrp is a pointer to the array, *sizep is the number of elements. | ||||||
|  |  * If addrp is NULL (*sizep * elsize) bytes are allocated. | ||||||
|  |  * elsize is the size (in bytes) of each element, and elproc is the | ||||||
|  |  * xdr procedure to call to handle each element of the array. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_array, (xdrs, addrp, sizep, maxsize, elsize, elproc), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	caddr_t * addrp _AND | ||||||
|  | 	u_int * sizep _AND | ||||||
|  | 	u_int maxsize _AND | ||||||
|  |         u_int elsize _AND | ||||||
|  | 	xdrproc_t elproc) | ||||||
|  | { | ||||||
|  |   u_int i; | ||||||
|  |   caddr_t target = *addrp; | ||||||
|  |   u_int c;                      /* the actual element count */ | ||||||
|  |   bool_t stat = TRUE; | ||||||
|  |   u_int nodesize; | ||||||
|  |  | ||||||
|  |   /* like strings, arrays are really counted arrays */ | ||||||
|  |   if (!xdr_u_int (xdrs, sizep)) | ||||||
|  |     { | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |   c = *sizep; | ||||||
|  |   if ((c > maxsize || UINT_MAX / elsize < c) && (xdrs->x_op != XDR_FREE)) | ||||||
|  |     { | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |   nodesize = c * elsize; | ||||||
|  |  | ||||||
|  |   /* | ||||||
|  |    * if we are deserializing, we may need to allocate an array. | ||||||
|  |    * We also save time by checking for a null array if we are freeing. | ||||||
|  |    */ | ||||||
|  |   if (target == NULL) | ||||||
|  |     switch (xdrs->x_op) | ||||||
|  |       { | ||||||
|  |       case XDR_DECODE: | ||||||
|  |         if (c == 0) | ||||||
|  |           return TRUE; | ||||||
|  |         *addrp = target = mem_alloc (nodesize); | ||||||
|  |         if (target == NULL) | ||||||
|  |           { | ||||||
|  |             xdr_warnx ("xdr_array: out of memory"); | ||||||
|  |             errno = ENOMEM; | ||||||
|  |             return FALSE; | ||||||
|  |           } | ||||||
|  |         memset (target, 0, nodesize); | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case XDR_FREE: | ||||||
|  |         return TRUE; | ||||||
|  |  | ||||||
|  |       case XDR_ENCODE: | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |   /* | ||||||
|  |    * now we xdr each element of array | ||||||
|  |    */ | ||||||
|  |   for (i = 0; (i < c) && stat; i++) | ||||||
|  |     { | ||||||
|  |       stat = (*elproc) (xdrs, target); | ||||||
|  |       target += elsize; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   /* | ||||||
|  |    * the array may need freeing | ||||||
|  |    */ | ||||||
|  |   if (xdrs->x_op == XDR_FREE) | ||||||
|  |     { | ||||||
|  |       mem_free (*addrp, nodesize); | ||||||
|  |       *addrp = NULL; | ||||||
|  |     } | ||||||
|  |   return (stat); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_vector(): | ||||||
|  |  * | ||||||
|  |  * XDR a fixed length array. Unlike variable-length arrays, | ||||||
|  |  * the storage of fixed length arrays is static and unfreeable. | ||||||
|  |  * > basep: base of the array | ||||||
|  |  * > size: size of the array | ||||||
|  |  * > elemsize: size of each element | ||||||
|  |  * > xdr_elem: routine to XDR each element | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_vector, (xdrs, basep, nelem, elemsize, xdr_elem), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	char *basep _AND | ||||||
|  | 	u_int nelem _AND | ||||||
|  | 	u_int elemsize _AND | ||||||
|  |         xdrproc_t xdr_elem) | ||||||
|  | { | ||||||
|  |   u_int i; | ||||||
|  |   char *elptr; | ||||||
|  |  | ||||||
|  |   elptr = basep; | ||||||
|  |   for (i = 0; i < nelem; i++) | ||||||
|  |     { | ||||||
|  |       if (!(*xdr_elem) (xdrs, elptr)) | ||||||
|  |         { | ||||||
|  |           return FALSE; | ||||||
|  |         } | ||||||
|  |       elptr += elemsize; | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
							
								
								
									
										133
									
								
								newlib/libc/xdr/xdr_float.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								newlib/libc/xdr/xdr_float.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_float.c, Generic XDR routines implementation. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * These are the "floating point" xdr routines used to (de)serialize | ||||||
|  |  * most common data items.  See xdr.h for more info on the interface to | ||||||
|  |  * xdr. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * NB: Not portable. | ||||||
|  |  * This routine works on machines with IEEE754 FP and Vaxen. | ||||||
|  |  * Assume that xdr_private.h arranges things so that one of | ||||||
|  |  *   1) __IEEE_LITTLE_ENDIAN | ||||||
|  |  *   2) __IEEE_BIG_ENDIAN | ||||||
|  |  *   3) __vax__ | ||||||
|  |  * is #defined.  Otherwise, expect errors. | ||||||
|  |  */ | ||||||
|  | #ifndef XDR_FLOAT_C | ||||||
|  | #define XDR_FLOAT_C | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if defined(__IEEE_LITTLE_ENDIAN) || defined(__IEEE_BIG_ENDIAN) | ||||||
|  |  | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_float, (xdrs, fp), | ||||||
|  |        XDR * xdrs _AND | ||||||
|  |        float *fp) | ||||||
|  | { | ||||||
|  |   switch (xdrs->x_op) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |     case XDR_ENCODE: | ||||||
|  |       return (XDR_PUTINT32 (xdrs, (int32_t *) fp)); | ||||||
|  |  | ||||||
|  |     case XDR_DECODE: | ||||||
|  |       return (XDR_GETINT32 (xdrs, (int32_t *) fp)); | ||||||
|  |  | ||||||
|  |     case XDR_FREE: | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if !defined(_DOUBLE_IS_32BITS) | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_double, (xdrs, dp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	double *dp) | ||||||
|  | { | ||||||
|  |   int32_t *i32p; | ||||||
|  |   bool_t rv; | ||||||
|  |  | ||||||
|  |   switch (xdrs->x_op) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |     case XDR_ENCODE: | ||||||
|  |       i32p = (int32_t *) (void *) dp; | ||||||
|  | #if defined(__IEEE_BIG_ENDIAN) | ||||||
|  |       rv = XDR_PUTINT32 (xdrs, i32p); | ||||||
|  |       if (!rv) | ||||||
|  |         return (rv); | ||||||
|  |       rv = XDR_PUTINT32 (xdrs, i32p + 1); | ||||||
|  | #else /* must be __IEEE_LITTLE_ENDIAN */ | ||||||
|  |       rv = XDR_PUTINT32 (xdrs, i32p + 1); | ||||||
|  |       if (!rv) | ||||||
|  |         return (rv); | ||||||
|  |       rv = XDR_PUTINT32 (xdrs, i32p); | ||||||
|  | #endif /* __IEEE_LITTLE_ENDIAN */ | ||||||
|  |       return (rv); | ||||||
|  |  | ||||||
|  |     case XDR_DECODE: | ||||||
|  |       i32p = (int32_t *) (void *) dp; | ||||||
|  | #if defined(__IEEE_BIG_ENDIAN) | ||||||
|  |       rv = XDR_GETINT32 (xdrs, i32p); | ||||||
|  |       if (!rv) | ||||||
|  |         return (rv); | ||||||
|  |       rv = XDR_GETINT32 (xdrs, i32p + 1); | ||||||
|  | #else /* must be __IEEE_LITTLE_ENDIAN */ | ||||||
|  |       rv = XDR_GETINT32 (xdrs, i32p + 1); | ||||||
|  |       if (!rv) | ||||||
|  |         return (rv); | ||||||
|  |       rv = XDR_GETINT32 (xdrs, i32p); | ||||||
|  | #endif /* __IEEE_LITTLE_ENDIAN */ | ||||||
|  |       return (rv); | ||||||
|  |  | ||||||
|  |     case XDR_FREE: | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  | #endif /* !_DOUBLE_IS_32BITS */ | ||||||
|  |  | ||||||
|  | #elif defined(__vax__) | ||||||
|  | #include "xdr_float_vax.c" | ||||||
|  | #endif | ||||||
|  |  | ||||||
							
								
								
									
										254
									
								
								newlib/libc/xdr/xdr_float_vax.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								newlib/libc/xdr/xdr_float_vax.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,254 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_float_vax.c, XDR floating point routines for vax. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * These are the "floating point" xdr routines used to (de)serialize | ||||||
|  |  * most common data items.  See xdr.h for more info on the interface to | ||||||
|  |  * xdr. | ||||||
|  |  */ | ||||||
|  | #ifndef XDR_FLOAT_C | ||||||
|  | #error "Must be included from xdr_float.c" | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | /* What IEEE single precision floating point looks like on a Vax */ | ||||||
|  | struct ieee_single | ||||||
|  | { | ||||||
|  |   unsigned int mantissa:23; | ||||||
|  |   unsigned int exp:8; | ||||||
|  |   unsigned int sign:1; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Vax single precision floating point */ | ||||||
|  | struct vax_single | ||||||
|  | { | ||||||
|  |   unsigned int mantissa1:7; | ||||||
|  |   unsigned int exp:8; | ||||||
|  |   unsigned int sign:1; | ||||||
|  |   unsigned int mantissa2:16; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | # define VAX_SNG_BIAS   0x81 | ||||||
|  | # define IEEE_SNG_BIAS  0x7f | ||||||
|  |  | ||||||
|  | /* *INDENT-OFF* | ||||||
|  | */ | ||||||
|  | static struct sgl_limits | ||||||
|  | { | ||||||
|  |   struct vax_single s; | ||||||
|  |   struct ieee_single ieee; | ||||||
|  | } sgl_limits[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     {0x7f, 0xff, 0x0, 0xffff},   /* Max Vax */ | ||||||
|  |     {0x0, 0xff, 0x0}             /* Max IEEE */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     {0x0, 0x0, 0x0, 0x0},        /* Min Vax */ | ||||||
|  |     {0x0, 0x0, 0x0}              /* Min IEEE */ | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | /* *INDENT-ON* | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_float, (xdrs, fp), | ||||||
|  |        XDR * xdrs _AND | ||||||
|  |        float *fp) | ||||||
|  | { | ||||||
|  |   struct ieee_single is; | ||||||
|  |   struct vax_single vs, *vsp; | ||||||
|  |   struct sgl_limits *lim; | ||||||
|  |   int i; | ||||||
|  |   switch (xdrs->x_op) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |     case XDR_ENCODE: | ||||||
|  |       vs = *((struct vax_single *) fp); | ||||||
|  |       for (i = 0, lim = sgl_limits; | ||||||
|  |            i < sizeof (sgl_limits) / sizeof (struct sgl_limits); i++, lim++) | ||||||
|  |         { | ||||||
|  |           if ((vs.mantissa2 == lim->s.mantissa2) && | ||||||
|  |               (vs.exp == lim->s.exp) && (vs.mantissa1 == lim->s.mantissa1)) | ||||||
|  |             { | ||||||
|  |               is = lim->ieee; | ||||||
|  |               goto shipit; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       is.exp = vs.exp - VAX_SNG_BIAS + IEEE_SNG_BIAS; | ||||||
|  |       is.mantissa = (vs.mantissa1 << 16) | vs.mantissa2; | ||||||
|  |     shipit: | ||||||
|  |       is.sign = vs.sign; | ||||||
|  |       return (XDR_PUTINT32 (xdrs, (int32_t *) & is)); | ||||||
|  |  | ||||||
|  |     case XDR_DECODE: | ||||||
|  |       vsp = (struct vax_single *) fp; | ||||||
|  |       if (!XDR_GETINT32 (xdrs, (int32_t *) & is)) | ||||||
|  |         return FALSE; | ||||||
|  |       for (i = 0, lim = sgl_limits; | ||||||
|  |            i < sizeof (sgl_limits) / sizeof (struct sgl_limits); i++, lim++) | ||||||
|  |         { | ||||||
|  |           if ((is.exp == lim->ieee.exp) && | ||||||
|  |               (is.mantissa == lim->ieee.mantissa)) | ||||||
|  |             { | ||||||
|  |               *vsp = lim->s; | ||||||
|  |               goto doneit; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       vsp->exp = is.exp - IEEE_SNG_BIAS + VAX_SNG_BIAS; | ||||||
|  |       vsp->mantissa2 = is.mantissa; | ||||||
|  |       vsp->mantissa1 = (is.mantissa >> 16); | ||||||
|  |     doneit: | ||||||
|  |       vsp->sign = is.sign; | ||||||
|  |       return TRUE; | ||||||
|  |  | ||||||
|  |     case XDR_FREE: | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #if !defined(_DOUBLE_IS_32BITS) | ||||||
|  |  | ||||||
|  | /* What IEEE double precision floating point looks like on a Vax */ | ||||||
|  | struct ieee_double | ||||||
|  | { | ||||||
|  |   unsigned int mantissa1:20; | ||||||
|  |   unsigned int exp:11; | ||||||
|  |   unsigned int sign:1; | ||||||
|  |   unsigned int mantissa2:32; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* Vax double precision floating point */ | ||||||
|  | struct vax_double | ||||||
|  | { | ||||||
|  |   unsigned int mantissa1:7; | ||||||
|  |   unsigned int exp:8; | ||||||
|  |   unsigned int sign:1; | ||||||
|  |   unsigned int mantissa2:16; | ||||||
|  |   unsigned int mantissa3:16; | ||||||
|  |   unsigned int mantissa4:16; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | # define VAX_DBL_BIAS   0x81 | ||||||
|  | # define IEEE_DBL_BIAS  0x3ff | ||||||
|  | # define MASK(nbits)    ((1 << nbits) - 1) | ||||||
|  |  | ||||||
|  | /* *INDENT-OFF* | ||||||
|  | */ | ||||||
|  | static struct dbl_limits | ||||||
|  | { | ||||||
|  |   struct vax_double d; | ||||||
|  |   struct ieee_double ieee; | ||||||
|  | } dbl_limits[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     {0x7f, 0xff, 0x0, 0xffff, 0xffff, 0xffff},  /* Max Vax */ | ||||||
|  |     {0x0, 0x7ff, 0x0, 0x0}                      /* Max IEEE */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     {0x0, 0x0, 0x0, 0x0, 0x0, 0x0},             /* Min Vax */ | ||||||
|  |     {0x0, 0x0, 0x0, 0x0}                        /* Min IEEE */ | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | /* *INDENT-ON* | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_double, (xdrs, dp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	double *dp) | ||||||
|  | { | ||||||
|  |   int32_t *lp; | ||||||
|  |   struct ieee_double id; | ||||||
|  |   struct vax_double vd; | ||||||
|  |   struct dbl_limits *lim; | ||||||
|  |   int i; | ||||||
|  |  | ||||||
|  |   switch (xdrs->x_op) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |     case XDR_ENCODE: | ||||||
|  |       vd = *((struct vax_double *) dp); | ||||||
|  |       for (i = 0, lim = dbl_limits; | ||||||
|  |            i < sizeof (dbl_limits) / sizeof (struct dbl_limits); i++, lim++) | ||||||
|  |         { | ||||||
|  |           if ((vd.mantissa4 == lim->d.mantissa4) && | ||||||
|  |               (vd.mantissa3 == lim->d.mantissa3) && | ||||||
|  |               (vd.mantissa2 == lim->d.mantissa2) && | ||||||
|  |               (vd.mantissa1 == lim->d.mantissa1) && (vd.exp == lim->d.exp)) | ||||||
|  |             { | ||||||
|  |               id = lim->ieee; | ||||||
|  |               goto shipit; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       id.exp = vd.exp - VAX_DBL_BIAS + IEEE_DBL_BIAS; | ||||||
|  |       id.mantissa1 = (vd.mantissa1 << 13) | (vd.mantissa2 >> 3); | ||||||
|  |       id.mantissa2 = ((vd.mantissa2 & MASK (3)) << 29) | | ||||||
|  |         (vd.mantissa3 << 13) | ((vd.mantissa4 >> 3) & MASK (13)); | ||||||
|  |     shipit: | ||||||
|  |       id.sign = vd.sign; | ||||||
|  |       lp = (int32_t *) & id; | ||||||
|  |       return (XDR_PUTINT32 (xdrs, lp++) && XDR_PUTINT32 (xdrs, lp)); | ||||||
|  |  | ||||||
|  |     case XDR_DECODE: | ||||||
|  |       lp = (int32_t *) & id; | ||||||
|  |       if (!XDR_GETINT32 (xdrs, lp++) || !XDR_GETINT32 (xdrs, lp)) | ||||||
|  |         return FALSE; | ||||||
|  |       for (i = 0, lim = dbl_limits; | ||||||
|  |            i < sizeof (dbl_limits) / sizeof (struct dbl_limits); i++, lim++) | ||||||
|  |         { | ||||||
|  |           if ((id.mantissa2 == lim->ieee.mantissa2) && | ||||||
|  |               (id.mantissa1 == lim->ieee.mantissa1) && | ||||||
|  |               (id.exp == lim->ieee.exp)) | ||||||
|  |             { | ||||||
|  |               vd = lim->d; | ||||||
|  |               goto doneit; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       vd.exp = id.exp - IEEE_DBL_BIAS + VAX_DBL_BIAS; | ||||||
|  |       vd.mantissa1 = (id.mantissa1 >> 13); | ||||||
|  |       vd.mantissa2 = ((id.mantissa1 & MASK (13)) << 3) | (id.mantissa2 >> 29); | ||||||
|  |       vd.mantissa3 = (id.mantissa2 >> 13); | ||||||
|  |       vd.mantissa4 = (id.mantissa2 << 3); | ||||||
|  |     doneit: | ||||||
|  |       vd.sign = id.sign; | ||||||
|  |       *dp = *((double *) &vd); | ||||||
|  |       return TRUE; | ||||||
|  |  | ||||||
|  |     case XDR_FREE: | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  | #endif /* !_DOUBLE_IS_32BITS */ | ||||||
|  |  | ||||||
							
								
								
									
										319
									
								
								newlib/libc/xdr/xdr_mem.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										319
									
								
								newlib/libc/xdr/xdr_mem.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,319 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_mem.h, XDR implementation using memory buffers. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * If you have some data to be interpreted as external data representation | ||||||
|  |  * or to be converted to external data representation in a memory buffer, | ||||||
|  |  * then this is the package for you. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <limits.h> | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | #ifndef ntohl | ||||||
|  | # define ntohl(x) xdr_ntohl(x) | ||||||
|  | #endif | ||||||
|  | #ifndef htonl | ||||||
|  | # define htonl(x) xdr_htonl(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | static void _EXFUN (xdrmem_destroy, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_getlong_aligned, (XDR *, long *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_putlong_aligned, (XDR *, _CONST long *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_getlong_unaligned, (XDR *, long *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_putlong_unaligned, (XDR *, _CONST long *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_getbytes, (XDR *, char *, u_int)); | ||||||
|  | static bool_t _EXFUN (xdrmem_putbytes, (XDR *, _CONST char *, u_int)); | ||||||
|  | /* XXX: w/64-bit pointers, u_int not enough! */ | ||||||
|  | static u_int _EXFUN (xdrmem_getpos, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrmem_setpos, (XDR *, u_int)); | ||||||
|  | static int32_t * _EXFUN (xdrmem_inline_aligned, (XDR *, u_int)); | ||||||
|  | static int32_t * _EXFUN (xdrmem_inline_unaligned, (XDR *, u_int)); | ||||||
|  | static bool_t  _EXFUN (xdrmem_getint32_aligned, (XDR *, int32_t *)); | ||||||
|  | static bool_t  _EXFUN (xdrmem_putint32_aligned, (XDR *, _CONST int32_t *)); | ||||||
|  | static bool_t  _EXFUN (xdrmem_getint32_unaligned, (XDR *, int32_t *)); | ||||||
|  | static bool_t  _EXFUN (xdrmem_putint32_unaligned, (XDR *, _CONST int32_t *)); | ||||||
|  |  | ||||||
|  | static _CONST struct xdr_ops xdrmem_ops_aligned = { | ||||||
|  |   xdrmem_getlong_aligned, | ||||||
|  |   xdrmem_putlong_aligned, | ||||||
|  |   xdrmem_getbytes, | ||||||
|  |   xdrmem_putbytes, | ||||||
|  |   xdrmem_getpos, | ||||||
|  |   xdrmem_setpos, | ||||||
|  |   xdrmem_inline_aligned, | ||||||
|  |   xdrmem_destroy, | ||||||
|  |   xdrmem_getint32_aligned, | ||||||
|  |   xdrmem_putint32_aligned | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static _CONST struct xdr_ops xdrmem_ops_unaligned = { | ||||||
|  |   xdrmem_getlong_unaligned, | ||||||
|  |   xdrmem_putlong_unaligned, | ||||||
|  |   xdrmem_getbytes, | ||||||
|  |   xdrmem_putbytes, | ||||||
|  |   xdrmem_getpos, | ||||||
|  |   xdrmem_setpos, | ||||||
|  |   xdrmem_inline_unaligned, | ||||||
|  |   xdrmem_destroy, | ||||||
|  |   xdrmem_getint32_unaligned, | ||||||
|  |   xdrmem_putint32_unaligned | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The procedure xdrmem_create initializes a stream descriptor for a | ||||||
|  |  * memory buffer. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _DEFUN (xdrmem_create, (xdrs, addr, size, op), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	caddr_t addr _AND | ||||||
|  | 	u_int size _AND | ||||||
|  | 	enum xdr_op op) | ||||||
|  | { | ||||||
|  |   xdrs->x_op = op; | ||||||
|  |   xdrs->x_ops = ((unsigned long)addr & (sizeof (int32_t) - 1)) | ||||||
|  |     ? (struct xdr_ops *)&xdrmem_ops_unaligned | ||||||
|  |     : (struct xdr_ops *)&xdrmem_ops_aligned; | ||||||
|  |   xdrs->x_private = xdrs->x_base = addr; | ||||||
|  |   xdrs->x_handy = size; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | _DEFUN (xdrmem_destroy, (xdrs), | ||||||
|  |        XDR * xdrs) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_getlong_aligned, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	long *lp) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < sizeof (int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof (int32_t); | ||||||
|  |   *lp = (int32_t) ntohl (*(u_int32_t *) xdrs->x_private); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_putlong_aligned, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST long *lp) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < sizeof (int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof (int32_t); | ||||||
|  |   *(u_int32_t *) xdrs->x_private = htonl ((u_int32_t) * lp); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_getlong_unaligned, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	long *lp) | ||||||
|  | { | ||||||
|  |   u_int32_t l; | ||||||
|  |  | ||||||
|  |   if (xdrs->x_handy < sizeof (int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof (int32_t); | ||||||
|  |   memmove (&l, xdrs->x_private, sizeof (int32_t)); | ||||||
|  |   *lp = ntohl (l); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_putlong_unaligned, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST long *lp) | ||||||
|  | { | ||||||
|  |   u_int32_t l; | ||||||
|  |  | ||||||
|  |   if (xdrs->x_handy < sizeof (int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof (int32_t); | ||||||
|  |   l = htonl ((u_int32_t) * lp); | ||||||
|  |   memmove (xdrs->x_private, &l, sizeof (int32_t)); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_getbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < len) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= len; | ||||||
|  |   memmove (addr, xdrs->x_private, len); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + len; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_putbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < len) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= len; | ||||||
|  |   memmove (xdrs->x_private, addr, len); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + len; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static u_int | ||||||
|  | _DEFUN (xdrmem_getpos, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   /* XXX w/64-bit pointers, u_int not enough! */ | ||||||
|  |   return (u_int) ((u_long) xdrs->x_private - (u_long) xdrs->x_base); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_setpos, (xdrs, pos), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int pos) | ||||||
|  | { | ||||||
|  |   caddr_t newaddr = xdrs->x_base + pos; | ||||||
|  |   caddr_t lastaddr = (caddr_t) xdrs->x_private + xdrs->x_handy; | ||||||
|  |   size_t handy = lastaddr - newaddr; | ||||||
|  |  | ||||||
|  |   if (newaddr > lastaddr | ||||||
|  |       || newaddr < xdrs->x_base | ||||||
|  |       || handy != (u_int) handy) | ||||||
|  |     return FALSE; | ||||||
|  |  | ||||||
|  |   xdrs->x_private = newaddr; | ||||||
|  |   xdrs->x_handy = (u_int) handy; | ||||||
|  |   /* XXX sizeof(u_int) <? sizeof(ptrdiff_t) */ | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int32_t * | ||||||
|  | _DEFUN (xdrmem_inline_aligned, (xdrs, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   int32_t *buf = 0; | ||||||
|  |  | ||||||
|  |   if (xdrs->x_handy >= len) | ||||||
|  |     { | ||||||
|  |       xdrs->x_handy -= len; | ||||||
|  |       buf = (int32_t *) xdrs->x_private; | ||||||
|  |       xdrs->x_private = (char *) xdrs->x_private + len; | ||||||
|  |     } | ||||||
|  |   return (buf); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int32_t * | ||||||
|  | _DEFUN (xdrmem_inline_unaligned, (xdrs, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   return (0); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_getint32_aligned, (xdrs, ip), | ||||||
|  | 	XDR *xdrs _AND | ||||||
|  | 	int32_t *ip) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < sizeof(int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof(int32_t); | ||||||
|  |   *ip = (int32_t) ntohl (*(u_int32_t *) xdrs->x_private); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_putint32_aligned, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	_CONST int32_t *ip) | ||||||
|  | { | ||||||
|  |   if (xdrs->x_handy < sizeof(int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof(int32_t); | ||||||
|  |   *(u_int32_t *) xdrs->x_private = htonl ((u_int32_t) * ip); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_getint32_unaligned, (xdrs, ip), | ||||||
|  | 	XDR *xdrs _AND | ||||||
|  | 	int32_t *ip) | ||||||
|  | { | ||||||
|  |   u_int32_t l; | ||||||
|  |  | ||||||
|  |   if (xdrs->x_handy < sizeof(int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof(int32_t); | ||||||
|  |   memmove (&l, xdrs->x_private, sizeof (int32_t)); | ||||||
|  |   *ip = (int32_t) ntohl (l); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrmem_putint32_unaligned, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	_CONST int32_t *ip) | ||||||
|  | { | ||||||
|  |   u_int32_t l; | ||||||
|  |  | ||||||
|  |   if (xdrs->x_handy < sizeof(int32_t)) | ||||||
|  |     return FALSE; | ||||||
|  |   xdrs->x_handy -= sizeof(int32_t); | ||||||
|  |   l = htonl ((u_int32_t) * ip); | ||||||
|  |   memmove (xdrs->x_private, &l, sizeof (int32_t)); | ||||||
|  |   xdrs->x_private = (char *) xdrs->x_private + sizeof (int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										58
									
								
								newlib/libc/xdr/xdr_private.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								newlib/libc/xdr/xdr_private.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | /* xdr_private.c - utility functions for porting xdr | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2009 Charles S. Wilson | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  |  * copy of this software and associated documentation files (the "Software"), | ||||||
|  |  * to deal in the Software without restriction, including without limitation | ||||||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  |  * Software is furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included | ||||||
|  |  * in all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||||
|  |  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||||||
|  |  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||||||
|  |  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||||||
|  |  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||||||
|  |  * OTHER DEALINGS IN THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | #include <stdarg.h> | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | static xdr_vprintf_t xdr_vprintf = NULL; | ||||||
|  |  | ||||||
|  | xdr_vprintf_t | ||||||
|  | _DEFUN (xdr_set_vprintf, (fnptr), | ||||||
|  |         xdr_vprintf_t fnptr) | ||||||
|  | { | ||||||
|  |   xdr_vprintf_t tmp = xdr_vprintf; | ||||||
|  |   xdr_vprintf = fnptr; | ||||||
|  |   return tmp; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | _DEFUN (xdr_vwarnx, (format, ap), | ||||||
|  |         _CONST char *format _AND | ||||||
|  | 	va_list ap) | ||||||
|  | { | ||||||
|  |   if (xdr_vprintf) | ||||||
|  |     { | ||||||
|  |       (*xdr_vprintf)(format, ap); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |   /* otherwise, do nothing */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void | ||||||
|  | _DEFUN (xdr_warnx, (fmt), | ||||||
|  |         _CONST char *fmt _DOTS) | ||||||
|  | { | ||||||
|  |   va_list ap; | ||||||
|  |   va_start (ap, fmt); | ||||||
|  |   xdr_vwarnx (fmt, ap); | ||||||
|  |   va_end (ap); | ||||||
|  | } | ||||||
							
								
								
									
										76
									
								
								newlib/libc/xdr/xdr_private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								newlib/libc/xdr/xdr_private.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | |||||||
|  | /* xdr_private.h - declarations of utility functions for porting xdr | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2009 Charles S. Wilson | ||||||
|  |  * | ||||||
|  |  * Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  |  * copy of this software and associated documentation files (the "Software"), | ||||||
|  |  * to deal in the Software without restriction, including without limitation | ||||||
|  |  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  |  * and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  |  * Software is furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  * The above copyright notice and this permission notice shall be included | ||||||
|  |  * in all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||||
|  |  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||||||
|  |  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||||||
|  |  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||||||
|  |  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||||||
|  |  * OTHER DEALINGS IN THE SOFTWARE. | ||||||
|  |  */ | ||||||
|  | #ifndef _XDR_PRIVATE_H | ||||||
|  | #define _XDR_PRIVATE_H | ||||||
|  |  | ||||||
|  | #include <_ansi.h> | ||||||
|  | #include <stdarg.h> | ||||||
|  | #include <sys/param.h> | ||||||
|  |  | ||||||
|  | /* avoid including stdio header here */ | ||||||
|  | #ifndef __VALIST | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #define __VALIST __gnuc_va_list | ||||||
|  | #else | ||||||
|  | #define __VALIST char* | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | typedef void _EXFNPTR (xdr_vprintf_t, (const char *, va_list)); | ||||||
|  |  | ||||||
|  | xdr_vprintf_t _EXFUN (xdr_set_vprintf, (xdr_vprintf_t)); | ||||||
|  |  | ||||||
|  | void _EXFUN (xdr_vwarnx, (const char *, __VALIST) | ||||||
|  |               _ATTRIBUTE ((__format__ (__printf__, 1, 0)))); | ||||||
|  |  | ||||||
|  | void _EXFUN (xdr_warnx, (const char *, ...) | ||||||
|  |               _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); | ||||||
|  |  | ||||||
|  | /* endian issues */ | ||||||
|  | #include <machine/endian.h> | ||||||
|  |  | ||||||
|  | /* byteswap and ntohl stuff; platform may provide optimzed version | ||||||
|  |  * of this, but we don't have access to that here.*/ | ||||||
|  | _ELIDABLE_INLINE uint32_t xdr_ntohl (uint32_t x) | ||||||
|  | { | ||||||
|  | #if BYTE_ORDER == BIG_ENDIAN | ||||||
|  |   return x; | ||||||
|  | #elif BYTE_ORDER == LITTLE_ENDIAN | ||||||
|  |   u_char *s = (u_char *)&x; | ||||||
|  |   return (uint32_t)(s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); | ||||||
|  | #else | ||||||
|  | # error Unsupported endian type | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  | #define xdr_htonl(x) xdr_ntohl(x) | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif /* _XDR_PRIVATE_H */ | ||||||
|  |  | ||||||
							
								
								
									
										926
									
								
								newlib/libc/xdr/xdr_rec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										926
									
								
								newlib/libc/xdr/xdr_rec.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,926 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_rec.c, Implements TCP/IP based XDR streams with a "record marking" | ||||||
|  |  * layer above tcp (for rpc's use). | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * These routines interface XDRSTREAMS to a tcp/ip connection. | ||||||
|  |  * There is a record marking layer between the xdr stream | ||||||
|  |  * and the tcp transport level.  A record is composed on one or more | ||||||
|  |  * record fragments.  A record fragment is a thirty-two bit header followed | ||||||
|  |  * by n bytes of data, where n is contained in the header.  The header | ||||||
|  |  * is represented as a htonl(u_long).  Thegh order bit encodes | ||||||
|  |  * whether or not the fragment is the last fragment of the record | ||||||
|  |  * (1 => fragment is last, 0 => more fragments to follow. | ||||||
|  |  * The other 31 bits encode the byte length of the fragment. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <stddef.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <assert.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <errno.h> | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | #ifndef ntohl | ||||||
|  | # define ntohl(x) xdr_ntohl(x) | ||||||
|  | #endif | ||||||
|  | #ifndef htonl | ||||||
|  | # define htonl(x) xdr_htonl(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | enum xprt_stat | ||||||
|  | { | ||||||
|  |   XPRT_DIED, | ||||||
|  |   XPRT_MOREREQS, | ||||||
|  |   XPRT_IDLE | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static bool_t _EXFUN (xdrrec_getlong, (XDR *, long *)); | ||||||
|  | static bool_t _EXFUN (xdrrec_putlong, (XDR *, _CONST long *)); | ||||||
|  | static bool_t _EXFUN (xdrrec_getbytes, (XDR *, char *, u_int)); | ||||||
|  | static bool_t _EXFUN (xdrrec_putbytes, (XDR *, _CONST char *, u_int)); | ||||||
|  | static u_int _EXFUN (xdrrec_getpos, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrrec_setpos, (XDR *, u_int)); | ||||||
|  | static int32_t * _EXFUN (xdrrec_inline, (XDR *, u_int)); | ||||||
|  | static void _EXFUN (xdrrec_destroy, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrrec_getint32, (XDR *, int32_t *)); | ||||||
|  | static bool_t _EXFUN (xdrrec_putint32, (XDR *, _CONST int32_t *)); | ||||||
|  |  | ||||||
|  | static _CONST struct xdr_ops xdrrec_ops = { | ||||||
|  |   xdrrec_getlong, | ||||||
|  |   xdrrec_putlong, | ||||||
|  |   xdrrec_getbytes, | ||||||
|  |   xdrrec_putbytes, | ||||||
|  |   xdrrec_getpos, | ||||||
|  |   xdrrec_setpos, | ||||||
|  |   xdrrec_inline, | ||||||
|  |   xdrrec_destroy, | ||||||
|  |   xdrrec_getint32, | ||||||
|  |   xdrrec_putint32 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * A record is composed of one or more record fragments. | ||||||
|  |  * A record fragment is a four-byte header followed by zero to | ||||||
|  |  * 2**32-1 bytes.  The header is treated as a long unsigned and is | ||||||
|  |  * encode/decoded to the network via htonl/ntohl.  The low order 31 bits | ||||||
|  |  * are a byte count of the fragment.  The highest order bit is a boolean: | ||||||
|  |  * 1 => this fragment is the last fragment of the record, | ||||||
|  |  * 0 => this fragment is followed by more fragment(s). | ||||||
|  |  * | ||||||
|  |  * The fragment/record machinery is not general;  it is constructed to | ||||||
|  |  * meet the needs of xdr and rpc based on tcp. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #define LAST_FRAG ((u_int32_t)(UINT32_C(1) << 31)) | ||||||
|  |  | ||||||
|  | typedef struct rec_strm | ||||||
|  | { | ||||||
|  |   caddr_t tcp_handle; | ||||||
|  |   /* | ||||||
|  |    * out-goung bits | ||||||
|  |    */ | ||||||
|  |   caddr_t out_buffer;           /* buffer as allocated; may not be aligned */ | ||||||
|  |   int (*writeit) (void *, void *, int); | ||||||
|  |   caddr_t out_base;             /* output buffer (points to frag header) */ | ||||||
|  |   caddr_t out_finger;           /* next output position */ | ||||||
|  |   caddr_t out_boundry;          /* data cannot up to this address */ | ||||||
|  |   u_int32_t *frag_header;       /* beginning of curren fragment */ | ||||||
|  |   bool_t frag_sent;             /* true if buffer sent in middle of record */ | ||||||
|  |   /* | ||||||
|  |    * in-coming bits | ||||||
|  |    */ | ||||||
|  |   caddr_t in_buffer;            /* buffer as allocated; may not be aligned */ | ||||||
|  |   int (*readit) (void *, void *, int); | ||||||
|  |   u_long in_size;               /* fixed size of the input buffer */ | ||||||
|  |   caddr_t in_base; | ||||||
|  |   caddr_t in_finger;            /* location of next byte to be had */ | ||||||
|  |   caddr_t in_boundry;           /* can read up to this location */ | ||||||
|  |   long fbtbc;                   /* fragment bytes to be consumed */ | ||||||
|  |   bool_t last_frag; | ||||||
|  |   u_int sendsize;               /* must be <= INT_MAX */ | ||||||
|  |   u_int recvsize;               /* must be <= INT_MAX */ | ||||||
|  |  | ||||||
|  |   bool_t nonblock; | ||||||
|  |   bool_t in_haveheader; | ||||||
|  |   u_int32_t in_header; | ||||||
|  |   char *in_hdrp; | ||||||
|  |   int in_hdrlen; | ||||||
|  |   int in_reclen; | ||||||
|  |   int in_received; | ||||||
|  |   int in_maxrec; | ||||||
|  | } RECSTREAM; | ||||||
|  |  | ||||||
|  | static u_int fix_buf_size (u_int); | ||||||
|  | static bool_t flush_out (RECSTREAM *, bool_t); | ||||||
|  | static bool_t fill_input_buf (RECSTREAM *); | ||||||
|  | static bool_t get_input_bytes (RECSTREAM *, char *, size_t); | ||||||
|  | static bool_t set_input_fragment (RECSTREAM *); | ||||||
|  | static bool_t skip_input_bytes (RECSTREAM *, long); | ||||||
|  | static bool_t realloc_stream (RECSTREAM *, int); | ||||||
|  |  | ||||||
|  | bool_t _EXFUN (__xdrrec_getrec, (XDR *, enum xprt_stat *, bool_t)); | ||||||
|  | bool_t _EXFUN (__xdrrec_setnonblock, (XDR *, int)); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Create an xdr handle for xdrrec | ||||||
|  |  * xdrrec_create fills in xdrs.  Sendsize and recvsize are | ||||||
|  |  * send and recv buffer sizes (0 => use default), and must be <= INT_MAX. | ||||||
|  |  * tcp_handle is an opaque handle that is passed as the first parameter to | ||||||
|  |  * the procedures readit and writeit.  Readit and writeit are read and | ||||||
|  |  * write respectively.   They are like the system | ||||||
|  |  * calls except that they take an opaque handle rather than an fd. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _DEFUN (xdrrec_create, (xdrs, sendsize, recvsize, tcp_handle, readit, writeit), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int sendsize _AND | ||||||
|  | 	u_int recvsize _AND | ||||||
|  | 	void *tcp_handle _AND | ||||||
|  |         int _EXPARM (readit, (void *, void *, int)) _AND | ||||||
|  |         int _EXPARM (writeit, (void *, void *, int))) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm; | ||||||
|  |   /* Although sendsize and recvsize are u_int, we require | ||||||
|  |    * that they be less than INT_MAX, because often we need | ||||||
|  |    * to compare against values held in (signed) integers. | ||||||
|  |    * Please don't try to use send/recv buffers > 2GB... | ||||||
|  |    */ | ||||||
|  |   assert (sendsize < (u_int)INT_MAX); | ||||||
|  |   assert (recvsize < (u_int)INT_MAX); | ||||||
|  |  | ||||||
|  |   rstrm = (RECSTREAM *) mem_alloc (sizeof (RECSTREAM)); | ||||||
|  |   if (rstrm == NULL) | ||||||
|  |     { | ||||||
|  |       xdr_warnx ("xdrrec_create: out of memory"); | ||||||
|  |       /* | ||||||
|  |        *  This is bad.  Should rework xdrrec_create to | ||||||
|  |        *  return a handle, and in this case return NULL | ||||||
|  |        */ | ||||||
|  |       errno = ENOMEM; | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   /* allocate send buffer; insure BYTES_PER_UNIT alignment */ | ||||||
|  |   rstrm->sendsize = sendsize = fix_buf_size (sendsize); | ||||||
|  |   rstrm->out_buffer = mem_alloc (rstrm->sendsize + BYTES_PER_XDR_UNIT); | ||||||
|  |   if (rstrm->out_buffer == NULL) | ||||||
|  |     { | ||||||
|  |       xdr_warnx ("xdrrec_create: out of memory"); | ||||||
|  |       mem_free (rstrm, sizeof (RECSTREAM)); | ||||||
|  |       errno = ENOMEM; | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |   for (rstrm->out_base = rstrm->out_buffer; | ||||||
|  |        (long) rstrm->out_base % BYTES_PER_XDR_UNIT != 0; rstrm->out_base++) | ||||||
|  |     ; | ||||||
|  |  | ||||||
|  |   /* allocate recv buffer; insure BYTES_PER_UNIT alignment */ | ||||||
|  |   rstrm->recvsize = recvsize = fix_buf_size (recvsize); | ||||||
|  |   rstrm->in_buffer = mem_alloc (recvsize + BYTES_PER_XDR_UNIT); | ||||||
|  |   if (rstrm->in_buffer == NULL) | ||||||
|  |     { | ||||||
|  |       xdr_warnx ("xdrrec_create: out of memory"); | ||||||
|  |       mem_free (rstrm->out_buffer, sendsize + BYTES_PER_XDR_UNIT); | ||||||
|  |       mem_free (rstrm, sizeof (RECSTREAM)); | ||||||
|  |       errno = ENOMEM; | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |   for (rstrm->in_base = rstrm->in_buffer; | ||||||
|  |        (long) rstrm->in_base % BYTES_PER_XDR_UNIT != 0; rstrm->in_base++) | ||||||
|  |     ; | ||||||
|  |  | ||||||
|  |   /* | ||||||
|  |    * now the rest ... | ||||||
|  |    */ | ||||||
|  |   xdrs->x_ops = &xdrrec_ops; | ||||||
|  |   xdrs->x_private = rstrm; | ||||||
|  |   rstrm->tcp_handle = tcp_handle; | ||||||
|  |   rstrm->readit = readit; | ||||||
|  |   rstrm->writeit = writeit; | ||||||
|  |   rstrm->out_finger = rstrm->out_boundry = rstrm->out_base; | ||||||
|  |   rstrm->frag_header = (u_int32_t *) (void *) rstrm->out_base; | ||||||
|  |   rstrm->out_finger += sizeof (u_int32_t); | ||||||
|  |   rstrm->out_boundry += sendsize; | ||||||
|  |   rstrm->frag_sent = FALSE; | ||||||
|  |   rstrm->in_size = recvsize; | ||||||
|  |   rstrm->in_boundry = rstrm->in_base; | ||||||
|  |   rstrm->in_finger = (rstrm->in_boundry += recvsize); | ||||||
|  |   rstrm->fbtbc = 0; | ||||||
|  |   rstrm->last_frag = TRUE; | ||||||
|  |   rstrm->in_haveheader = FALSE; | ||||||
|  |   rstrm->in_hdrlen = 0; | ||||||
|  |   rstrm->in_hdrp = (char *) (void *) &rstrm->in_header; | ||||||
|  |   rstrm->nonblock = FALSE; | ||||||
|  |   rstrm->in_reclen = 0; | ||||||
|  |   rstrm->in_received = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The reoutines defined below are the xdr ops which will go into the | ||||||
|  |  * xdr handle filled in by xdrrec_create. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_getlong, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	long *lp) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   int32_t *buflp = (int32_t *) (void *) (rstrm->in_finger); | ||||||
|  |   int32_t mylong; | ||||||
|  |  | ||||||
|  |   /* first try the inline, fast case */ | ||||||
|  |   if ((rstrm->fbtbc >= sizeof (int32_t)) && | ||||||
|  |       (((long) rstrm->in_boundry - (long) buflp) >= sizeof (int32_t))) | ||||||
|  |     { | ||||||
|  |       *lp = (long) ntohl ((u_int32_t) (*buflp)); | ||||||
|  |       rstrm->fbtbc -= sizeof (int32_t); | ||||||
|  |       rstrm->in_finger += sizeof (int32_t); | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     { | ||||||
|  |       if (!xdrrec_getbytes (xdrs, (char *) (void *) &mylong, | ||||||
|  |                             sizeof (int32_t))) | ||||||
|  |         return FALSE; | ||||||
|  |       *lp = (long) ntohl ((u_int32_t) mylong); | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_putlong, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST long *lp) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   int32_t *dest_lp = ((int32_t *) (void *) (rstrm->out_finger)); | ||||||
|  |  | ||||||
|  |   if ((rstrm->out_finger += sizeof (int32_t)) > rstrm->out_boundry) | ||||||
|  |     { | ||||||
|  |       /* | ||||||
|  |        * this case should almost never happen so the code is | ||||||
|  |        * inefficient | ||||||
|  |        */ | ||||||
|  |       rstrm->out_finger -= sizeof (int32_t); | ||||||
|  |       rstrm->frag_sent = TRUE; | ||||||
|  |       if (!flush_out (rstrm, FALSE)) | ||||||
|  |         return FALSE; | ||||||
|  |       dest_lp = ((int32_t *) (void *) (rstrm->out_finger)); | ||||||
|  |       rstrm->out_finger += sizeof (int32_t); | ||||||
|  |     } | ||||||
|  |   *dest_lp = (int32_t) htonl ((u_int32_t) (*lp)); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t                   /* must manage buffers, fragments, and records */ | ||||||
|  | _DEFUN (xdrrec_getbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   size_t current; | ||||||
|  |  | ||||||
|  |   while (len > 0) | ||||||
|  |     { | ||||||
|  |       current = (int) rstrm->fbtbc; | ||||||
|  |       if (current == 0) | ||||||
|  |         { | ||||||
|  |           if (rstrm->last_frag) | ||||||
|  |             return FALSE; | ||||||
|  |           if (!set_input_fragment (rstrm)) | ||||||
|  |             return FALSE; | ||||||
|  |           continue; | ||||||
|  |         } | ||||||
|  |       current = (len < current) ? len : current; | ||||||
|  |       if (!get_input_bytes (rstrm, addr, current)) | ||||||
|  |         return FALSE; | ||||||
|  |       addr += current; | ||||||
|  |       rstrm->fbtbc -= current; | ||||||
|  |       len -= current; | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_putbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  |         _CONST char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   size_t current; | ||||||
|  |  | ||||||
|  |   while (len > 0) | ||||||
|  |     { | ||||||
|  |       current = (size_t) ((u_long) rstrm->out_boundry - | ||||||
|  |                           (u_long) rstrm->out_finger); | ||||||
|  |       current = (len < current) ? len : current; | ||||||
|  |       memmove (rstrm->out_finger, addr, current); | ||||||
|  |       rstrm->out_finger += current; | ||||||
|  |       addr += current; | ||||||
|  |       len -= current; | ||||||
|  |       if (rstrm->out_finger == rstrm->out_boundry) | ||||||
|  |         { | ||||||
|  |           rstrm->frag_sent = TRUE; | ||||||
|  |           if (!flush_out (rstrm, FALSE)) | ||||||
|  |             return FALSE; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static u_int | ||||||
|  | _DEFUN (xdrrec_getpos, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private; | ||||||
|  |   off_t pos; | ||||||
|  |  | ||||||
|  |   pos = lseek ((int) (u_long) rstrm->tcp_handle, (off_t) 0, 1); | ||||||
|  |   if (pos != -1) | ||||||
|  |     switch (xdrs->x_op) | ||||||
|  |       { | ||||||
|  |  | ||||||
|  |       case XDR_ENCODE: | ||||||
|  |         pos += rstrm->out_finger - rstrm->out_base; | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case XDR_DECODE: | ||||||
|  |         pos -= rstrm->in_boundry - rstrm->in_finger; | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       default: | ||||||
|  |         pos = (off_t) - 1; | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |   return ((u_int) pos); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_setpos, (xdrs, pos), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int pos) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private; | ||||||
|  |   u_int currpos = xdrrec_getpos (xdrs); | ||||||
|  |   int delta = currpos - pos; | ||||||
|  |   char *newpos; | ||||||
|  |  | ||||||
|  |   if ((int) currpos != -1) | ||||||
|  |     switch (xdrs->x_op) | ||||||
|  |       { | ||||||
|  |  | ||||||
|  |       case XDR_ENCODE: | ||||||
|  |         newpos = rstrm->out_finger - delta; | ||||||
|  |         if ((newpos > (char *) (void *) (rstrm->frag_header)) && | ||||||
|  |             (newpos < rstrm->out_boundry)) | ||||||
|  |           { | ||||||
|  |             rstrm->out_finger = newpos; | ||||||
|  |             return TRUE; | ||||||
|  |           } | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case XDR_DECODE: | ||||||
|  |         newpos = rstrm->in_finger - delta; | ||||||
|  |         if ((delta < (int) (rstrm->fbtbc)) && | ||||||
|  |             (newpos <= rstrm->in_boundry) && (newpos >= rstrm->in_base)) | ||||||
|  |           { | ||||||
|  |             rstrm->in_finger = newpos; | ||||||
|  |             rstrm->fbtbc -= delta; | ||||||
|  |             return TRUE; | ||||||
|  |           } | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case XDR_FREE: | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int32_t * | ||||||
|  | _DEFUN (xdrrec_inline, (xdrs, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private; | ||||||
|  |   int32_t *buf = NULL; | ||||||
|  |   /* len represents the number of bytes to extract | ||||||
|  |    * from the buffer. The number of bytes remaining | ||||||
|  |    * in the buffer is rstrm->fbtbc, which is a long. | ||||||
|  |    * Thus, the buffer size maximum is 2GB (!), and | ||||||
|  |    * we require that no one ever try to read more | ||||||
|  |    * than than number of bytes at once. | ||||||
|  |    */ | ||||||
|  |   assert (len < (u_int)LONG_MAX); | ||||||
|  |  | ||||||
|  |   switch (xdrs->x_op) | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |     case XDR_ENCODE: | ||||||
|  |       if ((rstrm->out_finger + len) <= rstrm->out_boundry) | ||||||
|  |         { | ||||||
|  |           buf = (int32_t *) (void *) rstrm->out_finger; | ||||||
|  |           rstrm->out_finger += len; | ||||||
|  |         } | ||||||
|  |       break; | ||||||
|  |  | ||||||
|  |     case XDR_DECODE: | ||||||
|  |       if (((long)len <= rstrm->fbtbc) && | ||||||
|  |           ((rstrm->in_finger + len) <= rstrm->in_boundry)) | ||||||
|  |         { | ||||||
|  |           buf = (int32_t *) (void *) rstrm->in_finger; | ||||||
|  |           rstrm->fbtbc -= len; | ||||||
|  |           rstrm->in_finger += len; | ||||||
|  |         } | ||||||
|  |       break; | ||||||
|  |  | ||||||
|  |     case XDR_FREE: | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |   return (buf); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | _DEFUN (xdrrec_destroy, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private; | ||||||
|  |  | ||||||
|  |   mem_free (rstrm->out_buffer, rstrm->sendsize + BYTES_PER_XDR_UNIT); | ||||||
|  |   mem_free (rstrm->in_buffer, rstrm->recvsize + BYTES_PER_XDR_UNIT); | ||||||
|  |   mem_free (rstrm, sizeof (RECSTREAM)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_getint32, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	int32_t *ip) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   int32_t *bufip = (int32_t *) (void *) (rstrm->in_finger); | ||||||
|  |   int32_t mylong; | ||||||
|  |  | ||||||
|  |   /* first try the inline, fast case */ | ||||||
|  |   if ((rstrm->fbtbc >= sizeof (int32_t)) && | ||||||
|  |       (( rstrm->in_boundry - (char *) bufip) >= sizeof (int32_t))) | ||||||
|  |     { | ||||||
|  |       *ip = (int32_t) ntohl (*bufip); | ||||||
|  |       rstrm->fbtbc -= sizeof (int32_t); | ||||||
|  |       rstrm->in_finger += sizeof (int32_t); | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     { | ||||||
|  |       if (!xdrrec_getbytes (xdrs, (char *) (void *) &mylong, | ||||||
|  |                             sizeof (int32_t))) | ||||||
|  |         return FALSE; | ||||||
|  |       *ip = (int32_t) ntohl (mylong); | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrrec_putint32, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	_CONST int32_t *ip) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   int32_t *dest_ip = ((int32_t *) (void *) (rstrm->out_finger)); | ||||||
|  |  | ||||||
|  |   if ((rstrm->out_finger += sizeof (int32_t)) > rstrm->out_boundry) | ||||||
|  |     { | ||||||
|  |       /* | ||||||
|  |        * this case should almost never happen so the code is | ||||||
|  |        * inefficient | ||||||
|  |        */ | ||||||
|  |       rstrm->out_finger -= sizeof (int32_t); | ||||||
|  |       rstrm->frag_sent = TRUE; | ||||||
|  |       if (!flush_out (rstrm, FALSE)) | ||||||
|  |         return FALSE; | ||||||
|  |       dest_ip = ((int32_t *) (void *) (rstrm->out_finger)); | ||||||
|  |       rstrm->out_finger += sizeof (int32_t); | ||||||
|  |     } | ||||||
|  |   *dest_ip = (int32_t) htonl (*ip); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Exported routines to manage xdr records | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Before reading (deserializing from the stream, one should always call | ||||||
|  |  * this procedure to guarantee proper record alignment. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdrrec_skiprecord, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   enum xprt_stat xstat; | ||||||
|  |  | ||||||
|  |   if (rstrm->nonblock) | ||||||
|  |     { | ||||||
|  |       if (__xdrrec_getrec (xdrs, &xstat, FALSE)) | ||||||
|  |         { | ||||||
|  |           rstrm->fbtbc = 0; | ||||||
|  |           return TRUE; | ||||||
|  |         } | ||||||
|  |       if (rstrm->in_finger == rstrm->in_boundry && xstat == XPRT_MOREREQS) | ||||||
|  |         { | ||||||
|  |           rstrm->fbtbc = 0; | ||||||
|  |           return TRUE; | ||||||
|  |         } | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   while (rstrm->fbtbc > 0 || (!rstrm->last_frag)) | ||||||
|  |     { | ||||||
|  |       if (!skip_input_bytes (rstrm, rstrm->fbtbc)) | ||||||
|  |         return FALSE; | ||||||
|  |       rstrm->fbtbc = 0; | ||||||
|  |       if ((!rstrm->last_frag) && (!set_input_fragment (rstrm))) | ||||||
|  |         return FALSE; | ||||||
|  |     } | ||||||
|  |   rstrm->last_frag = FALSE; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Look ahead function. | ||||||
|  |  * Returns TRUE iff there is no more input in the buffer | ||||||
|  |  * after consuming the rest of the current record. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdrrec_eof, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |  | ||||||
|  |   while (rstrm->fbtbc > 0 || (!rstrm->last_frag)) | ||||||
|  |     { | ||||||
|  |       if (!skip_input_bytes (rstrm, rstrm->fbtbc)) | ||||||
|  |         return TRUE; | ||||||
|  |       rstrm->fbtbc = 0; | ||||||
|  |       if ((!rstrm->last_frag) && (!set_input_fragment (rstrm))) | ||||||
|  |         return TRUE; | ||||||
|  |     } | ||||||
|  |   if (rstrm->in_finger == rstrm->in_boundry) | ||||||
|  |     return TRUE; | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The client must tell the package when an end-of-record has occurred. | ||||||
|  |  * The second paraemters tells whether the record should be flushed to the | ||||||
|  |  * (output) tcp stream.  (This let's the package support batched or | ||||||
|  |  * pipelined procedure calls.)  TRUE => immmediate flush to tcp connection. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdrrec_endofrecord, (xdrs, sendnow), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	bool_t sendnow) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   u_long len;                   /* fragment length */ | ||||||
|  |  | ||||||
|  |   if (sendnow || rstrm->frag_sent || | ||||||
|  |       ((u_long) rstrm->out_finger + sizeof (u_int32_t) >= | ||||||
|  |        (u_long) rstrm->out_boundry)) | ||||||
|  |     { | ||||||
|  |       rstrm->frag_sent = FALSE; | ||||||
|  |       return (flush_out (rstrm, TRUE)); | ||||||
|  |     } | ||||||
|  |   len = (u_long) (rstrm->out_finger) - (u_long) (rstrm->frag_header) - | ||||||
|  |     sizeof (u_int32_t); | ||||||
|  |   *(rstrm->frag_header) = htonl ((u_int32_t) len | LAST_FRAG); | ||||||
|  |   rstrm->frag_header = (u_int32_t *) (void *) rstrm->out_finger; | ||||||
|  |   rstrm->out_finger += sizeof (u_int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fill the stream buffer with a record for a non-blocking connection. | ||||||
|  |  * Return true if a record is available in the buffer, false if not. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (__xdrrec_getrec, (xdrs, statp, expectdata), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	enum xprt_stat * statp _AND | ||||||
|  | 	bool_t expectdata) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |   ssize_t n; | ||||||
|  |   int fraglen; | ||||||
|  |  | ||||||
|  |   if (!rstrm->in_haveheader) | ||||||
|  |     { | ||||||
|  |       n = rstrm->readit (rstrm->tcp_handle, rstrm->in_hdrp, | ||||||
|  |                          (int) sizeof (rstrm->in_header) - rstrm->in_hdrlen); | ||||||
|  |       if (n == 0) | ||||||
|  |         { | ||||||
|  |           *statp = expectdata ? XPRT_DIED : XPRT_IDLE; | ||||||
|  |           return FALSE; | ||||||
|  |         } | ||||||
|  |       if (n < 0) | ||||||
|  |         { | ||||||
|  |           *statp = XPRT_DIED; | ||||||
|  |           return FALSE; | ||||||
|  |         } | ||||||
|  |       rstrm->in_hdrp += n; | ||||||
|  |       rstrm->in_hdrlen += n; | ||||||
|  |       if (rstrm->in_hdrlen < sizeof (rstrm->in_header)) | ||||||
|  |         { | ||||||
|  |           *statp = XPRT_MOREREQS; | ||||||
|  |           return FALSE; | ||||||
|  |         } | ||||||
|  |       rstrm->in_header = ntohl (rstrm->in_header); | ||||||
|  |       fraglen = (int) (rstrm->in_header & ~LAST_FRAG); | ||||||
|  |       if (fraglen == 0 || fraglen > rstrm->in_maxrec || | ||||||
|  |           (rstrm->in_reclen + fraglen) > rstrm->in_maxrec) | ||||||
|  |         { | ||||||
|  |           *statp = XPRT_DIED; | ||||||
|  |           return FALSE; | ||||||
|  |         } | ||||||
|  |       rstrm->in_reclen += fraglen; | ||||||
|  |       if (rstrm->in_reclen > (int)rstrm->recvsize) /* guaranteed recvsize < INT_MAX */ | ||||||
|  |         realloc_stream (rstrm, rstrm->in_reclen); | ||||||
|  |       if (rstrm->in_header & LAST_FRAG) | ||||||
|  |         { | ||||||
|  |           rstrm->in_header &= ~LAST_FRAG; | ||||||
|  |           rstrm->last_frag = TRUE; | ||||||
|  |         } | ||||||
|  |       /* | ||||||
|  |        * We can only reasonably expect to read once from a | ||||||
|  |        * non-blocking stream. Reading the fragment header | ||||||
|  |        * may have drained the stream. | ||||||
|  |        */ | ||||||
|  |       expectdata = FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   n = rstrm->readit (rstrm->tcp_handle, | ||||||
|  |                      rstrm->in_base + rstrm->in_received, | ||||||
|  |                      (rstrm->in_reclen - rstrm->in_received)); | ||||||
|  |  | ||||||
|  |   if (n < 0) | ||||||
|  |     { | ||||||
|  |       *statp = XPRT_DIED; | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   if (n == 0) | ||||||
|  |     { | ||||||
|  |       *statp = expectdata ? XPRT_DIED : XPRT_IDLE; | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   rstrm->in_received += n; | ||||||
|  |  | ||||||
|  |   if (rstrm->in_received == rstrm->in_reclen) | ||||||
|  |     { | ||||||
|  |       rstrm->in_haveheader = FALSE; | ||||||
|  |       rstrm->in_hdrp = (char *) (void *) &rstrm->in_header; | ||||||
|  |       rstrm->in_hdrlen = 0; | ||||||
|  |       if (rstrm->last_frag) | ||||||
|  |         { | ||||||
|  |           rstrm->fbtbc = rstrm->in_reclen; | ||||||
|  |           rstrm->in_boundry = rstrm->in_base + rstrm->in_reclen; | ||||||
|  |           rstrm->in_finger = rstrm->in_base; | ||||||
|  |           rstrm->in_reclen = rstrm->in_received = 0; | ||||||
|  |           *statp = XPRT_MOREREQS; | ||||||
|  |           return TRUE; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   *statp = XPRT_MOREREQS; | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool_t | ||||||
|  | _DEFUN (__xdrrec_setnonblock, (xdrs, maxrec), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	int maxrec) | ||||||
|  | { | ||||||
|  |   RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private); | ||||||
|  |  | ||||||
|  |   rstrm->nonblock = TRUE; | ||||||
|  |   if (maxrec == 0) | ||||||
|  |     maxrec = rstrm->recvsize; | ||||||
|  |   rstrm->in_maxrec = maxrec; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Internal useful routines | ||||||
|  |  */ | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (flush_out, (rstrm, eor), | ||||||
|  |         RECSTREAM * rstrm _AND | ||||||
|  | 	bool_t eor) | ||||||
|  | { | ||||||
|  |   u_int32_t eormask = (eor == TRUE) ? LAST_FRAG : 0; | ||||||
|  |   u_int32_t len = (u_int32_t) ((u_long) (rstrm->out_finger) - | ||||||
|  |                                (u_long) (rstrm->frag_header) - | ||||||
|  |                                sizeof (u_int32_t)); | ||||||
|  |  | ||||||
|  |   *(rstrm->frag_header) = htonl (len | eormask); | ||||||
|  |   len = (u_int32_t) ((u_long) (rstrm->out_finger) - | ||||||
|  |                      (u_long) (rstrm->out_base)); | ||||||
|  |   if ((*(rstrm->writeit)) (rstrm->tcp_handle, rstrm->out_base, (int) len) | ||||||
|  |       != (int) len) | ||||||
|  |     return FALSE; | ||||||
|  |   rstrm->frag_header = (u_int32_t *) (void *) rstrm->out_base; | ||||||
|  |   rstrm->out_finger = (char *) rstrm->out_base + sizeof (u_int32_t); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t                   /* knows nothing about records!  Only about input buffers */ | ||||||
|  | _DEFUN (fill_input_buf, (rstrm), | ||||||
|  |         RECSTREAM * rstrm) | ||||||
|  | { | ||||||
|  |   char *where; | ||||||
|  |   u_int32_t i; | ||||||
|  |   int len; | ||||||
|  |  | ||||||
|  |   if (rstrm->nonblock) | ||||||
|  |     return FALSE; | ||||||
|  |  | ||||||
|  |   where = rstrm->in_base; | ||||||
|  |   i = (u_int32_t) ((u_long) rstrm->in_boundry % BYTES_PER_XDR_UNIT); | ||||||
|  |   where += i; | ||||||
|  |   len = (u_int32_t) (rstrm->in_size - i); | ||||||
|  |   if ((len = (*(rstrm->readit)) (rstrm->tcp_handle, where, len)) == -1) | ||||||
|  |     return FALSE; | ||||||
|  |   rstrm->in_finger = where; | ||||||
|  |   where += len; | ||||||
|  |   rstrm->in_boundry = where; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t                   /* knows nothing about records!  Only about input buffers */ | ||||||
|  | _DEFUN (get_input_bytes, (rstrm, addr, len), | ||||||
|  |         RECSTREAM * rstrm _AND | ||||||
|  | 	char *addr _AND | ||||||
|  | 	size_t len) | ||||||
|  | { | ||||||
|  |   size_t current; | ||||||
|  |  | ||||||
|  |   if (rstrm->nonblock) | ||||||
|  |     { | ||||||
|  |       if ((rstrm->in_boundry < rstrm->in_finger) ||               /* <-- should never happen, but avoids... */ | ||||||
|  |          (len > (size_t) (rstrm->in_boundry - rstrm->in_finger))) /* <-- signed/unsigned comparison */ | ||||||
|  |         return FALSE; | ||||||
|  |       memcpy (addr, rstrm->in_finger, (size_t) len); | ||||||
|  |       rstrm->in_finger += len; | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   while (len > 0) | ||||||
|  |     { | ||||||
|  |       current = (size_t) ((long) rstrm->in_boundry - (long) rstrm->in_finger); | ||||||
|  |       if (current == 0) | ||||||
|  |         { | ||||||
|  |           if (!fill_input_buf (rstrm)) | ||||||
|  |             return FALSE; | ||||||
|  |           continue; | ||||||
|  |         } | ||||||
|  |       current = (len < current) ? len : current; | ||||||
|  |       memmove (addr, rstrm->in_finger, current); | ||||||
|  |       rstrm->in_finger += current; | ||||||
|  |       addr += current; | ||||||
|  |       len -= current; | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t                   /* next two bytes of the input stream are treated as a header */ | ||||||
|  | _DEFUN (set_input_fragment, (rstrm), | ||||||
|  |         RECSTREAM * rstrm) | ||||||
|  | { | ||||||
|  |   u_int32_t header; | ||||||
|  |  | ||||||
|  |   if (rstrm->nonblock) | ||||||
|  |     return FALSE; | ||||||
|  |   if (!get_input_bytes (rstrm, (char *) (void *) &header, sizeof (header))) | ||||||
|  |     return FALSE; | ||||||
|  |   header = ntohl (header); | ||||||
|  |   rstrm->last_frag = ((header & LAST_FRAG) == 0) ? FALSE : TRUE; | ||||||
|  |   /* | ||||||
|  |    * Sanity check. Try not to accept wildly incorrect | ||||||
|  |    * record sizes. Unfortunately, the only record size | ||||||
|  |    * we can positively identify as being 'wildly incorrect' | ||||||
|  |    * is zero. Ridiculously large record sizes may look wrong, | ||||||
|  |    * but we don't have any way to be certain that they aren't | ||||||
|  |    * what the client actually intended to send us. | ||||||
|  |    */ | ||||||
|  |   if (header == 0) | ||||||
|  |     return FALSE; | ||||||
|  |   rstrm->fbtbc = header & (~LAST_FRAG); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t                   /* consumes input bytes; knows nothing about records! */ | ||||||
|  | _DEFUN (skip_input_bytes, (rstrm, cnt), | ||||||
|  |         RECSTREAM * rstrm _AND | ||||||
|  | 	long cnt) | ||||||
|  | { | ||||||
|  |   size_t current; | ||||||
|  |  | ||||||
|  |   while (cnt > 0) | ||||||
|  |     { | ||||||
|  |       current = (size_t) ((long) rstrm->in_boundry - (long) rstrm->in_finger); | ||||||
|  |       if (current == 0) | ||||||
|  |         { | ||||||
|  |           if (!fill_input_buf (rstrm)) | ||||||
|  |             return FALSE; | ||||||
|  |           continue; | ||||||
|  |         } | ||||||
|  |       /* in this loop (prior to last line), cnt > 0 so size_t cast is safe*/ | ||||||
|  |       current = (size_t) (((size_t)cnt < current) ? (size_t)cnt : current); | ||||||
|  |       rstrm->in_finger += current; | ||||||
|  |       cnt -= current; | ||||||
|  |     } | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static u_int | ||||||
|  | _DEFUN (fix_buf_size, (s), | ||||||
|  |         u_int s) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   if (s < 100) | ||||||
|  |     s = 4000; | ||||||
|  |   return (RNDUP (s)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Reallocate the input buffer for a non-block stream. | ||||||
|  |  */ | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (realloc_stream, (rstrm, size), | ||||||
|  |         RECSTREAM * rstrm _AND | ||||||
|  | 	int size) | ||||||
|  | { | ||||||
|  |   ptrdiff_t diff; | ||||||
|  |   char *buf; | ||||||
|  |   char *buf_algn; | ||||||
|  |  | ||||||
|  |   if (size > (int)rstrm->recvsize) /* recvsize guaranteed < INT_MAX */ | ||||||
|  |     { | ||||||
|  |       buf = realloc (rstrm->in_buffer, (size_t) (size + BYTES_PER_XDR_UNIT)); | ||||||
|  |       if (buf == NULL) | ||||||
|  |         return FALSE; | ||||||
|  |       for (buf_algn = buf; | ||||||
|  |            (long) buf_algn % BYTES_PER_XDR_UNIT != 0; buf_algn++) | ||||||
|  |         ; | ||||||
|  |       diff = buf_algn - rstrm->in_base; | ||||||
|  |       rstrm->in_finger += diff; | ||||||
|  |       rstrm->in_base = buf_algn; | ||||||
|  |       rstrm->in_buffer = buf; | ||||||
|  |       rstrm->in_boundry = buf_algn + size; | ||||||
|  |       rstrm->recvsize = size; | ||||||
|  |       rstrm->in_size = size; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										139
									
								
								newlib/libc/xdr/xdr_reference.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								newlib/libc/xdr/xdr_reference.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_reference.c, Generic XDR routines impelmentation. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1987, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * These are the "non-trivial" xdr primitives used to serialize and de-serialize | ||||||
|  |  * "pointers".  See xdr.h for more info on the interface to xdr. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <errno.h> | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | #define LASTUNSIGNED    ((u_int)0-1) | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * XDR an indirect pointer | ||||||
|  |  * xdr_reference is for recursively translating a structure that is | ||||||
|  |  * referenced by a pointer inside the structure that is currently being | ||||||
|  |  * translated.  pp references a pointer to storage. If *pp is null | ||||||
|  |  * the  necessary storage is allocated. | ||||||
|  |  * size is the sizeof the referneced structure. | ||||||
|  |  * proc is the routine to handle the referenced structure. | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_reference, (xdrs, pp, size, proc), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	caddr_t * pp _AND | ||||||
|  | 	u_int size _AND | ||||||
|  | 	xdrproc_t proc) | ||||||
|  | { | ||||||
|  |   caddr_t loc = *pp; | ||||||
|  |   bool_t stat; | ||||||
|  |  | ||||||
|  |   if (loc == NULL) | ||||||
|  |     switch (xdrs->x_op) | ||||||
|  |       { | ||||||
|  |       case XDR_FREE: | ||||||
|  |         return TRUE; | ||||||
|  |  | ||||||
|  |       case XDR_DECODE: | ||||||
|  |         *pp = loc = (caddr_t) mem_alloc (size); | ||||||
|  |         if (loc == NULL) | ||||||
|  |           { | ||||||
|  |             xdr_warnx ("xdr_reference: out of memory"); | ||||||
|  |             errno = ENOMEM; | ||||||
|  |             return FALSE; | ||||||
|  |           } | ||||||
|  |         memset (loc, 0, size); | ||||||
|  |         break; | ||||||
|  |  | ||||||
|  |       case XDR_ENCODE: | ||||||
|  |         break; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |   stat = (*proc) (xdrs, loc, LASTUNSIGNED); | ||||||
|  |  | ||||||
|  |   if (xdrs->x_op == XDR_FREE) | ||||||
|  |     { | ||||||
|  |       mem_free (loc, size); | ||||||
|  |       *pp = NULL; | ||||||
|  |     } | ||||||
|  |   return stat; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_pointer(): | ||||||
|  |  * | ||||||
|  |  * XDR a pointer to a possibly recursive data structure. This | ||||||
|  |  * differs with xdr_reference in that it can serialize/deserialiaze | ||||||
|  |  * trees correctly. | ||||||
|  |  * | ||||||
|  |  *  What's sent is actually a union: | ||||||
|  |  * | ||||||
|  |  *  union object_pointer switch (boolean b) { | ||||||
|  |  *  case TRUE: object_data data; | ||||||
|  |  *  case FALSE: void nothing; | ||||||
|  |  *  } | ||||||
|  |  * | ||||||
|  |  * > objpp: Pointer to the pointer to the object. | ||||||
|  |  * > obj_size: size of the object. | ||||||
|  |  * > xdr_obj: routine to XDR an object. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | bool_t | ||||||
|  | _DEFUN (xdr_pointer, (xdrs, objpp, obj_size, xdr_obj), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	char **objpp _AND | ||||||
|  | 	u_int obj_size _AND | ||||||
|  | 	xdrproc_t xdr_obj) | ||||||
|  | { | ||||||
|  |   bool_t more_data; | ||||||
|  |  | ||||||
|  |   more_data = (*objpp != NULL); | ||||||
|  |   if (!xdr_bool (xdrs, &more_data)) | ||||||
|  |     { | ||||||
|  |       return FALSE; | ||||||
|  |     } | ||||||
|  |   if (!more_data) | ||||||
|  |     { | ||||||
|  |       *objpp = NULL; | ||||||
|  |       return TRUE; | ||||||
|  |     } | ||||||
|  |   return (xdr_reference (xdrs, objpp, obj_size, xdr_obj)); | ||||||
|  | } | ||||||
							
								
								
									
										181
									
								
								newlib/libc/xdr/xdr_sizeof.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								newlib/libc/xdr/xdr_sizeof.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,181 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  | /* | ||||||
|  |  * xdr_sizeof.c | ||||||
|  |  * | ||||||
|  |  * Copyright 1990 Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * General purpose routine to see how much space something will use | ||||||
|  |  * when serialized using XDR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | /* ARGSUSED */ | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (x_putlong, (xdrs, longp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST long *longp) | ||||||
|  | { | ||||||
|  |   xdrs->x_handy += BYTES_PER_XDR_UNIT; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* ARGSUSED */ | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (x_putbytes, (xdrs, bp, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	const char *bp _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   xdrs->x_handy += len; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static u_int | ||||||
|  | _DEFUN (x_getpostn, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   return xdrs->x_handy; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* ARGSUSED */ | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (x_setpostn, (xdrs, pos), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int pos) | ||||||
|  | { | ||||||
|  |   /* This is not allowed */ | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int32_t * | ||||||
|  | _DEFUN (x_inline, (xdrs, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   if (len == 0) | ||||||
|  |     return NULL; | ||||||
|  |   if (xdrs->x_op != XDR_ENCODE) | ||||||
|  |     return NULL; | ||||||
|  |   if (len < (u_int) (long int) xdrs->x_base) | ||||||
|  |     { | ||||||
|  |       /* x_private was already allocated */ | ||||||
|  |       xdrs->x_handy += len; | ||||||
|  |       return (int32_t *) xdrs->x_private; | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     { | ||||||
|  |       /* Free the earlier space and allocate new area */ | ||||||
|  |       if (xdrs->x_private) | ||||||
|  |         mem_free (xdrs->x_private, sizeof (xdrs->x_private)); | ||||||
|  |       if ((xdrs->x_private = (caddr_t) mem_alloc (len)) == NULL) | ||||||
|  |         { | ||||||
|  |           xdrs->x_base = 0; | ||||||
|  |           return NULL; | ||||||
|  |         } | ||||||
|  |       xdrs->x_base = (caddr_t) (intptr_t) len; | ||||||
|  |       xdrs->x_handy += len; | ||||||
|  |       return (int32_t *) xdrs->x_private; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int | ||||||
|  | _DEFUN_VOID (harmless) | ||||||
|  | { | ||||||
|  |   /* Always return FALSE/NULL, as the case may be */ | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void | ||||||
|  | _DEFUN (x_destroy, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   xdrs->x_handy = 0; | ||||||
|  |   xdrs->x_base = 0; | ||||||
|  |   if (xdrs->x_private) | ||||||
|  |     { | ||||||
|  |       mem_free (xdrs->x_private, sizeof (xdrs->x_private)); | ||||||
|  |       xdrs->x_private = NULL; | ||||||
|  |     } | ||||||
|  |   return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (x_putint32, (xdrs, int32p), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	_CONST int32_t *int32p) | ||||||
|  | { | ||||||
|  |   xdrs->x_handy += BYTES_PER_XDR_UNIT; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | unsigned long | ||||||
|  | _DEFUN (xdr_sizeof, (func, data), | ||||||
|  |         xdrproc_t func _AND | ||||||
|  | 	_PTR data) | ||||||
|  | { | ||||||
|  |   XDR x; | ||||||
|  |   struct xdr_ops ops; | ||||||
|  |   bool_t stat; | ||||||
|  |   /* to stop ANSI-C compiler from complaining */ | ||||||
|  |   typedef bool_t _EXFNPTR (dummyfunc1, (XDR *, long *)); | ||||||
|  |   typedef bool_t _EXFNPTR (dummyfunc2, (XDR *, caddr_t, u_int)); | ||||||
|  |   typedef bool_t _EXFNPTR (dummyfunc3, (XDR *, int32_t *)); | ||||||
|  |  | ||||||
|  |   ops.x_putlong = x_putlong; | ||||||
|  |   ops.x_putbytes = x_putbytes; | ||||||
|  |   ops.x_inline = x_inline; | ||||||
|  |   ops.x_getpostn = x_getpostn; | ||||||
|  |   ops.x_setpostn = x_setpostn; | ||||||
|  |   ops.x_destroy = x_destroy; | ||||||
|  |   ops.x_putint32 = x_putint32; | ||||||
|  |  | ||||||
|  |   /* the other harmless ones */ | ||||||
|  |   ops.x_getlong = (dummyfunc1) harmless; | ||||||
|  |   ops.x_getbytes = (dummyfunc2) harmless; | ||||||
|  |   ops.x_getint32 = (dummyfunc3) harmless; | ||||||
|  |  | ||||||
|  |   x.x_op = XDR_ENCODE; | ||||||
|  |   x.x_ops = &ops; | ||||||
|  |   x.x_handy = 0; | ||||||
|  |   x.x_private = (caddr_t) NULL; | ||||||
|  |   x.x_base = (caddr_t) 0; | ||||||
|  |  | ||||||
|  |   stat = func (&x, data); | ||||||
|  |   if (x.x_private) | ||||||
|  |     mem_free (x.x_private, sizeof (x.x_private)); | ||||||
|  |   return (stat == TRUE ? x.x_handy : 0); | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										217
									
								
								newlib/libc/xdr/xdr_stdio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								newlib/libc/xdr/xdr_stdio.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2009, Sun Microsystems, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * - Redistributions of source code must retain the above copyright notice, | ||||||
|  |  *   this list of conditions and the following disclaimer. | ||||||
|  |  * - 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. | ||||||
|  |  * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * xdr_stdio.c, XDR implementation on standard i/o file. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 1984, Sun Microsystems, Inc. | ||||||
|  |  * | ||||||
|  |  * This set of routines implements a XDR on a stdio stream. | ||||||
|  |  * XDR_ENCODE serializes onto the stream, XDR_DECODE de-serializes | ||||||
|  |  * from the stream. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include <rpc/xdr.h> | ||||||
|  |  | ||||||
|  | #include "xdr_private.h" | ||||||
|  |  | ||||||
|  | #ifndef ntohl | ||||||
|  | # define ntohl(x) xdr_ntohl(x) | ||||||
|  | #endif | ||||||
|  | #ifndef htonl | ||||||
|  | # define htonl(x) xdr_htonl(x) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | static void _EXFUN (xdrstdio_destroy, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_getlong, (XDR *, long *)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_putlong, (XDR *, _CONST long *)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_getbytes, (XDR *, char *, u_int)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_putbytes, (XDR *, _CONST char *, u_int)); | ||||||
|  | static u_int _EXFUN (xdrstdio_getpos, (XDR *)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_setpos, (XDR *, u_int)); | ||||||
|  | static int32_t * _EXFUN (xdrstdio_inline, (XDR *, u_int)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_getint32, (XDR*, int32_t *)); | ||||||
|  | static bool_t _EXFUN (xdrstdio_putint32, (XDR*, _CONST int32_t *)); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Ops vector for stdio type XDR | ||||||
|  |  */ | ||||||
|  | static _CONST struct xdr_ops xdrstdio_ops = { | ||||||
|  |   xdrstdio_getlong,             /* deseraialize a long int */ | ||||||
|  |   xdrstdio_putlong,             /* seraialize a long int */ | ||||||
|  |   xdrstdio_getbytes,            /* deserialize counted bytes */ | ||||||
|  |   xdrstdio_putbytes,            /* serialize counted bytes */ | ||||||
|  |   xdrstdio_getpos,              /* get offset in the stream */ | ||||||
|  |   xdrstdio_setpos,              /* set offset in the stream */ | ||||||
|  |   xdrstdio_inline,              /* prime stream for inline macros */ | ||||||
|  |   xdrstdio_destroy,             /* destroy stream */ | ||||||
|  |   xdrstdio_getint32,            /* deseraialize an int */ | ||||||
|  |   xdrstdio_putint32             /* seraialize an long int */ | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Initialize a stdio xdr stream. | ||||||
|  |  * Sets the xdr stream handle xdrs for use on the stream file. | ||||||
|  |  * Operation flag is set to op. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | _DEFUN (xdrstdio_create, (xdrs, file, op), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	FILE * file _AND | ||||||
|  | 	enum xdr_op op) | ||||||
|  | { | ||||||
|  |   xdrs->x_op = op; | ||||||
|  |   xdrs->x_ops = (struct xdr_ops *) &xdrstdio_ops; | ||||||
|  |   xdrs->x_private = (void *) file; | ||||||
|  |   xdrs->x_handy = 0; | ||||||
|  |   xdrs->x_base = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Destroy a stdio xdr stream. | ||||||
|  |  * Cleans up the xdr stream handle xdrs previously set up by xdrstdio_create. | ||||||
|  |  */ | ||||||
|  | static void | ||||||
|  | _DEFUN (xdrstdio_destroy, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   (void) fflush ((FILE *) xdrs->x_private); | ||||||
|  |   /* XXX: should we close the file ?? */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_getlong, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	long *lp) | ||||||
|  | { | ||||||
|  |   u_int32_t temp; | ||||||
|  |  | ||||||
|  |   if (fread (&temp, sizeof (int32_t), 1, (FILE *) xdrs->x_private) != 1) | ||||||
|  |     return FALSE; | ||||||
|  |   *lp = (long) (int32_t) ntohl (temp); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_putlong, (xdrs, lp), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	_CONST long *lp) | ||||||
|  | { | ||||||
|  |   u_int32_t temp = htonl ((u_int32_t) * lp); | ||||||
|  |  | ||||||
|  |   if (fwrite (&temp, sizeof (int32_t), 1, (FILE *) xdrs->x_private) != 1) | ||||||
|  |     return FALSE; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_getbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  |         char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   if ((len != 0) && (fread (addr, (size_t) len, 1, | ||||||
|  |                             (FILE *) xdrs->x_private) != 1)) | ||||||
|  |     return FALSE; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_putbytes, (xdrs, addr, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  |         _CONST char *addr _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   if ((len != 0) && (fwrite (addr, (size_t) len, 1, | ||||||
|  |                              (FILE *) xdrs->x_private) != 1)) | ||||||
|  |     return FALSE; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static u_int | ||||||
|  | _DEFUN (xdrstdio_getpos, (xdrs), | ||||||
|  |         XDR * xdrs) | ||||||
|  | { | ||||||
|  |   return ((u_int) ftell ((FILE *) xdrs->x_private)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_setpos, (xdrs, pos), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  |         u_int pos) | ||||||
|  | { | ||||||
|  |   return ((fseek ((FILE *) xdrs->x_private, (long) pos, 0) < 0) ? | ||||||
|  |           FALSE : TRUE); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* ARGSUSED */ | ||||||
|  | static int32_t * | ||||||
|  | _DEFUN (xdrstdio_inline, (xdrs, len), | ||||||
|  |         XDR * xdrs _AND | ||||||
|  | 	u_int len) | ||||||
|  | { | ||||||
|  |   /* | ||||||
|  |    * Must do some work to implement this: must insure | ||||||
|  |    * enough data in the underlying stdio buffer, | ||||||
|  |    * that the buffer is aligned so that we can indirect through a | ||||||
|  |    * long *, and stuff this pointer in xdrs->x_buf.  Doing | ||||||
|  |    * a fread or fwrite to a scratch buffer would defeat | ||||||
|  |    * most of the gains to be had here and require storage | ||||||
|  |    * management on this buffer, so we don't do this. | ||||||
|  |    */ | ||||||
|  |   return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_getint32, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	int32_t *ip) | ||||||
|  | { | ||||||
|  |   int32_t temp; | ||||||
|  |  | ||||||
|  |   if (fread (&temp, sizeof (int32_t), 1, (FILE *) xdrs->x_private) != 1) | ||||||
|  |     return FALSE; | ||||||
|  |   *ip = ntohl (temp); | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool_t | ||||||
|  | _DEFUN (xdrstdio_putint32, (xdrs, ip), | ||||||
|  |         XDR *xdrs _AND | ||||||
|  | 	_CONST int32_t *ip) | ||||||
|  | { | ||||||
|  |   int32_t temp = htonl (*ip); | ||||||
|  |  | ||||||
|  |   if (fwrite (&temp, sizeof (int32_t), 1, (FILE *) xdrs->x_private) != 1) | ||||||
|  |     return FALSE; | ||||||
|  |   return TRUE; | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user