* Re: [PATCH] Remove --enable-obsolete-rpc configure flag
2020-07-11 11:01 [PATCH] Remove --enable-obsolete-rpc configure flag Florian Weimer
2020-07-11 12:00 ` H.J. Lu
2020-07-11 18:15 ` Petr Vorel
@ 2020-07-13 17:31 ` Carlos O'Donell
2020-07-14 6:04 ` Andreas Schwab
3 siblings, 0 replies; 9+ messages in thread
From: Carlos O'Donell @ 2020-07-13 17:31 UTC (permalink / raw)
To: Florian Weimer, libc-alpha
On 7/11/20 7:01 AM, Florian Weimer via Libc-alpha wrote:
> From: Petr Vorel <pvorel@suse.cz>
>
> Sun RPC was removed from glibc. This includes rpcgen program, librpcsvc,
> and Sun RPC headers. Also test for bug #20790 was removed
> (test for rpcgen).
>
> Backward compatibility for old programs is kept only for architectures
> and ABIs that have been added in or before version 2.28.
>
> libtirpc is mature enough, librpcsvc and rpcgen are provided in
> rpcsvc-proto project.
>
> NOTE: libnsl code depends on Sun RPC (installed libnsl headers use
> installed Sun RPC headers), thus --enable-obsolete-rpc was a dependency
> for --enable-obsolete-nsl (removed in a previous commit).
>
> The arc ABI list file has to be updated because the port was added
> with the sunrpc symbols.
No regressions on x86_64 or i686.
I audited 162 symbols on x86_64, i686 and ARC builds before and after
the patches.
Verified x86 targets keep their existing compat symbols.
I cross checked these symbols:
__key_decryptsession_pk_LOCAL
__key_encryptsession_pk_LOCAL
__key_gendes_LOCAL
getrpcport
Which are now fixed on x86_64 and i686. So that matches my expectations.
Tested-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> ---
> Built with build-many-glibcs.py, with no new failures (i686-gnu is
> currently broken and in the process of being fixed).
>
> NEWS | 8 +
> benchtests/strcoll-inputs/filelist#en_US.UTF-8 | 29 -
> config.h.in | 4 -
> config.make.in | 1 -
> configure | 18 -
> configure.ac | 11 -
> include/libc-symbols.h | 7 +-
> include/shlib-compat.h | 8 +-
> malloc/thread-freeres.c | 5 +-
> manual/nss.texi | 4 +-
> scripts/build-many-glibcs.py | 6 -
> sunrpc/Makefile | 152 +--
> sunrpc/bug20790.x | 1 -
> sunrpc/proto.h | 65 --
> sunrpc/rpc_clntout.c | 333 ------
> sunrpc/rpc_cout.c | 811 -------------
> sunrpc/rpc_hout.c | 607 ----------
> sunrpc/rpc_main.c | 1451 ------------------------
> sunrpc/rpc_parse.c | 687 -----------
> sunrpc/rpc_parse.h | 165 ---
> sunrpc/rpc_sample.c | 336 ------
> sunrpc/rpc_scan.c | 544 ---------
> sunrpc/rpc_scan.h | 104 --
> sunrpc/rpc_svcout.c | 1093 ------------------
> sunrpc/rpc_tblout.c | 178 ---
> sunrpc/rpc_util.c | 525 ---------
> sunrpc/rpc_util.h | 154 ---
> sunrpc/rpcgen.c | 2 -
> sunrpc/rpcsvc/bootparam.h | 23 -
> sunrpc/rpcsvc/bootparam_prot.x | 97 --
> sunrpc/rpcsvc/key_prot.x | 283 -----
> sunrpc/rpcsvc/klm_prot.x | 130 ---
> sunrpc/rpcsvc/mount.x | 161 ---
> sunrpc/rpcsvc/nfs_prot.x | 352 ------
> sunrpc/rpcsvc/nlm_prot.x | 203 ----
> sunrpc/rpcsvc/rex.x | 229 ----
> sunrpc/rpcsvc/rquota.x | 61 -
> sunrpc/rpcsvc/rstat.x | 145 ---
> sunrpc/rpcsvc/rusers.x | 228 ----
> sunrpc/rpcsvc/sm_inter.x | 110 --
> sunrpc/rpcsvc/spray.x | 84 --
> sunrpc/rpcsvc/yppasswd.x | 61 -
> sysdeps/unix/sysv/linux/arc/libc.abilist | 162 ---
> 43 files changed, 35 insertions(+), 9603 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 92dcb77fef..1d9280418b 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -91,6 +91,14 @@ Major new features:
>
> Deprecated and removed features, and other changes affecting compatibility:
>
> +* Remove configure option --enable-obsolete-rpc. Sun RPC is removed
> + from glibc. This includes the rpcgen program, librpcsvc, and the Sun
> + RPC header files. Backward compatibility for old programs is kept
> + only for architectures and ABIs that have been added in or before
> + glibc 2.31. New programs need to use TI-RPC
> + <http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary> and
> + rpcsvc-proto <https://github.com/thkukuk/rpcsvc-proto>.
OK.
> +
> * Remove configure option --enable-obsolete-nsl. libnsl is only built
> as shared library for backward compatibility and the NSS modules "nis"
> and "nisplus" are not built at all and libnsl's headers aren't
> diff --git a/benchtests/strcoll-inputs/filelist#en_US.UTF-8 b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> index aa44107ad6..2f4ef195bb 100644
> --- a/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> +++ b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> @@ -14107,40 +14107,20 @@ nptl
> bits
> manual
> sunrpc
> -rpc_hout.c
OK.
> tst-xdrmem2.c
> -rpc_util.h
OK.
> getrpcbynumber_r.c
> xdr_intXX_t.c
> -rpc_tblout.c
OK.
> svc.c
> -rpc_svcout.c
OK.
> get_myaddr.c
> getrpcport.c
> auth_unix.c
> rpc_prot.c
> svcauth_des.c
> -rpc_clntout.c
OK.
> des_soft.c
> thrsvc.c
> xdr_rec.c
> rpcinfo.c
> rpcsvc
> -sm_inter.x
> -spray.x
> -nfs_prot.x
> -bootparam.h
> -klm_prot.x
> -key_prot.x
> -rstat.x
> -rusers.x
> -rex.x
> -yppasswd.x
> -mount.x
> -bootparam_prot.x
> -rquota.x
> -nlm_prot.x
> -rpc_main.c
OK.
> pmap_prot.c
> pmap_prot2.c
> rtime.c
> @@ -14150,7 +14130,6 @@ svc_simple.c
> svc_raw.c
> getrpcent.c
> pmap_rmt.c
> -rpc_sample.c
> pm_getport.c
> openchild.c
> xdr_stdio.c
> @@ -14187,11 +14166,8 @@ clnt.h
> pmap_clnt.c
> xdr.c
> bindrsvprt.c
> -rpc_parse.c
> Makefile
> -rpc_util.c
> des_crypt.c
> -rpc_parse.h
> key_call.c
> authdes_prot.c
> xdr_float.c
> @@ -14201,7 +14177,6 @@ clnt_gen.c
> getrpcbyname_r.c
> getrpcbyname.c
> clnt_udp.c
> -proto.h
> publickey.c
> svc_auth.c
> etc.rpc
> @@ -14212,20 +14187,16 @@ getrpcent_r.c
> rpc_common.c
> rpc_dtable.c
> clnt_unix.c
> -rpcgen.c
> auth_none.c
> -rpc_scan.c
> authuxprot.c
> svc_udp.c
> Versions
> test-rpcent.c
> svc_run.c
> key_prot.c
> -rpc_cout.c
> pm_getmaps.c
> xdr_ref.c
> getrpcbynumber.c
> -rpc_scan.h
> ChangeLog.old-ports-arm
> libc-abis
> configure.ac
OK.
> diff --git a/config.h.in b/config.h.in
> index 4693234552..b823c8e080 100644
> --- a/config.h.in
> +++ b/config.h.in
> @@ -169,10 +169,6 @@
> /* Define if multi-arch DSOs should be generated. */
> #undef USE_MULTIARCH
>
> -/* Define if obsolete RPC code should be made available for user-level code
> - to link against. */
> -#undef LINK_OBSOLETE_RPC
> -
OK.
> /* Define if Systemtap <sys/sdt.h> probes should be defined. */
> #undef USE_STAP_PROBE
>
> diff --git a/config.make.in b/config.make.in
> index cefb6d4a90..1ac9417245 100644
> --- a/config.make.in
> +++ b/config.make.in
> @@ -96,7 +96,6 @@ build-profile = @profile@
> build-static-nss = @static_nss@
> cross-compiling = @cross_compiling@
> force-install = @force_install@
> -link-obsolete-rpc = @link_obsolete_rpc@
OK.
> build-crypt = @build_crypt@
> build-nscd = @build_nscd@
> use-nscd = @use_nscd@
> diff --git a/configure b/configure
> index 793c0068cc..4795e721e5 100755
> --- a/configure
> +++ b/configure
> @@ -673,7 +673,6 @@ base_machine
> have_tunables
> build_pt_chown
> build_nscd
> -link_obsolete_rpc
> libc_cv_static_nss_crypt
> libc_cv_nss_crypt
> build_crypt
> @@ -784,7 +783,6 @@ enable_multi_arch
> enable_experimental_malloc
> enable_crypt
> enable_nss_crypt
> -enable_obsolete_rpc
> enable_systemtap
> enable_build_nscd
> enable_nscd
> @@ -1455,8 +1453,6 @@ Optional Features:
> --disable-crypt do not build nor install the passphrase hashing
> library, libcrypt
> --enable-nss-crypt enable libcrypt to use nss
> - --enable-obsolete-rpc build and install the obsolete RPC code for
> - link-time usage
> --enable-systemtap enable systemtap static probe points [default=no]
> --disable-build-nscd disable building and installing the nscd daemon
> --disable-nscd library functions will not contact the nscd daemon
> @@ -3636,20 +3632,6 @@ fi
>
>
>
> -# Check whether --enable-obsolete-rpc was given.
> -if test "${enable_obsolete_rpc+set}" = set; then :
> - enableval=$enable_obsolete_rpc; link_obsolete_rpc=$enableval
> -else
> - link_obsolete_rpc=no
> -fi
> -
> -
> -
> -if test "$link_obsolete_rpc" = yes; then
> - $as_echo "#define LINK_OBSOLETE_RPC 1" >>confdefs.h
> -
> -fi
> -
> # Check whether --enable-systemtap was given.
> if test "${enable_systemtap+set}" = set; then :
> enableval=$enable_systemtap; systemtap=$enableval
OK.
> diff --git a/configure.ac b/configure.ac
> index 33a1189804..93e68fb696 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -376,17 +376,6 @@ AC_SUBST(libc_cv_nss_crypt)
> AC_SUBST(libc_cv_static_nss_crypt)
>
>
> -AC_ARG_ENABLE([obsolete-rpc],
> - AC_HELP_STRING([--enable-obsolete-rpc],
> - [build and install the obsolete RPC code for link-time usage]),
> - [link_obsolete_rpc=$enableval],
> - [link_obsolete_rpc=no])
> -AC_SUBST(link_obsolete_rpc)
> -
> -if test "$link_obsolete_rpc" = yes; then
> - AC_DEFINE(LINK_OBSOLETE_RPC)
> -fi
OK.
> -
> AC_ARG_ENABLE([systemtap],
> [AS_HELP_STRING([--enable-systemtap],
> [enable systemtap static probe points @<:@default=no@:>@])],
> diff --git a/include/libc-symbols.h b/include/libc-symbols.h
> index 29483779fe..60153bb50d 100644
> --- a/include/libc-symbols.h
> +++ b/include/libc-symbols.h
> @@ -625,12 +625,7 @@ for linking")
> # define libc_hidden_tls_proto(name, attrs...) hidden_tls_proto (name, ##attrs)
> # define libc_hidden_def(name) hidden_def (name)
> # define libc_hidden_weak(name) hidden_weak (name)
> -# ifdef LINK_OBSOLETE_RPC
> - /* libc_hidden_nolink_sunrpc should only get used in sunrpc code. */
> -# define libc_hidden_nolink_sunrpc(name, version) hidden_def (name)
> -# else
> -# define libc_hidden_nolink_sunrpc(name, version) hidden_nolink (name, libc, version)
> -# endif
> +# define libc_hidden_nolink_sunrpc(name, version) hidden_nolink (name, libc, version)
OK.
> # define libc_hidden_ver(local, name) hidden_ver (local, name)
> # define libc_hidden_data_def(name) hidden_data_def (name)
> # define libc_hidden_tls_def(name) hidden_tls_def (name)
> diff --git a/include/shlib-compat.h b/include/shlib-compat.h
> index c8fc6925a0..b58281857a 100644
> --- a/include/shlib-compat.h
> +++ b/include/shlib-compat.h
> @@ -127,15 +127,9 @@
> #define compat_symbol_reference_2(local, symbol, name) \
> symbol_version_reference (local, symbol, name)
>
> -# ifdef LINK_OBSOLETE_RPC
> -/* Export the symbol for both static and dynamic linking. */
> -# define libc_sunrpc_symbol(name, aliasname, version) \
> - strong_alias (name, aliasname)
> -# else
> /* Export the symbol only for shared-library compatibility. */
> -# define libc_sunrpc_symbol(name, aliasname, version) \
> +#define libc_sunrpc_symbol(name, aliasname, version) \
> compat_symbol (libc, name, aliasname, version);
OK.
> -# endif
>
> /* The TEST_COMPAT macro acts just like the SHLIB_COMPAT macro except
> that it does not check IS_IN. It is used by tests that are testing
> diff --git a/malloc/thread-freeres.c b/malloc/thread-freeres.c
> index eb29d53310..268f1c3688 100644
> --- a/malloc/thread-freeres.c
> +++ b/malloc/thread-freeres.c
> @@ -22,6 +22,7 @@
> #include <rpc/rpc.h>
> #include <string.h>
> #include <tls-internal.h>
> +#include <shlib-compat.h>
OK.
>
> /* Thread shutdown function. Note that this function must be called
> for threads during shutdown for correctness reasons. Unlike
> @@ -30,7 +31,9 @@
> void
> __libc_thread_freeres (void)
> {
> - call_function_static_weak (__rpc_thread_destroy);
> +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
> + __rpc_thread_destroy ();
> +#endif
OK. If we have an older architecture we need to call this only if they
port has compat support for the older releases.
> call_function_static_weak (__res_thread_freeres);
> __glibc_tls_internal_free ();
>
> diff --git a/manual/nss.texi b/manual/nss.texi
> index 80e730768e..3aaa7786f8 100644
> --- a/manual/nss.texi
> +++ b/manual/nss.texi
> @@ -335,9 +335,7 @@ with a @code{+} character was found NIS was used. This kind of lookup
> was removed and now the default value for the services is @code{files}.
> libnss_compat no longer depends on libnsl and can be used without NIS.
>
> -For all other databases the default value is @code{files} unless
> -@theglibc{} was configured with @code{--enable-obsolete-rpc} option, in
> -which case it the default value is @code{nis [NOTFOUND=return] files}.
> +For all other databases the default value is @code{files}.
OK. Good and simple.
>
> @cindex optimizing NSS
> A second point is that the user should try to optimize the lookup
> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
> index 00ba6f6b11..8010716d36 100755
> --- a/scripts/build-many-glibcs.py
> +++ b/scripts/build-many-glibcs.py
> @@ -404,8 +404,6 @@ class Context(object):
> {'arch': 'i686', 'ccopts': '-m32 -march=i686'}],
> extra_glibcs=[{'variant': 'disable-multi-arch',
> 'cfg': ['--disable-multi-arch']},
> - {'variant': 'enable-obsolete',
> - 'cfg': ['--enable-obsolete-rpc']},
OK. Remove test variant.
> {'variant': 'static-pie',
> 'cfg': ['--enable-static-pie']},
> {'variant': 'x32-static-pie',
> @@ -419,10 +417,6 @@ class Context(object):
> 'arch': 'i686',
> 'ccopts': '-m32 -march=i686',
> 'cfg': ['--disable-multi-arch']},
> - {'variant': 'enable-obsolete',
> - 'arch': 'i686',
> - 'ccopts': '-m32 -march=i686',
> - 'cfg': ['--enable-obsolete-rpc']},
> {'arch': 'i486',
> 'ccopts': '-m32 -march=i486'},
> {'arch': 'i586',
> diff --git a/sunrpc/Makefile b/sunrpc/Makefile
> index 2d1861f3dc..82710b379a 100644
> --- a/sunrpc/Makefile
> +++ b/sunrpc/Makefile
> @@ -22,11 +22,13 @@ subdir := sunrpc
>
> include ../Makeconfig
>
> +ifdef have-GLIBC_2.31
OK. Versions.mk provides this.
> +
> # The code in this subdirectory is taken from Sun's RPCSRC-4.0
> # distribution with some additional changes from the TI-RPC package
> # which is also available from Sun. The files are heavily changed to
> # compile cleanly and to fit in the GNU environment. All the code
> -# from Sun's rpc, etc, and rpcgen subdirectories is in this directory;
> +# from Sun's rpc and etc subdirectories is in this directory;
> # the rpc subdirectory contains only the header files. Other than
> # that, several files were renamed so as not to exceed 14-character
> # file name limits:
> @@ -44,23 +46,6 @@ include ../Makeconfig
> # svc_auth_unix.c -> svc_authux.c
> # xdr_reference.c -> xdr_ref.c
>
> -rpcsvc = bootparam_prot.x nlm_prot.x rstat.x \
> - yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
> - rusers.x spray.x nfs_prot.x rquota.x key_prot.x
> -headers-sunrpc = $(addprefix rpc/,auth.h auth_unix.h clnt.h pmap_clnt.h \
> - pmap_prot.h pmap_rmt.h rpc.h rpc_msg.h \
> - svc.h svc_auth.h types.h xdr.h auth_des.h \
> - key_prot.h) \
> - $(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h
> -headers = rpc/netdb.h
> -generated += $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) $(rpcsvc:%.x=x%.stmp) \
> - $(rpcsvc:%.x=rpcsvc/%.stmp) rpcgen
> -generated-dirs += rpcsvc
> -
> -ifeq ($(link-obsolete-rpc),yes)
> -headers += $(headers-sunrpc)
> -endif
> -
> ifeq ($(build-shared),yes)
> need-export-routines := auth_des auth_unix clnt_gen clnt_perr clnt_tcp \
> clnt_udp get_myaddr key_call netname pm_getport \
> @@ -75,20 +60,9 @@ routines := auth_none authuxprot clnt_raw clnt_simp \
> des_crypt des_impl des_soft key_prot openchild rtime svcauth_des \
> clnt_unix svc_unix create_xid $(need-export-routines) \
> rpc_gethostbyname
> -ifneq ($(link-obsolete-rpc),yes)
> # We only add the RPC for compatibility to libc.so.
> shared-only-routines = $(routines)
> endif
> -endif
> -
> -ifeq ($(link-obsolete-rpc),yes)
> -install-bin := rpcgen
> -rpcgen-objs = rpc_main.o rpc_hout.o rpc_cout.o rpc_parse.o \
> - rpc_scan.o rpc_util.o rpc_svcout.o rpc_clntout.o \
> - rpc_tblout.o rpc_sample.o
> -extra-objs = $(rpcgen-objs) $(addprefix cross-,$(rpcgen-objs))
> -others += rpcgen
> -endif
OK.
>
> tests = tst-xdrmem tst-xdrmem2 test-rpcent tst-udp-error tst-udp-timeout \
> tst-udp-nonblocking
> @@ -100,22 +74,6 @@ tests += tst-udp-garbage
> tests-internal += tst-svc_register
> endif
>
> -ifeq ($(run-built-tests),yes)
> -ifeq ($(link-obsolete-rpc),yes)
> -rpcgen-tests := $(objpfx)bug20790.out
> -tests-special += $(rpcgen-tests)
> -endif
> -endif
> -
> -ifeq ($(link-obsolete-rpc),yes)
> -headers += $(rpcsvc:%.x=rpcsvc/%.h)
> -extra-libs := librpcsvc
> -extra-libs-others := librpcsvc # Make it in `others' pass, not `lib' pass.
> -librpcsvc-routines = $(rpcsvc:%.x=x%)
> -librpcsvc-inhibit-o = .os # Build no shared rpcsvc library.
> -omit-deps = $(librpcsvc-routines)
> -endif
OK.
> -
> ifeq (yes,$(build-shared))
> rpc-compat-routines = $(addprefix compat-,$(need-export-routines))
> rpc-compat-routines.os = $(addprefix $(objpfx), \
> @@ -133,19 +91,6 @@ $(rpc-compat-routines.os): $(objpfx)compat-%.os: %.c $(before-compile)
> $(compile-command.c) -DEXPORT_RPC_SYMBOLS
> endif
>
> -CFLAGS-xbootparam_prot.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xnlm_prot.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xrstat.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xyppasswd.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xklm_prot.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xrex.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xsm_inter.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xmount.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xrusers.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xspray.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xnfs_prot.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xrquota.c += -Wno-unused $(PIC-ccflag)
> -CFLAGS-xkey_prot.c += -Wno-unused $(PIC-ccflag)
OK.
> CFLAGS-auth_unix.c += -fexceptions
> CFLAGS-key_call.c += -fexceptions
> CFLAGS-pmap_rmt.c += -fexceptions
> @@ -159,83 +104,26 @@ $(objpfx)tst-udp-error: $(common-objpfx)linkobj/libc.so
> $(objpfx)tst-svc_register: \
> $(common-objpfx)linkobj/libc.so $(shared-thread-library)
>
> -$(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs))
> -
> -cross-rpcgen-objs := $(addprefix $(objpfx)cross-,$(rpcgen-objs))
> -
> -# When generic makefile support for build system programs is
> -# available, it should replace this code. See
> -# <https://sourceware.org/bugzilla/show_bug.cgi?id=14087>.
> -$(cross-rpcgen-objs): $(objpfx)cross-%.o: %.c $(before-compile)
> - $(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) $< \
> - $(OUTPUT_OPTION) $(native-compile-mkdep-flags) -c
> -
> -$(objpfx)cross-rpcgen: $(cross-rpcgen-objs)
> - $(BUILD_CC) $^ $(BUILD_LDFLAGS) -o $@
> -
> -# This makes sure -DIN_MODULE is passed for all these modules.
> -cpp-srcs-left := $(rpcgen-objs:.o=.c)
> -lib := nonlib
> -include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left))
> -
> -# How we run rpcgen to generate sources and headers in the rules below.
> -# Setting CPP tells it how to run the C preprocessor correctly. Note
> -# that $(built-program-file) requires that the just-built cross-rpcgen
> -# binary be the second dependency listed in each rule using rpcgen-cmd.
> -rpcgen-cmd = CPP='$(CC) -E -x c-header' $(built-program-file) -Y ../scripts
> -
> -\f
> -# Generate the rpcsvc headers with rpcgen.
> -# We use a stamp file to avoid unnessary recompilation each time rpcgen is
> -# relinked.
> -$(rpcsvc:%.x=$(objpfx)rpcsvc/%.h): $(objpfx)rpcsvc/%.h: $(objpfx)rpcsvc/%.stmp
> - @:
> -$(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(objpfx)cross-rpcgen
> - $(make-target-directory)
> - -@rm -f ${@:stmp=T} $@
> - $(rpcgen-cmd) -h $< -o ${@:stmp=T}
> - $(move-if-change) $(@:stmp=T) $(@:stmp=h)
> - touch $@
> -
> -# Generate the rpcsvc XDR functions with rpcgen.
> -$(rpcsvc:%.x=$(objpfx)x%.c): $(objpfx)x%.c: $(objpfx)x%.stmp
> - @:
> -$(objpfx)x%.stmp: rpcsvc/%.x $(objpfx)cross-rpcgen
> - -@rm -f ${@:stmp=T} $@
> - $(rpcgen-cmd) -c $< -o ${@:stmp=T}
> - $(move-if-change) $(@:stmp=T) $(@:stmp=c)
> - touch $@
> -
> -# The generated source files depend on the corresponding generated headers.
> -# Gratuitous dependency on generated .c file here just gets it mentioned to
> -# avoid being an intermediate file and getting removed.
> -define o-iterator-doit
> -$(rpcsvc:%.x=$(objpfx)x%$o): $(objpfx)x%$o: $(objpfx)x%.c $(objpfx)rpcsvc/%.h
> -endef
> -object-suffixes-left = $(filter-out $(librpcsvc-inhibit-o),$(object-suffixes))
> -include $(o-iterator)
> -
> -rpcsvc-dt-files := $(foreach o,$(filter-out $(librpcsvc-inhibit-o),\
> - $(object-suffixes)),\
> - $(rpcsvc:%.x=$(objpfx)x%$o.dt))
> -rpcsvc-depfiles := $(patsubst %.dt,%.d,$(wildcard $(rpcsvc-dt-files))) \
> - $(wildcard $(rpcsvc-dt-files:.dt=.d))
> -ifdef rpcsvc-depfiles
> -ifneq ($(no_deps),t)
> --include $(rpcsvc-depfiles)
> -endif
> -endif
> -
> $(objpfx)thrsvc: $(common-objpfx)linkobj/libc.so $(shared-thread-library)
>
> -ifeq ($(run-built-tests),yes)
> -$(rpcgen-tests): $(objpfx)%.out: %.x $(objpfx)rpcgen
> - -rm -f $@
> - $(built-program-cmd) -c $< -o $@; \
> - $(evaluate-test)
> -endif
> -
> $(objpfx)tst-udp-timeout: $(common-objpfx)linkobj/libc.so
> $(objpfx)tst-udp-nonblocking: $(common-objpfx)linkobj/libc.so
> $(objpfx)tst-udp-garbage: \
> $(common-objpfx)linkobj/libc.so $(shared-thread-library)
> +
> +else # !have-GLIBC_2.31
> +
> +routines = $(routines-for-nss)
> +
> +include ../Rules
> +
> +ifeq (yes,$(build-shared))
> +# Create an empty archive, so that Makerules can reference it.
> +subdir_lib: $(objpfx)librpc_compat_pic.a
> +$(objpfx)librpc_compat_pic.a: Makefile
> + $(make-target-directory)
> + $(AR) cr $@
> +endif
> +
> +
> +endif # !have-GLIBC_2.31
OK.
> diff --git a/sunrpc/bug20790.x b/sunrpc/bug20790.x
> deleted file mode 100644
> index a00c9b3830..0000000000
> --- a/sunrpc/bug20790.x
> +++ /dev/null
> @@ -1 +0,0 @@
> -program TPROG { version TVERS { int FUNC(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) = 1; } = 1; } = 1;
> diff --git a/sunrpc/proto.h b/sunrpc/proto.h
> deleted file mode 100644
OK.
> index ea28565b1e..0000000000
> --- a/sunrpc/proto.h
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/****** rpc_clntout.c ******/
> -
> -void write_stubs(void);
> -void printarglist(proc_list *proc, const char *result,
> - const char *addargname, const char *addargtype);
> -
> -/****** rpc_cout.c ******/
> -
> -void emit (definition *def);
> -
> -/****** rpc_hout.c ******/
> -
> -void print_datadef(definition *def);
> -void print_funcdef(definition *def);
> -void pxdrfuncdecl(const char *name, int pointerp);
> -void pprocdef(proc_list *proc, version_list *vp,
> - const char *addargtype, int server_p, int mode);
> -void pdeclaration(const char *name, declaration *dec, int tab,
> - const char *separator);
> -void print_xdr_func_def (char* name, int pointerp, int i);
> -
> -/****** rpc_main.c ******/
> - /* nil */
> -
> -/****** rpc_parse.c ******/
> -definition *get_definition(void);
> -
> -/****** rpc_sample.c ******/
> -void write_sample_svc(definition *def);
> -int write_sample_clnt(definition *def);
> -void add_sample_msg(void);
> -void write_sample_clnt_main(void);
> -
> -/****** rpc_scan.c ******/
> - /* see rpc_scan.h */
> -
> -/****** rpc_svcout.c ******/
> -int nullproc(const proc_list *proc);
> -void write_svc_aux(int nomain);
> -void write_msg_out(void);
> -
> -/****** rpc_tblout.c ******/
> -void write_tables(void);
> -
> -/****** rpc_util.c ******/
> -void reinitialize(void);
> -int streq(const char *a, const char *b);
> -void error(const char *msg) __attribute__ ((noreturn));
> -void crash(void) __attribute__ ((noreturn));
> -void tabify(FILE *f, int tab);
> -char *make_argname(const char *pname, const char *vname);
> -void add_type(int len, const char *type);
> -
> -/* This header is the last one included in all rpc_*.c files,
> - so we define stuff for cross-rpcgen here to avoid conflicts with
> - $build's C library and $host's glibc. */
> -
> -#ifdef IS_IN_build
> -
> -/* Disable translated messages when built for $build and used in
> - building glibc. */
> -#define _(X) (X)
> -#define textdomain(X) ((void) 0)
> -
> -#endif
> diff --git a/sunrpc/rpc_clntout.c b/sunrpc/rpc_clntout.c
> deleted file mode 100644
> index ce4d2a4c95..0000000000
> --- a/sunrpc/rpc_clntout.c
> +++ /dev/null
> @@ -1,333 +0,0 @@
> -/*
> - * rpc_clntout.c, Client-stub outputter for the RPC protocol compiler
> - * Copyright (c) 2010, Oracle America, Inc.
> - *
> - * 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 the "Oracle America, 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.
> - */
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc/types.h"
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -#define DEFAULT_TIMEOUT 25 /* in seconds */
> -static const char RESULT[] = "clnt_res";
> -
> -static void write_program (definition * def);
> -static void printbody (proc_list * proc);
> -static const char *ampr (const char *type);
> -static void printbody (proc_list * proc);
> -
> -
> -void
> -write_stubs (void)
> -{
> - list *l;
> - definition *def;
> -
> - fprintf (fout,
> - "\n/* Default timeout can be changed using clnt_control() */\n");
> - fprintf (fout, "static struct timeval TIMEOUT = { %d, 0 };\n",
> - DEFAULT_TIMEOUT);
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - write_program (def);
> - }
> - }
> -}
> -
> -static void
> -write_program (definition * def)
> -{
> - version_list *vp;
> - proc_list *proc;
> -
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - fprintf (fout, "\n");
> - if (mtflag == 0)
> - {
> - ptype (proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*\n");
> - pvname (proc->proc_name, vp->vers_num);
> - printarglist (proc, RESULT, "clnt", "CLIENT *");
> - }
> - else
> - {
> - fprintf (fout, "enum clnt_stat \n");
> - pvname (proc->proc_name, vp->vers_num);
> - printarglist (proc, RESULT, "clnt", "CLIENT *");
> - }
> - fprintf (fout, "{\n");
> - printbody (proc);
> - fprintf (fout, "}\n");
> - }
> - }
> -}
> -
> -/* Writes out declarations of procedure's argument list.
> - In either ANSI C style, in one of old rpcgen style (pass by reference),
> - or new rpcgen style (multiple arguments, pass by value);
> - */
> -
> -/* sample addargname = "clnt"; sample addargtype = "CLIENT * " */
> -
> -void
> -printarglist (proc_list * proc, const char *result,
> - const char *addargname, const char *addargtype)
> -{
> -
> - decl_list *l;
> -
> - if (!newstyle)
> - { /* old style: always pass argument by reference */
> - if (Cflag)
> - { /* C++ style heading */
> - fprintf (fout, "(");
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 1);
> -
> - if (mtflag)
> - {/* Generate result field */
> - fprintf (fout, "*argp, ");
> - ptype(proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*%s, %s%s)\n", result, addargtype, addargname);
> - }
> - else
> - fprintf (fout, "*argp, %s%s)\n", addargtype, addargname);
> - }
> - else
> - {
> - if (!mtflag)
> - fprintf (fout, "(argp, %s)\n", addargname);
> - else
> - fprintf (fout, "(argp, %s, %s)\n", result, addargname);
> - fprintf (fout, "\t");
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 1);
> - fprintf (fout, "*argp;\n");
> - if (mtflag)
> - {
> - fprintf (fout, "\t");
> - ptype (proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*%s;\n", result);
> - }
> - }
> - }
> - else if (streq (proc->args.decls->decl.type, "void"))
> - {
> - /* newstyle, 0 argument */
> - if (mtflag)
> - {
> - fprintf (fout, "(");
> - if (Cflag)
> - {
> - ptype(proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*%s, %s%s)\n", result, addargtype, addargname);
> - }
> - else
> - fprintf (fout, "(%s)\n", addargname);
> - }
> - else if (Cflag)
> - fprintf (fout, "(%s%s)\n", addargtype, addargname);
> - else
> - fprintf (fout, "(%s)\n", addargname);
> - }
> - else
> - {
> - /* new style, 1 or multiple arguments */
> - if (!Cflag)
> - {
> - fprintf (fout, "(");
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - fprintf (fout, "%s, ", l->decl.name);
> - if (mtflag)
> - fprintf (fout, "%s, ", result);
> - fprintf (fout, "%s)\n", addargname);
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - {
> - pdeclaration (proc->args.argname, &l->decl, 1, ";\n");
> - }
> - if (mtflag)
> - {
> - fprintf (fout, "\t");
> - ptype (proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*%s;\n", result);
> - }
> - }
> - else
> - { /* C++ style header */
> - fprintf (fout, "(");
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - {
> - pdeclaration (proc->args.argname, &l->decl, 0, ", ");
> - }
> - if (mtflag)
> - {
> - ptype (proc->res_prefix, proc->res_type, 1);
> - fprintf (fout, "*%s, ", result);
> - }
> - fprintf (fout, " %s%s)\n", addargtype, addargname);
> - }
> - }
> -
> - if (!Cflag)
> - fprintf (fout, "\t%s%s;\n", addargtype, addargname);
> -}
> -
> -
> -static
> -const char *
> -ampr (const char *type)
> -{
> - if (isvectordef (type, REL_ALIAS))
> - {
> - return "";
> - }
> - else
> - {
> - return "&";
> - }
> -}
> -
> -static void
> -printbody (proc_list * proc)
> -{
> - decl_list *l;
> - bool_t args2 = (proc->arg_num > 1);
> -/* int i; */
> -
> - /* For new style with multiple arguments, need a structure in which
> - to stuff the arguments. */
> - if (newstyle && args2)
> - {
> - fprintf (fout, "\t%s", proc->args.argname);
> - fprintf (fout, " arg;\n");
> - }
> - if (!mtflag)
> - {
> - fprintf (fout, "\tstatic ");
> - if (streq (proc->res_type, "void"))
> - {
> - fprintf (fout, "char ");
> - }
> - else
> - {
> - ptype (proc->res_prefix, proc->res_type, 0);
> - }
> - fprintf (fout, "%s;\n", RESULT);
> - fprintf (fout, "\n");
> - fprintf (fout, "\tmemset((char *)%s%s, 0, sizeof(%s));\n",
> - ampr (proc->res_type), RESULT, RESULT);
> - }
> - if (newstyle && !args2 && (streq (proc->args.decls->decl.type, "void")))
> - {
> - /* newstyle, 0 arguments */
> - if (mtflag)
> - fprintf (fout, "\t return ");
> - else
> - fprintf (fout, "\t if ");
> - fprintf (fout,
> - "(clnt_call (clnt, %s, (xdrproc_t) xdr_void, ", proc->proc_name);
> -
> - fprintf (fout,
> - "(caddr_t) NULL,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,",
> - stringfix(proc->res_type), (mtflag)?"":ampr(proc->res_type),
> - RESULT);
> - if (mtflag)
> - fprintf (fout, "\n\t\tTIMEOUT));\n\n");
> - else
> - fprintf (fout, "\n\t\tTIMEOUT) != RPC_SUCCESS) {\n");
> - }
> - else if (newstyle && args2)
> - {
> - /* newstyle, multiple arguments: stuff arguments into structure */
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - {
> - fprintf (fout, "\targ.%s = %s;\n",
> - l->decl.name, l->decl.name);
> - }
> - if (mtflag)
> - fprintf (fout, "\treturn ");
> - else
> - fprintf (fout, "\tif ");
> -
> - fprintf (fout,
> - "(clnt_call (clnt, %s, (xdrproc_t) xdr_%s", proc->proc_name,
> - proc->args.argname);
> - fprintf (fout,
> - ", (caddr_t) &arg,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,",
> - stringfix(proc->res_type), (mtflag)?"":ampr(proc->res_type),
> - RESULT);
> - if (mtflag)
> - fprintf (fout, "\n\t\tTIMEOUT));\n");
> - else
> - fprintf (fout, "\n\t\tTIMEOUT) != RPC_SUCCESS) {\n");
> - }
> - else
> - { /* single argument, new or old style */
> - if (!mtflag)
> - fprintf (fout,
> - "\tif (clnt_call (clnt, %s,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,\n\t\tTIMEOUT) != RPC_SUCCESS) {\n",
> - proc->proc_name,
> - stringfix (proc->args.decls->decl.type),
> - (newstyle ? "&" : ""),
> - (newstyle ? proc->args.decls->decl.name : "argp"),
> - stringfix (proc->res_type), ampr (proc->res_type),
> - RESULT);
> - else
> - fprintf(fout,
> - "\treturn (clnt_call(clnt, %s,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,\n\t\t(xdrproc_t) xdr_%s, (caddr_t) %s%s,\n\t\tTIMEOUT));\n",
> - proc->proc_name,
> - stringfix (proc->args.decls->decl.type),
> - (newstyle ? "&" : ""),
> - (newstyle ? proc->args.decls->decl.name : "argp"),
> - stringfix (proc->res_type), "",
> - RESULT);
> - }
> - if (!mtflag)
> - {
> - fprintf (fout, "\t\treturn (NULL);\n");
> - fprintf (fout, "\t}\n");
> - if (streq (proc->res_type, "void"))
> - {
> - fprintf (fout, "\treturn ((void *)%s%s);\n",
> - ampr (proc->res_type), RESULT);
> - }
> - else
> - {
> - fprintf (fout, "\treturn (%s%s);\n", ampr (proc->res_type), RESULT);
> - }
> - }
> -}
> diff --git a/sunrpc/rpc_cout.c b/sunrpc/rpc_cout.c
> deleted file mode 100644
> index db7b571b33..0000000000
> --- a/sunrpc/rpc_cout.c
> +++ /dev/null
> @@ -1,811 +0,0 @@
> -/*
> - * From: @(#)rpc_cout.c 1.13 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_cout.c, XDR routine outputter for the RPC protocol compiler
> - */
> -#include <ctype.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -static void emit_enum (definition * def);
> -static void emit_program (const definition * def);
> -static void emit_union (const definition * def);
> -static void emit_struct (definition * def);
> -static void emit_typedef (const definition * def);
> -static void emit_inline (int indent, declaration * decl, int flag);
> -static void emit_single_in_line (int indent, declaration *decl, int flag,
> - relation rel);
> -static int findtype (const definition * def, const char *type);
> -static int undefined (const char *type);
> -static void print_generic_header (const char *procname, int pointerp);
> -static void print_ifopen (int indent, const char *name);
> -static void print_ifarg (const char *arg);
> -static void print_ifsizeof (int indent, const char *prefix, const char *type);
> -static void print_ifclose (int indent);
> -static void print_ifstat (int indent, const char *prefix, const char *type,
> - relation rel, const char *amax,
> - const char *objname, const char *name);
> -static void print_stat (int indent, const declaration * dec);
> -static void print_header (const definition * def);
> -static void print_trailer (void);
> -static char *upcase (const char *str);
> -
> -/*
> - * Emit the C-routine for the given definition
> - */
> -void
> -emit (definition * def)
> -{
> - if (def->def_kind == DEF_CONST)
> - {
> - return;
> - }
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - emit_program (def);
> - return;
> - }
> - if (def->def_kind == DEF_TYPEDEF)
> - {
> - /* now we need to handle declarations like
> - struct typedef foo foo;
> - since we don't want this to be expanded
> - into 2 calls to xdr_foo */
> -
> - if (strcmp (def->def.ty.old_type, def->def_name) == 0)
> - return;
> - };
> -
> - print_header (def);
> - switch (def->def_kind)
> - {
> - case DEF_UNION:
> - emit_union (def);
> - break;
> - case DEF_ENUM:
> - emit_enum (def);
> - break;
> - case DEF_STRUCT:
> - emit_struct (def);
> - break;
> - case DEF_TYPEDEF:
> - emit_typedef (def);
> - break;
> - default:
> - /* can't happen */
> - break;
> - }
> - print_trailer ();
> -}
> -
> -static int
> -findtype (const definition * def, const char *type)
> -{
> - if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST)
> - {
> - return 0;
> - }
> - else
> - {
> - return (streq (def->def_name, type));
> - }
> -}
> -
> -static int
> -undefined (const char *type)
> -{
> - definition *def;
> - def = (definition *) FINDVAL (defined, type, findtype);
> - return (def == NULL);
> -}
> -
> -
> -static void
> -print_generic_header (const char *procname, int pointerp)
> -{
> - f_print (fout, "\n");
> - f_print (fout, "bool_t\n");
> - if (Cflag)
> - {
> - f_print (fout, "xdr_%s (", procname);
> - f_print (fout, "XDR *xdrs, ");
> - f_print (fout, "%s ", procname);
> - if (pointerp)
> - f_print (fout, "*");
> - f_print (fout, "objp)\n{\n");
> - }
> - else
> - {
> - f_print (fout, "xdr_%s (xdrs, objp)\n", procname);
> - f_print (fout, "\tXDR *xdrs;\n");
> - f_print (fout, "\t%s ", procname);
> - if (pointerp)
> - f_print (fout, "*");
> - f_print (fout, "objp;\n{\n");
> - }
> -}
> -
> -static void
> -print_header (const definition * def)
> -{
> - print_generic_header (def->def_name,
> - def->def_kind != DEF_TYPEDEF ||
> - !isvectordef (def->def.ty.old_type,
> - def->def.ty.rel));
> -
> - /* Now add Inline support */
> -
> - if (inlineflag == 0)
> - return;
> - /*May cause lint to complain. but ... */
> - f_print (fout, "\tregister int32_t *buf;\n\n");
> -}
> -
> -static void
> -print_prog_header (const proc_list * plist)
> -{
> - print_generic_header (plist->args.argname, 1);
> -}
> -
> -static void
> -print_trailer (void)
> -{
> - f_print (fout, "\treturn TRUE;\n");
> - f_print (fout, "}\n");
> -}
> -
> -
> -static void
> -print_ifopen (int indent, const char *name)
> -{
> - tabify (fout, indent);
> - f_print (fout, " if (!xdr_%s (xdrs", name);
> -}
> -
> -static void
> -print_ifarg (const char *arg)
> -{
> - f_print (fout, ", %s", arg);
> -}
> -
> -static void
> -print_ifsizeof (int indent, const char *prefix, const char *type)
> -{
> - if (indent)
> - {
> - fprintf (fout, ",\n");
> - tabify (fout, indent);
> - }
> - else
> - fprintf (fout, ", ");
> -
> - if (streq (type, "bool"))
> - fprintf (fout, "sizeof (bool_t), (xdrproc_t) xdr_bool");
> - else
> - {
> - fprintf (fout, "sizeof (");
> - if (undefined (type) && prefix)
> - {
> - f_print (fout, "%s ", prefix);
> - }
> - fprintf (fout, "%s), (xdrproc_t) xdr_%s", type, type);
> - }
> -}
> -
> -static void
> -print_ifclose (int indent)
> -{
> - f_print (fout, "))\n");
> - tabify (fout, indent);
> - f_print (fout, "\t return FALSE;\n");
> -}
> -
> -static void
> -print_ifstat (int indent, const char *prefix, const char *type, relation rel,
> - const char *amax, const char *objname, const char *name)
> -{
> - const char *alt = NULL;
> -
> - switch (rel)
> - {
> - case REL_POINTER:
> - print_ifopen (indent, "pointer");
> - print_ifarg ("(char **)");
> - f_print (fout, "%s", objname);
> - print_ifsizeof (0, prefix, type);
> - break;
> - case REL_VECTOR:
> - if (streq (type, "string"))
> - {
> - alt = "string";
> - }
> - else if (streq (type, "opaque"))
> - {
> - alt = "opaque";
> - }
> - if (alt)
> - {
> - print_ifopen (indent, alt);
> - print_ifarg (objname);
> - }
> - else
> - {
> - print_ifopen (indent, "vector");
> - print_ifarg ("(char *)");
> - f_print (fout, "%s", objname);
> - }
> - print_ifarg (amax);
> - if (!alt)
> - {
> - print_ifsizeof (indent + 1, prefix, type);
> - }
> - break;
> - case REL_ARRAY:
> - if (streq (type, "string"))
> - {
> - alt = "string";
> - }
> - else if (streq (type, "opaque"))
> - {
> - alt = "bytes";
> - }
> - if (streq (type, "string"))
> - {
> - print_ifopen (indent, alt);
> - print_ifarg (objname);
> - }
> - else
> - {
> - if (alt)
> - {
> - print_ifopen (indent, alt);
> - }
> - else
> - {
> - print_ifopen (indent, "array");
> - }
> - print_ifarg ("(char **)");
> - if (*objname == '&')
> - {
> - f_print (fout, "%s.%s_val, (u_int *) %s.%s_len",
> - objname, name, objname, name);
> - }
> - else
> - {
> - f_print (fout, "&%s->%s_val, (u_int *) &%s->%s_len",
> - objname, name, objname, name);
> - }
> - }
> - print_ifarg (amax);
> - if (!alt)
> - {
> - print_ifsizeof (indent + 1, prefix, type);
> - }
> - break;
> - case REL_ALIAS:
> - print_ifopen (indent, type);
> - print_ifarg (objname);
> - break;
> - }
> - print_ifclose (indent);
> -}
> -
> -static void
> -emit_enum (definition * def)
> -{
> - (void) def;
> -
> - print_ifopen (1, "enum");
> - print_ifarg ("(enum_t *) objp");
> - print_ifclose (1);
> -}
> -
> -static void
> -emit_program (const definition * def)
> -{
> - decl_list *dl;
> - version_list *vlist;
> - proc_list *plist;
> -
> - for (vlist = def->def.pr.versions; vlist != NULL; vlist = vlist->next)
> - for (plist = vlist->procs; plist != NULL; plist = plist->next)
> - {
> - if (!newstyle || plist->arg_num < 2)
> - continue; /* old style, or single argument */
> - print_prog_header (plist);
> - for (dl = plist->args.decls; dl != NULL;
> - dl = dl->next)
> - print_stat (1, &dl->decl);
> - print_trailer ();
> - }
> -}
> -
> -static void
> -emit_union (const definition * def)
> -{
> - declaration *dflt;
> - case_list *cl;
> - declaration *cs;
> - char *object;
> - const char *vecformat = "objp->%s_u.%s";
> - const char *format = "&objp->%s_u.%s";
> -
> - print_stat (1, &def->def.un.enum_decl);
> - f_print (fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name);
> - for (cl = def->def.un.cases; cl != NULL; cl = cl->next)
> - {
> -
> - f_print (fout, "\tcase %s:\n", cl->case_name);
> - if (cl->contflag == 1) /* a continued case statement */
> - continue;
> - cs = &cl->case_decl;
> - if (!streq (cs->type, "void"))
> - {
> - object = alloc (strlen (def->def_name) + strlen (format) +
> - strlen (cs->name) + 1);
> - if (isvectordef (cs->type, cs->rel))
> - {
> - s_print (object, vecformat, def->def_name,
> - cs->name);
> - }
> - else
> - {
> - s_print (object, format, def->def_name,
> - cs->name);
> - }
> - print_ifstat (2, cs->prefix, cs->type, cs->rel, cs->array_max,
> - object, cs->name);
> - free (object);
> - }
> - f_print (fout, "\t\tbreak;\n");
> - }
> - dflt = def->def.un.default_decl;
> - if (dflt != NULL)
> - {
> - if (!streq (dflt->type, "void"))
> - {
> - f_print (fout, "\tdefault:\n");
> - object = alloc (strlen (def->def_name) + strlen (format) +
> - strlen (dflt->name) + 1);
> - if (isvectordef (dflt->type, dflt->rel))
> - {
> - s_print (object, vecformat, def->def_name,
> - dflt->name);
> - }
> - else
> - {
> - s_print (object, format, def->def_name,
> - dflt->name);
> - }
> -
> - print_ifstat (2, dflt->prefix, dflt->type, dflt->rel,
> - dflt->array_max, object, dflt->name);
> - free (object);
> - f_print (fout, "\t\tbreak;\n");
> - }
> - else
> - {
> - f_print (fout, "\tdefault:\n");
> - f_print (fout, "\t\tbreak;\n");
> - }
> - }
> - else
> - {
> - f_print (fout, "\tdefault:\n");
> - f_print (fout, "\t\treturn FALSE;\n");
> - }
> -
> - f_print (fout, "\t}\n");
> -}
> -
> -static void
> -inline_struct (definition *def, int flag)
> -{
> - decl_list *dl;
> - int i, size;
> - decl_list *cur = NULL;
> - decl_list *psav;
> - bas_type *ptr;
> - char *sizestr;
> - const char *plus;
> - char ptemp[256];
> - int indent = 1;
> -
> - if (flag == PUT)
> - f_print (fout, "\n\tif (xdrs->x_op == XDR_ENCODE) {\n");
> - else
> - f_print (fout,
> - "\t\treturn TRUE;\n\t} else if (xdrs->x_op == XDR_DECODE) {\n");
> -
> - i = 0;
> - size = 0;
> - sizestr = NULL;
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - { /* xxx */
> - /* now walk down the list and check for basic types */
> - if ((dl->decl.prefix == NULL) &&
> - ((ptr = find_type (dl->decl.type)) != NULL) &&
> - ((dl->decl.rel == REL_ALIAS) || (dl->decl.rel == REL_VECTOR)))
> - {
> - if (i == 0)
> - cur = dl;
> - ++i;
> -
> - if (dl->decl.rel == REL_ALIAS)
> - size += ptr->length;
> - else
> - {
> - /* this is required to handle arrays */
> - if (sizestr == NULL)
> - plus = "";
> - else
> - plus = "+ ";
> -
> - if (ptr->length != 1)
> - s_print (ptemp, " %s %s * %d", plus, dl->decl.array_max,
> - ptr->length);
> - else
> - s_print (ptemp, " %s%s ", plus, dl->decl.array_max);
> -
> - /*now concatenate to sizestr !!!! */
> - if (sizestr == NULL)
> - sizestr = strdup (ptemp);
> - else
> - {
> - sizestr = realloc (sizestr, strlen (sizestr) +
> - strlen (ptemp) + 1);
> - if (sizestr == NULL)
> - {
> - f_print (stderr, "Fatal error : no memory \n");
> - crash ();
> - };
> - sizestr = strcat (sizestr, ptemp);
> - /*build up length of array */
> - }
> - }
> - }
> - else
> - {
> - if (i > 0)
> - {
> - if (sizestr == NULL && size < inlineflag)
> - {
> - /* don't expand into inline code if size < inlineflag */
> - while (cur != dl)
> - {
> - print_stat (indent + 1, &cur->decl);
> - cur = cur->next;
> - }
> - }
> - else
> - {
> - /* were already looking at a xdr_inlineable structure */
> - tabify (fout, indent + 1);
> - if (sizestr == NULL)
> - f_print (fout, "buf = XDR_INLINE (xdrs, %d * BYTES_PER_XDR_UNIT);", size);
> - else if (size == 0)
> - f_print (fout,
> - "buf = XDR_INLINE (xdrs, (%s) * BYTES_PER_XDR_UNIT);",
> - sizestr);
> - else
> - f_print (fout,
> - "buf = XDR_INLINE (xdrs, (%d + (%s)) * BYTES_PER_XDR_UNIT);",
> - size, sizestr);
> - f_print (fout, "\n");
> - tabify (fout, indent + 1);
> - fprintf (fout, "if (buf == NULL) {\n");
> - psav = cur;
> - while (cur != dl)
> - {
> - print_stat (indent + 2, &cur->decl);
> - cur = cur->next;
> - }
> -
> - f_print (fout, "\n\t\t} else {\n");
> - cur = psav;
> - while (cur != dl)
> - {
> - emit_inline (indent + 1, &cur->decl, flag);
> - cur = cur->next;
> - }
> - tabify (fout, indent + 1);
> - f_print (fout, "}\n");
> - }
> - }
> - size = 0;
> - i = 0;
> - free (sizestr);
> - sizestr = NULL;
> - print_stat (indent + 1, &dl->decl);
> - }
> - }
> - if (i > 0)
> - {
> - if (sizestr == NULL && size < inlineflag)
> - {
> - /* don't expand into inline code if size < inlineflag */
> - while (cur != dl)
> - {
> - print_stat (indent + 1, &cur->decl);
> - cur = cur->next;
> - }
> - }
> - else
> - {
> - /* were already looking at a xdr_inlineable structure */
> - if (sizestr == NULL)
> - f_print (fout,
> - "\t\tbuf = XDR_INLINE (xdrs, %d * BYTES_PER_XDR_UNIT);",
> - size);
> - else if (size == 0)
> - f_print (fout,
> - "\t\tbuf = XDR_INLINE (xdrs, (%s) * BYTES_PER_XDR_UNIT);",
> - sizestr);
> - else
> - f_print (fout,
> - "\t\tbuf = XDR_INLINE (xdrs, (%d + %s)* BYTES_PER_XDR_UNIT);",
> - size, sizestr);
> - f_print (fout, "\n\t\tif (buf == NULL) {\n");
> - psav = cur;
> - while (cur != NULL)
> - {
> - print_stat (indent + 2, &cur->decl);
> - cur = cur->next;
> - }
> - f_print (fout, "\t\t} else {\n");
> -
> - cur = psav;
> - while (cur != dl)
> - {
> - emit_inline (indent + 2, &cur->decl, flag);
> - cur = cur->next;
> - }
> - f_print (fout, "\t\t}\n");
> - }
> - }
> -}
> -
> -/* this may be const. i haven't traced this one through yet. */
> -
> -static void
> -emit_struct (definition * def)
> -{
> - decl_list *dl;
> - int j, size, flag;
> - bas_type *ptr;
> - int can_inline;
> -
> -
> - if (inlineflag == 0)
> - {
> - /* No xdr_inlining at all */
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - print_stat (1, &dl->decl);
> - return;
> - }
> -
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - if (dl->decl.rel == REL_VECTOR)
> - {
> - f_print (fout, "\tint i;\n");
> - break;
> - }
> -
> - size = 0;
> - can_inline = 0;
> - /*
> - * Make a first pass and see if inling is possible.
> - */
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - if ((dl->decl.prefix == NULL) &&
> - ((ptr = find_type (dl->decl.type)) != NULL) &&
> - ((dl->decl.rel == REL_ALIAS) || (dl->decl.rel == REL_VECTOR)))
> - {
> - if (dl->decl.rel == REL_ALIAS)
> - size += ptr->length;
> - else
> - {
> - can_inline = 1;
> - break; /* can be inlined */
> - }
> - }
> - else
> - {
> - if (size >= inlineflag)
> - {
> - can_inline = 1;
> - break; /* can be inlined */
> - }
> - size = 0;
> - }
> - if (size > inlineflag)
> - can_inline = 1;
> -
> - if (can_inline == 0)
> - { /* can not inline, drop back to old mode */
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - print_stat (1, &dl->decl);
> - return;
> - };
> -
> - flag = PUT;
> - for (j = 0; j < 2; j++)
> - {
> - inline_struct (def, flag);
> - if (flag == PUT)
> - flag = GET;
> - }
> -
> - f_print (fout, "\t return TRUE;\n\t}\n\n");
> -
> - /* now take care of XDR_FREE case */
> -
> - for (dl = def->def.st.decls; dl != NULL; dl = dl->next)
> - print_stat (1, &dl->decl);
> -}
> -
> -static void
> -emit_typedef (const definition * def)
> -{
> - const char *prefix = def->def.ty.old_prefix;
> - const char *type = def->def.ty.old_type;
> - const char *amax = def->def.ty.array_max;
> - relation rel = def->def.ty.rel;
> -
> - print_ifstat (1, prefix, type, rel, amax, "objp", def->def_name);
> -}
> -
> -static void
> -print_stat (int indent, const declaration * dec)
> -{
> - const char *prefix = dec->prefix;
> - const char *type = dec->type;
> - const char *amax = dec->array_max;
> - relation rel = dec->rel;
> - char name[256];
> -
> - if (isvectordef (type, rel))
> - {
> - s_print (name, "objp->%s", dec->name);
> - }
> - else
> - {
> - s_print (name, "&objp->%s", dec->name);
> - }
> - print_ifstat (indent, prefix, type, rel, amax, name, dec->name);
> -}
> -
> -
> -static void
> -emit_inline (int indent, declaration * decl, int flag)
> -{
> - switch (decl->rel)
> - {
> - case REL_ALIAS:
> - emit_single_in_line (indent, decl, flag, REL_ALIAS);
> - break;
> - case REL_VECTOR:
> - tabify (fout, indent);
> - f_print (fout, "{\n");
> - tabify (fout, indent + 1);
> - f_print (fout, "register %s *genp;\n\n", decl->type);
> - tabify (fout, indent + 1);
> - f_print (fout,
> - "for (i = 0, genp = objp->%s;\n", decl->name);
> - tabify (fout, indent + 2);
> - f_print (fout, "i < %s; ++i) {\n", decl->array_max);
> - emit_single_in_line (indent + 2, decl, flag, REL_VECTOR);
> - tabify (fout, indent + 1);
> - f_print (fout, "}\n");
> - tabify (fout, indent);
> - f_print (fout, "}\n");
> - break;
> - default:
> - break;
> - /* ?... do nothing I guess */
> - }
> -}
> -
> -static void
> -emit_single_in_line (int indent, declaration *decl, int flag, relation rel)
> -{
> - char *upp_case;
> - int freed = 0;
> -
> - tabify (fout, indent);
> - if (flag == PUT)
> - f_print (fout, "IXDR_PUT_");
> - else
> - {
> - if (rel == REL_ALIAS)
> - f_print (fout, "objp->%s = IXDR_GET_", decl->name);
> - else
> - f_print (fout, "*genp++ = IXDR_GET_");
> - }
> -
> - upp_case = upcase (decl->type);
> -
> - /* hack - XX */
> - if (!strcmp (upp_case, "INT"))
> - {
> - free (upp_case);
> - freed = 1;
> - /* Casting is safe since the `freed' flag is set. */
> - upp_case = (char *) "LONG";
> - }
> -
> - if (!strcmp (upp_case, "U_INT"))
> - {
> - free (upp_case);
> - freed = 1;
> - /* Casting is safe since the `freed' flag is set. */
> - upp_case = (char *) "U_LONG";
> - }
> -
> - if (flag == PUT)
> - {
> - if (rel == REL_ALIAS)
> - f_print (fout, "%s(buf, objp->%s);\n", upp_case, decl->name);
> - else
> - f_print (fout, "%s(buf, *genp++);\n", upp_case);
> - }
> - else
> - {
> - f_print (fout, "%s(buf);\n", upp_case);
> - }
> -
> - if (!freed)
> - free (upp_case);
> -}
> -
> -
> -static char *
> -upcase (const char *str)
> -{
> - char *ptr, *hptr;
> - ptr = malloc (strlen (str) + 1);
> - if (ptr == NULL)
> - {
> - f_print (stderr, "malloc failed\n");
> - exit (1);
> - }
> - hptr = ptr;
> - while (*str != '\0')
> - *ptr++ = toupper (*str++);
> -
> - *ptr = '\0';
> - return hptr;
> -}
> diff --git a/sunrpc/rpc_hout.c b/sunrpc/rpc_hout.c
> deleted file mode 100644
> index 10f793d233..0000000000
> --- a/sunrpc/rpc_hout.c
> +++ /dev/null
> @@ -1,607 +0,0 @@
> -/*
> - * From: @(#)rpc_hout.c 1.12 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_hout.c, Header file outputter for the RPC protocol compiler
> - */
> -#include <stdio.h>
> -#include <ctype.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -static void pconstdef (definition * def);
> -static void pargdef (definition * def);
> -static void pstructdef (definition * def);
> -static void puniondef (definition * def);
> -static void pdefine (const char *name, const char *num);
> -static int define_printed (proc_list * stop, version_list * start);
> -static void pprogramdef (definition * def);
> -static void parglist (proc_list * proc, const char *addargtype);
> -static void penumdef (definition * def);
> -static void ptypedef (definition * def);
> -static int undefined2 (const char *type, const char *stop);
> -
> -/* store away enough information to allow the XDR functions to be spat
> - out at the end of the file */
> -
> -static void
> -storexdrfuncdecl (const char *name, int pointerp)
> -{
> - xdrfunc * xdrptr;
> -
> - xdrptr = (xdrfunc *) malloc(sizeof (struct xdrfunc));
> -
> - xdrptr->name = (char *)name;
> - xdrptr->pointerp = pointerp;
> - xdrptr->next = NULL;
> -
> - if (xdrfunc_tail == NULL)
> - {
> - xdrfunc_head = xdrptr;
> - xdrfunc_tail = xdrptr;
> - }
> - else
> - {
> - xdrfunc_tail->next = xdrptr;
> - xdrfunc_tail = xdrptr;
> - }
> -}
> -
> -/*
> - * Print the C-version of an xdr definition
> - */
> -void
> -print_datadef (definition *def)
> -{
> -
> - if (def->def_kind == DEF_PROGRAM) /* handle data only */
> - return;
> -
> - if (def->def_kind != DEF_CONST)
> - {
> - f_print (fout, "\n");
> - }
> - switch (def->def_kind)
> - {
> - case DEF_STRUCT:
> - pstructdef (def);
> - break;
> - case DEF_UNION:
> - puniondef (def);
> - break;
> - case DEF_ENUM:
> - penumdef (def);
> - break;
> - case DEF_TYPEDEF:
> - ptypedef (def);
> - break;
> - case DEF_PROGRAM:
> - pprogramdef (def);
> - break;
> - case DEF_CONST:
> - pconstdef (def);
> - break;
> - }
> - if (def->def_kind != DEF_PROGRAM && def->def_kind != DEF_CONST)
> - {
> - storexdrfuncdecl(def->def_name,
> - def->def_kind != DEF_TYPEDEF ||
> - !isvectordef(def->def.ty.old_type,
> - def->def.ty.rel));
> - }
> -}
> -
> -
> -void
> -print_funcdef (definition *def)
> -{
> - switch (def->def_kind)
> - {
> - case DEF_PROGRAM:
> - f_print (fout, "\n");
> - pprogramdef (def);
> - break;
> - default:
> - break;
> - /* ?... shouldn't happen I guess */
> - }
> -}
> -
> -void
> -print_xdr_func_def (char *name, int pointerp, int i)
> -{
> - if (i == 2)
> - {
> - f_print (fout, "extern bool_t xdr_%s ();\n", name);
> - return;
> - }
> - else
> - f_print(fout, "extern bool_t xdr_%s (XDR *, %s%s);\n", name,
> - name, pointerp ? "*" : "");
> -}
> -
> -static void
> -pconstdef (definition *def)
> -{
> - pdefine (def->def_name, def->def.co);
> -}
> -
> -/* print out the definitions for the arguments of functions in the
> - header file
> - */
> -static void
> -pargdef (definition * def)
> -{
> - decl_list *l;
> - version_list *vers;
> - const char *name;
> - proc_list *plist;
> -
> - for (vers = def->def.pr.versions; vers != NULL; vers = vers->next)
> - {
> - for (plist = vers->procs; plist != NULL;
> - plist = plist->next)
> - {
> -
> - if (!newstyle || plist->arg_num < 2)
> - {
> - continue; /* old style or single args */
> - }
> - name = plist->args.argname;
> - f_print (fout, "struct %s {\n", name);
> - for (l = plist->args.decls;
> - l != NULL; l = l->next)
> - {
> - pdeclaration (name, &l->decl, 1, ";\n");
> - }
> - f_print (fout, "};\n");
> - f_print (fout, "typedef struct %s %s;\n", name, name);
> - storexdrfuncdecl (name, 1);
> - f_print (fout, "\n");
> - }
> - }
> -
> -}
> -
> -static void
> -pstructdef (definition *def)
> -{
> - decl_list *l;
> - const char *name = def->def_name;
> -
> - f_print (fout, "struct %s {\n", name);
> - for (l = def->def.st.decls; l != NULL; l = l->next)
> - {
> - pdeclaration (name, &l->decl, 1, ";\n");
> - }
> - f_print (fout, "};\n");
> - f_print (fout, "typedef struct %s %s;\n", name, name);
> -}
> -
> -static void
> -puniondef (definition *def)
> -{
> - case_list *l;
> - const char *name = def->def_name;
> - declaration *decl;
> -
> - f_print (fout, "struct %s {\n", name);
> - decl = &def->def.un.enum_decl;
> - if (streq (decl->type, "bool"))
> - {
> - f_print (fout, "\tbool_t %s;\n", decl->name);
> - }
> - else
> - {
> - f_print (fout, "\t%s %s;\n", decl->type, decl->name);
> - }
> - f_print (fout, "\tunion {\n");
> - for (l = def->def.un.cases; l != NULL; l = l->next)
> - {
> - if (l->contflag == 0)
> - pdeclaration (name, &l->case_decl, 2, ";\n");
> - }
> - decl = def->def.un.default_decl;
> - if (decl && !streq (decl->type, "void"))
> - {
> - pdeclaration (name, decl, 2, ";\n");
> - }
> - f_print (fout, "\t} %s_u;\n", name);
> - f_print (fout, "};\n");
> - f_print (fout, "typedef struct %s %s;\n", name, name);
> -}
> -
> -static void
> -pdefine (const char *name, const char *num)
> -{
> - f_print (fout, "#define %s %s\n", name, num);
> -}
> -
> -static int
> -define_printed (proc_list *stop, version_list *start)
> -{
> - version_list *vers;
> - proc_list *proc;
> -
> - for (vers = start; vers != NULL; vers = vers->next)
> - {
> - for (proc = vers->procs; proc != NULL; proc = proc->next)
> - {
> - if (proc == stop)
> - {
> - return 0;
> - }
> - else if (streq (proc->proc_name, stop->proc_name))
> - {
> - return 1;
> - }
> - }
> - }
> - abort ();
> - /* NOTREACHED */
> -}
> -
> -static void
> -pfreeprocdef (const char *name, const char *vers, int mode)
> -{
> - f_print (fout, "extern int ");
> - pvname (name, vers);
> - if (mode == 1)
> - f_print (fout,"_freeresult (SVCXPRT *, xdrproc_t, caddr_t);\n");
> - else
> - f_print (fout,"_freeresult ();\n");
> -}
> -
> -static void
> -pprogramdef (definition *def)
> -{
> - version_list *vers;
> - proc_list *proc;
> - int i;
> - const char *ext;
> -
> - pargdef (def);
> -
> - pdefine (def->def_name, def->def.pr.prog_num);
> - for (vers = def->def.pr.versions; vers != NULL; vers = vers->next)
> - {
> - if (tblflag)
> - {
> - f_print (fout, "extern struct rpcgen_table %s_%s_table[];\n",
> - locase (def->def_name), vers->vers_num);
> - f_print (fout, "extern %s_%s_nproc;\n",
> - locase (def->def_name), vers->vers_num);
> - }
> - pdefine (vers->vers_name, vers->vers_num);
> -
> - /*
> - * Print out 2 definitions, one for ANSI-C, another for
> - * old K & R C
> - */
> -
> - if(!Cflag)
> - {
> - ext = "extern ";
> - for (proc = vers->procs; proc != NULL;
> - proc = proc->next)
> - {
> - if (!define_printed(proc, def->def.pr.versions))
> - {
> - pdefine (proc->proc_name, proc->proc_num);
> - }
> - f_print (fout, "%s", ext);
> - pprocdef (proc, vers, NULL, 0, 2);
> -
> - if (mtflag)
> - {
> - f_print(fout, "%s", ext);
> - pprocdef (proc, vers, NULL, 1, 2);
> - }
> - }
> - pfreeprocdef (def->def_name, vers->vers_num, 2);
> - }
> - else
> - {
> - for (i = 1; i < 3; i++)
> - {
> - if (i == 1)
> - {
> - f_print (fout, "\n#if defined(__STDC__) || defined(__cplusplus)\n");
> - ext = "extern ";
> - }
> - else
> - {
> - f_print (fout, "\n#else /* K&R C */\n");
> - ext = "extern ";
> - }
> -
> - for (proc = vers->procs; proc != NULL; proc = proc->next)
> - {
> - if (!define_printed(proc, def->def.pr.versions))
> - {
> - pdefine(proc->proc_name, proc->proc_num);
> - }
> - f_print (fout, "%s", ext);
> - pprocdef (proc, vers, "CLIENT *", 0, i);
> - f_print (fout, "%s", ext);
> - pprocdef (proc, vers, "struct svc_req *", 1, i);
> - }
> - pfreeprocdef (def->def_name, vers->vers_num, i);
> - }
> - f_print (fout, "#endif /* K&R C */\n");
> - }
> - }
> -}
> -
> -void
> -pprocdef (proc_list * proc, version_list * vp,
> - const char *addargtype, int server_p, int mode)
> -{
> - if (mtflag)
> - {/* Print MT style stubs */
> - if (server_p)
> - f_print (fout, "bool_t ");
> - else
> - f_print (fout, "enum clnt_stat ");
> - }
> - else
> - {
> - ptype (proc->res_prefix, proc->res_type, 1);
> - f_print (fout, "* ");
> - }
> - if (server_p)
> - pvname_svc (proc->proc_name, vp->vers_num);
> - else
> - pvname (proc->proc_name, vp->vers_num);
> -
> - /*
> - * mode 1 = ANSI-C, mode 2 = K&R C
> - */
> - if (mode == 1)
> - parglist (proc, addargtype);
> - else
> - f_print (fout, "();\n");
> -}
> -
> -/* print out argument list of procedure */
> -static void
> -parglist (proc_list *proc, const char *addargtype)
> -{
> - decl_list *dl;
> -
> - f_print(fout,"(");
> - if (proc->arg_num < 2 && newstyle &&
> - streq (proc->args.decls->decl.type, "void"))
> - {
> - /* 0 argument in new style: do nothing */
> - }
> - else
> - {
> - for (dl = proc->args.decls; dl != NULL; dl = dl->next)
> - {
> - ptype (dl->decl.prefix, dl->decl.type, 1);
> - if (!newstyle)
> - f_print (fout, "*"); /* old style passes by reference */
> -
> - f_print (fout, ", ");
> - }
> - }
> - if (mtflag)
> - {
> - ptype(proc->res_prefix, proc->res_type, 1);
> - f_print(fout, "*, ");
> - }
> -
> - f_print (fout, "%s);\n", addargtype);
> -}
> -
> -static void
> -penumdef (definition *def)
> -{
> - const char *name = def->def_name;
> - enumval_list *l;
> - const char *last = NULL;
> - int count = 0;
> -
> - f_print (fout, "enum %s {\n", name);
> - for (l = def->def.en.vals; l != NULL; l = l->next)
> - {
> - f_print (fout, "\t%s", l->name);
> - if (l->assignment)
> - {
> - f_print (fout, " = %s", l->assignment);
> - last = l->assignment;
> - count = 1;
> - }
> - else
> - {
> - if (last == NULL)
> - {
> - f_print (fout, " = %d", count++);
> - }
> - else
> - {
> - f_print (fout, " = %s + %d", last, count++);
> - }
> - }
> - f_print (fout, ",\n");
> - }
> - f_print (fout, "};\n");
> - f_print (fout, "typedef enum %s %s;\n", name, name);
> -}
> -
> -static void
> -ptypedef (definition *def)
> -{
> - const char *name = def->def_name;
> - const char *old = def->def.ty.old_type;
> - char prefix[8]; /* enough to contain "struct ", including NUL */
> - relation rel = def->def.ty.rel;
> -
> - if (!streq (name, old))
> - {
> - if (streq (old, "string"))
> - {
> - old = "char";
> - rel = REL_POINTER;
> - }
> - else if (streq (old, "opaque"))
> - {
> - old = "char";
> - }
> - else if (streq (old, "bool"))
> - {
> - old = "bool_t";
> - }
> - if (undefined2 (old, name) && def->def.ty.old_prefix)
> - {
> - s_print (prefix, "%s ", def->def.ty.old_prefix);
> - }
> - else
> - {
> - prefix[0] = 0;
> - }
> - f_print (fout, "typedef ");
> - switch (rel)
> - {
> - case REL_ARRAY:
> - f_print (fout, "struct {\n");
> - f_print (fout, "\tu_int %s_len;\n", name);
> - f_print (fout, "\t%s%s *%s_val;\n", prefix, old, name);
> - f_print (fout, "} %s", name);
> - break;
> - case REL_POINTER:
> - f_print (fout, "%s%s *%s", prefix, old, name);
> - break;
> - case REL_VECTOR:
> - f_print (fout, "%s%s %s[%s]", prefix, old, name,
> - def->def.ty.array_max);
> - break;
> - case REL_ALIAS:
> - f_print (fout, "%s%s %s", prefix, old, name);
> - break;
> - }
> - f_print (fout, ";\n");
> - }
> -}
> -
> -void
> -pdeclaration (const char *name, declaration * dec, int tab,
> - const char *separator)
> -{
> - char buf[8]; /* enough to hold "struct ", include NUL */
> - const char *prefix;
> - const char *type;
> -
> - if (streq (dec->type, "void"))
> - {
> - return;
> - }
> - tabify (fout, tab);
> - if (streq (dec->type, name) && !dec->prefix)
> - {
> - f_print (fout, "struct ");
> - }
> - if (streq (dec->type, "string"))
> - {
> - f_print (fout, "char *%s", dec->name);
> - }
> - else
> - {
> - prefix = "";
> - if (streq (dec->type, "bool"))
> - {
> - type = "bool_t";
> - }
> - else if (streq (dec->type, "opaque"))
> - {
> - type = "char";
> - }
> - else
> - {
> - if (dec->prefix)
> - {
> - s_print (buf, "%s ", dec->prefix);
> - prefix = buf;
> - }
> - type = dec->type;
> - }
> - switch (dec->rel)
> - {
> - case REL_ALIAS:
> - f_print (fout, "%s%s %s", prefix, type, dec->name);
> - break;
> - case REL_VECTOR:
> - f_print (fout, "%s%s %s[%s]", prefix, type, dec->name,
> - dec->array_max);
> - break;
> - case REL_POINTER:
> - f_print (fout, "%s%s *%s", prefix, type, dec->name);
> - break;
> - case REL_ARRAY:
> - f_print (fout, "struct {\n");
> - tabify (fout, tab);
> - f_print (fout, "\tu_int %s_len;\n", dec->name);
> - tabify (fout, tab);
> - f_print (fout, "\t%s%s *%s_val;\n", prefix, type, dec->name);
> - tabify (fout, tab);
> - f_print (fout, "} %s", dec->name);
> - break;
> - }
> - }
> - f_print (fout, "%s", separator);
> -}
> -
> -static int
> -undefined2 (const char *type, const char *stop)
> -{
> - list *l;
> - definition *def;
> -
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - if (streq (def->def_name, stop))
> - {
> - return 1;
> - }
> - else if (streq (def->def_name, type))
> - {
> - return 0;
> - }
> - }
> - }
> - return 1;
> -}
> diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c
> deleted file mode 100644
> index c6607848cc..0000000000
> --- a/sunrpc/rpc_main.c
> +++ /dev/null
> @@ -1,1451 +0,0 @@
> -/*
> - * From @(#)rpc_main.c 1.30 89/03/30
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_main.c, Top level of the RPC protocol compiler.
> - */
> -
> -#include <errno.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <unistd.h>
> -#include <libintl.h>
> -#include <locale.h>
> -#include <ctype.h>
> -#include <sys/types.h>
> -#include <sys/param.h>
> -#include <sys/file.h>
> -#include <sys/stat.h>
> -#include <sys/wait.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "rpc_scan.h"
> -#include "proto.h"
> -
> -#include "../version.h"
> -#define PACKAGE _libc_intl_domainname
> -
> -#define EXTEND 1 /* alias for TRUE */
> -#define DONT_EXTEND 0 /* alias for FALSE */
> -
> -struct commandline
> - {
> - int cflag; /* xdr C routines */
> - int hflag; /* header file */
> - int lflag; /* client side stubs */
> - int mflag; /* server side stubs */
> - int nflag; /* netid flag */
> - int sflag; /* server stubs for the given transport */
> - int tflag; /* dispatch Table file */
> - int Ssflag; /* produce server sample code */
> - int Scflag; /* produce client sample code */
> - int makefileflag; /* Generate a template Makefile */
> - const char *infile; /* input module name */
> - const char *outfile; /* output module name */
> - };
> -
> -
> -static const char *cmdname;
> -
> -static const char *svcclosetime = "120";
> -static int cppDefined; /* explicit path for C preprocessor */
> -static const char *CPP = "/lib/cpp";
> -static const char CPPFLAGS[] = "-C";
> -static char *pathbuf;
> -static int cpp_pid;
> -static const char *allv[] =
> -{
> - "rpcgen", "-s", "udp", "-s", "tcp"
> -};
> -static int allc = sizeof (allv) / sizeof (allv[0]);
> -static const char *allnv[] =
> -{
> - "rpcgen", "-s", "netpath",
> -};
> -static int allnc = sizeof (allnv) / sizeof (allnv[0]);
> -
> -/*
> - * machinations for handling expanding argument list
> - */
> -static void addarg (const char *); /* add another argument to the list */
> -static void putarg (int, const char *); /* put argument at specified location */
> -static void clear_args (void); /* clear argument list */
> -static void checkfiles (const char *, const char *);
> - /* check if out file already exists */
> -
> -static void clear_args (void);
> -static char *extendfile (const char *file, const char *ext);
> -static void open_output (const char *infile, const char *outfile);
> -static void add_warning (void);
> -static void clear_args (void);
> -static void find_cpp (void);
> -static void open_input (const char *infile, const char *define);
> -static int check_nettype (const char *name, const char *list_to_check[]);
> -static void c_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void h_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void s_output (int argc, const char *argv[], const char *infile,
> - const char *define, int extend,
> - const char *outfile, int nomain, int netflag);
> -static void l_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void t_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void svc_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void clnt_output (const char *infile, const char *define,
> - int extend, const char *outfile);
> -static void mkfile_output (struct commandline *cmd);
> -static int do_registers (int argc, const char *argv[]);
> -static void addarg (const char *cp);
> -static void putarg (int whereto, const char *cp);
> -static void checkfiles (const char *infile, const char *outfile);
> -static int parseargs (int argc, const char *argv[], struct commandline *cmd);
> -static void usage (FILE *stream, int status) __attribute__ ((noreturn));
> -static void options_usage (FILE *stream, int status) __attribute__ ((noreturn));
> -static void print_version (void);
> -static void c_initialize (void);
> -static char *generate_guard (const char *pathname);
> -
> -
> -#define ARGLISTLEN 20
> -#define FIXEDARGS 2
> -
> -static const char *arglist[ARGLISTLEN];
> -static int argcount = FIXEDARGS;
> -
> -
> -int nonfatalerrors; /* errors */
> -int inetdflag /* = 1 */ ; /* Support for inetd *//* is now the default */
> -int pmflag; /* Support for port monitors */
> -int logflag; /* Use syslog instead of fprintf for errors */
> -int tblflag; /* Support for dispatch table file */
> -int mtflag; /* Support for MT */
> -
> -#define INLINE 3
> -/*length at which to start doing an inline */
> -
> -int inlineflag = INLINE; /* length at which to start doing an inline. 3 = default
> - if 0, no xdr_inline code */
> -
> -int indefinitewait; /* If started by port monitors, hang till it wants */
> -int exitnow; /* If started by port monitors, exit after the call */
> -int timerflag; /* TRUE if !indefinite && !exitnow */
> -int newstyle; /* newstyle of passing arguments (by value) */
> -int Cflag = 1; /* ANSI C syntax */
> -int CCflag; /* C++ files */
> -static int allfiles; /* generate all files */
> -int tirpcflag; /* generating code for tirpc, by default */
> -xdrfunc *xdrfunc_head; /* xdr function list */
> -xdrfunc *xdrfunc_tail; /* xdr function list */
> -
> -int
> -main (int argc, const char *argv[])
> -{
> - struct commandline cmd;
> -
> - setlocale (LC_ALL, "");
> - textdomain (_libc_intl_domainname);
> -
> - (void) memset ((char *) &cmd, 0, sizeof (struct commandline));
> - clear_args ();
> - if (!parseargs (argc, argv, &cmd))
> - usage (stderr, 1);
> -
> - if (cmd.cflag || cmd.hflag || cmd.lflag || cmd.tflag || cmd.sflag ||
> - cmd.mflag || cmd.nflag || cmd.Ssflag || cmd.Scflag)
> - {
> - checkfiles (cmd.infile, cmd.outfile);
> - }
> - else
> - checkfiles (cmd.infile, NULL);
> -
> - if (cmd.cflag)
> - c_output (cmd.infile, "-DRPC_XDR", DONT_EXTEND, cmd.outfile);
> - else if (cmd.hflag)
> - h_output (cmd.infile, "-DRPC_HDR", DONT_EXTEND, cmd.outfile);
> - else if (cmd.lflag)
> - l_output (cmd.infile, "-DRPC_CLNT", DONT_EXTEND, cmd.outfile);
> - else if (cmd.sflag || cmd.mflag || (cmd.nflag))
> - s_output (argc, argv, cmd.infile, "-DRPC_SVC", DONT_EXTEND,
> - cmd.outfile, cmd.mflag, cmd.nflag);
> - else if (cmd.tflag)
> - t_output (cmd.infile, "-DRPC_TBL", DONT_EXTEND, cmd.outfile);
> - else if (cmd.Ssflag)
> - svc_output (cmd.infile, "-DRPC_SERVER", DONT_EXTEND, cmd.outfile);
> - else if (cmd.Scflag)
> - clnt_output (cmd.infile, "-DRPC_CLIENT", DONT_EXTEND, cmd.outfile);
> - else if (cmd.makefileflag)
> - mkfile_output (&cmd);
> - else
> - {
> - /* the rescans are required, since cpp may effect input */
> - c_output (cmd.infile, "-DRPC_XDR", EXTEND, "_xdr.c");
> - reinitialize ();
> - h_output (cmd.infile, "-DRPC_HDR", EXTEND, ".h");
> - reinitialize ();
> - l_output (cmd.infile, "-DRPC_CLNT", EXTEND, "_clnt.c");
> - reinitialize ();
> - if (inetdflag || !tirpcflag)
> - s_output (allc, allv, cmd.infile, "-DRPC_SVC", EXTEND,
> - "_svc.c", cmd.mflag, cmd.nflag);
> - else
> - s_output (allnc, allnv, cmd.infile, "-DRPC_SVC",
> - EXTEND, "_svc.c", cmd.mflag, cmd.nflag);
> - if (tblflag)
> - {
> - reinitialize ();
> - t_output (cmd.infile, "-DRPC_TBL", EXTEND, "_tbl.i");
> - }
> - if (allfiles)
> - {
> - reinitialize ();
> - svc_output (cmd.infile, "-DRPC_SERVER", EXTEND, "_server.c");
> - reinitialize ();
> - clnt_output (cmd.infile, "-DRPC_CLIENT", EXTEND, "_client.c");
> - }
> - if (allfiles || (cmd.makefileflag == 1))
> - {
> - reinitialize ();
> - mkfile_output (&cmd);
> - }
> - }
> -
> - return nonfatalerrors;
> -}
> -
> -/*
> - * add extension to filename
> - */
> -static char *
> -extendfile (const char *file, const char *ext)
> -{
> - char *res;
> - const char *p;
> -
> - res = alloc (strlen (file) + strlen (ext) + 1);
> - if (res == NULL)
> - abort ();
> - p = strrchr (file, '.');
> - if (p == NULL)
> - p = file + strlen (file);
> - strcpy (res, file);
> - strcpy (res + (p - file), ext);
> - return res;
> -}
> -
> -/*
> - * Open output file with given extension
> - */
> -static void
> -open_output (const char *infile, const char *outfile)
> -{
> - if (outfile == NULL)
> - {
> - fout = stdout;
> - return;
> - }
> -
> - if (infile != NULL && streq (outfile, infile))
> - {
> - fprintf (stderr, _ ("%s: output would overwrite %s\n"), cmdname,
> - infile);
> - crash ();
> - }
> - fout = fopen (outfile, "w");
> - if (fout == NULL)
> - {
> - fprintf (stderr, _ ("%s: unable to open %s: %m\n"), cmdname, outfile);
> - crash ();
> - }
> - record_open (outfile);
> -}
> -
> -/* Close the output file and check for write errors. */
> -static void
> -close_output (const char *outfile)
> -{
> - if (fclose (fout) == EOF)
> - {
> - fprintf (stderr, _("%s: while writing output %s: %m"), cmdname,
> - outfile ?: "<stdout>");
> - crash ();
> - }
> -}
> -
> -static void
> -add_warning (void)
> -{
> - fprintf (fout, "/*\n");
> - fprintf (fout, " * Please do not edit this file.\n");
> - fprintf (fout, " * It was generated using rpcgen.\n");
> - fprintf (fout, " */\n\n");
> -}
> -
> -/* clear list of arguments */
> -static void
> -clear_args (void)
> -{
> - int i;
> - for (i = FIXEDARGS; i < ARGLISTLEN; ++i)
> - arglist[i] = NULL;
> - argcount = FIXEDARGS;
> -}
> -
> -/* make sure that a CPP exists */
> -static void
> -find_cpp (void)
> -{
> - struct stat64 buf;
> -
> - if (stat64 (CPP, &buf) == 0)
> - return;
> -
> - if (cppDefined) /* user specified cpp but it does not exist */
> - {
> - fprintf (stderr, _ ("cannot find C preprocessor: %s\n"), CPP);
> - crash ();
> - }
> -
> - /* fall back to system CPP */
> - CPP = "cpp";
> -}
> -
> -/*
> - * Open input file with given define for C-preprocessor
> - */
> -static void
> -open_input (const char *infile, const char *define)
> -{
> - int pd[2];
> -
> - infilename = (infile == NULL) ? "<stdin>" : infile;
> - if (pipe (pd) != 0)
> - {
> - perror ("pipe");
> - exit (1);
> - }
> - cpp_pid = fork ();
> - switch (cpp_pid)
> - {
> - case 0:
> - find_cpp ();
> - putarg (0, CPP);
> - putarg (1, CPPFLAGS);
> - addarg (define);
> - if (infile)
> - addarg (infile);
> - addarg ((char *) NULL);
> - close (1);
> - dup2 (pd[1], 1);
> - close (pd[0]);
> - execvp (arglist[0], (char **) arglist);
> - if (errno == ENOENT)
> - {
> - fprintf (stderr, _ ("cannot find C preprocessor: %s\n"), CPP);
> - exit (1);
> - }
> - perror ("execvp");
> - exit (1);
> - case -1:
> - perror ("fork");
> - exit (1);
> - }
> - close (pd[1]);
> - fin = fdopen (pd[0], "r");
> - if (fin == NULL)
> - {
> - fprintf (stderr, "%s: ", cmdname);
> - perror (infilename);
> - crash ();
> - }
> -}
> -
> -/* Close the connection to the C-preprocessor and check for successfull
> - termination. */
> -static void
> -close_input (void)
> -{
> - int status;
> -
> - fclose (fin);
> - /* Check the termination status. */
> - if (waitpid (cpp_pid, &status, 0) < 0)
> - {
> - perror ("waitpid");
> - crash ();
> - }
> - if (WIFSIGNALED (status) || WEXITSTATUS (status) != 0)
> - {
> - if (WIFSIGNALED (status))
> - fprintf (stderr, _("%s: C preprocessor failed with signal %d\n"),
> - cmdname, WTERMSIG (status));
> - else
> - fprintf (stderr, _("%s: C preprocessor failed with exit code %d\n"),
> - cmdname, WEXITSTATUS (status));
> - crash ();
> - }
> -}
> -
> -/* valid tirpc nettypes */
> -static const char *valid_ti_nettypes[] =
> -{
> - "netpath",
> - "visible",
> - "circuit_v",
> - "datagram_v",
> - "circuit_n",
> - "datagram_n",
> - "udp",
> - "tcp",
> - "raw",
> - NULL
> -};
> -
> -/* valid inetd nettypes */
> -static const char *valid_i_nettypes[] =
> -{
> - "udp",
> - "tcp",
> - NULL
> -};
> -
> -static int
> -check_nettype (const char *name, const char *list_to_check[])
> -{
> - int i;
> - for (i = 0; list_to_check[i] != NULL; i++)
> - {
> - if (strcmp (name, list_to_check[i]) == 0)
> - {
> - return 1;
> - }
> - }
> - fprintf (stderr, _ ("illegal nettype: `%s'\n"), name);
> - return 0;
> -}
> -
> -/*
> - * Compile into an XDR routine output file
> - */
> -
> -static void
> -c_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - definition *def;
> - char *include;
> - const char *outfilename;
> - long tell;
> -
> - c_initialize ();
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - open_output (infile, outfilename);
> - add_warning ();
> - if (infile && (include = extendfile (infile, ".h")))
> - {
> - fprintf (fout, "#include \"%s\"\n", include);
> - free (include);
> - /* .h file already contains rpc/rpc.h */
> - }
> - else
> - fprintf (fout, "#include <rpc/rpc.h>\n");
> - tell = ftell (fout);
> - while ((def = get_definition ()) != NULL)
> - emit (def);
> -
> - if (extend && tell == ftell (fout))
> - unlink (outfilename);
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -void
> -c_initialize (void)
> -{
> -
> - /* add all the starting basic types */
> -
> - add_type (1, "int");
> - add_type (1, "long");
> - add_type (1, "short");
> - add_type (1, "bool");
> -
> - add_type (1, "u_int");
> - add_type (1, "u_long");
> - add_type (1, "u_short");
> -
> -}
> -
> -char rpcgen_table_dcl[] = "struct rpcgen_table {\n\
> - char *(*proc)();\n\
> - xdrproc_t xdr_arg;\n\
> - unsigned len_arg;\n\
> - xdrproc_t xdr_res;\n\
> - unsigned len_res;\n\
> -};\n";
> -
> -
> -static char *
> -generate_guard (const char *pathname)
> -{
> - const char *filename;
> - char *guard, *tmp;
> -
> - filename = strrchr (pathname, '/'); /* find last component */
> - filename = ((filename == NULL) ? pathname : filename + 1);
> - guard = extendfile (filename, "_H_RPCGEN");
> - /* convert to upper case */
> - tmp = guard;
> - while (*tmp)
> - {
> - if (islower (*tmp))
> - *tmp = toupper (*tmp);
> - tmp++;
> - }
> -
> - return guard;
> -}
> -
> -/*
> - * Compile into an XDR header file
> - */
> -
> -
> -static void
> -h_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - xdrfunc *xdrfuncp;
> - definition *def;
> - const char *ifilename;
> - const char *outfilename;
> - long tell;
> - char *guard;
> - list *l;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - open_output (infile, outfilename);
> - add_warning ();
> - ifilename = (infile == NULL) ? "STDIN" : infile;
> - guard = generate_guard (outfilename ? outfilename : ifilename);
> -
> - fprintf (fout, "#ifndef _%s\n#define _%s\n\n", guard,
> - guard);
> -
> - fprintf (fout, "#include <rpc/rpc.h>\n\n");
> -
> - if (mtflag)
> - {
> - fprintf (fout, "#include <pthread.h>\n");
> - }
> -
> - /* put the C++ support */
> - if (Cflag && !CCflag)
> - {
> - fprintf (fout, "\n#ifdef __cplusplus\n");
> - fprintf (fout, "extern \"C\" {\n");
> - fprintf (fout, "#endif\n\n");
> - }
> -
> - tell = ftell (fout);
> - /* print data definitions */
> - while ((def = get_definition ()) != NULL)
> - {
> - print_datadef (def);
> - }
> -
> - /* print function declarations.
> - Do this after data definitions because they might be used as
> - arguments for functions */
> - for (l = defined; l != NULL; l = l->next)
> - {
> - print_funcdef (l->val);
> - }
> - /* Now print all xdr func declarations */
> - if (xdrfunc_head != NULL)
> - {
> - fprintf (fout, "\n/* the xdr functions */\n");
> - if (CCflag)
> - {
> - fprintf (fout, "\n#ifdef __cplusplus\n");
> - fprintf (fout, "extern \"C\" {\n");
> - fprintf (fout, "#endif\n");
> - }
> - if (!Cflag)
> - {
> - xdrfuncp = xdrfunc_head;
> - while (xdrfuncp != NULL)
> - {
> - print_xdr_func_def (xdrfuncp->name,
> - xdrfuncp->pointerp, 2);
> - xdrfuncp = xdrfuncp->next;
> - }
> - }
> - else
> - {
> - int i;
> -
> - for (i = 1; i < 3; ++i)
> - {
> - if (i == 1)
> - fprintf (fout, "\n#if defined(__STDC__) || defined(__cplusplus)\n");
> - else
> - fprintf (fout, "\n#else /* K&R C */\n");
> -
> - xdrfuncp = xdrfunc_head;
> - while (xdrfuncp != NULL)
> - {
> - print_xdr_func_def (xdrfuncp->name,
> - xdrfuncp->pointerp, i);
> - xdrfuncp = xdrfuncp->next;
> - }
> - }
> - fprintf (fout, "\n#endif /* K&R C */\n");
> - }
> - }
> -
> - if (extend && tell == ftell (fout))
> - {
> - unlink (outfilename);
> - }
> - else if (tblflag)
> - {
> - fprintf (fout, "%s", rpcgen_table_dcl);
> - }
> -
> - if (Cflag)
> - {
> - fprintf (fout, "\n#ifdef __cplusplus\n");
> - fprintf (fout, "}\n");
> - fprintf (fout, "#endif\n");
> - }
> -
> - fprintf (fout, "\n#endif /* !_%s */\n", guard);
> - free (guard);
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -/*
> - * Compile into an RPC service
> - */
> -static void
> -s_output (int argc, const char *argv[], const char *infile, const char *define,
> - int extend, const char *outfile, int nomain, int netflag)
> -{
> - char *include;
> - definition *def;
> - int foundprogram = 0;
> - const char *outfilename;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - open_output (infile, outfilename);
> - add_warning ();
> - if (infile && (include = extendfile (infile, ".h")))
> - {
> - fprintf (fout, "#include \"%s\"\n", include);
> - free (include);
> - }
> - else
> - fprintf (fout, "#include <rpc/rpc.h>\n");
> -
> - fprintf (fout, "#include <stdio.h>\n");
> - fprintf (fout, "#include <stdlib.h>\n");
> - fprintf (fout, "#include <rpc/pmap_clnt.h>\n");
> - if (Cflag)
> - fprintf (fout, "#include <string.h>\n");
> - if (strcmp (svcclosetime, "-1") == 0)
> - indefinitewait = 1;
> - else if (strcmp (svcclosetime, "0") == 0)
> - exitnow = 1;
> - else if (inetdflag || pmflag)
> - {
> - fprintf (fout, "#include <signal.h>\n");
> - timerflag = 1;
> - }
> -
> - if (!tirpcflag && inetdflag)
> - fprintf (fout, "#include <sys/ioctl.h> /* ioctl, TIOCNOTTY */\n");
> - if (Cflag && (inetdflag || pmflag))
> - {
> - fprintf (fout, "#include <sys/types.h> /* open */\n");
> - fprintf (fout, "#include <sys/stat.h> /* open */\n");
> - fprintf (fout, "#include <fcntl.h> /* open */\n");
> - fprintf (fout, "#include <unistd.h> /* getdtablesize */\n");
> - }
> - if (tirpcflag && !(Cflag && (inetdflag || pmflag)))
> - fprintf (fout, "#include <sys/types.h>\n");
> -
> - fprintf (fout, "#include <memory.h>\n");
> - if (inetdflag || !tirpcflag)
> - {
> - fprintf (fout, "#include <sys/socket.h>\n");
> - fprintf (fout, "#include <netinet/in.h>\n");
> - }
> -
> - if ((netflag || pmflag) && tirpcflag && !nomain)
> - {
> - fprintf (fout, "#include <netconfig.h>\n");
> - }
> - if ( /*timerflag && */ tirpcflag)
> - fprintf (fout, "#include <sys/resource.h> /* rlimit */\n");
> - if (logflag || inetdflag || pmflag)
> - {
> - fprintf (fout, "#include <syslog.h>\n");
> - }
> -
> - /* for ANSI-C */
> - if (Cflag)
> - fprintf (fout, "\n#ifndef SIG_PF\n#define SIG_PF void(*)(int)\n#endif\n");
> -
> - if (timerflag)
> - fprintf (fout, "\n#define _RPCSVC_CLOSEDOWN %s\n", svcclosetime);
> - while ((def = get_definition ()) != NULL)
> - {
> - foundprogram |= (def->def_kind == DEF_PROGRAM);
> - }
> - if (extend && !foundprogram)
> - {
> - unlink (outfilename);
> - return;
> - }
> - write_most (infile, netflag, nomain);
> - if (!nomain)
> - {
> - if (!do_registers (argc, argv))
> - {
> - if (outfilename)
> - unlink (outfilename);
> - usage (stderr, 1);
> - }
> - write_rest ();
> - }
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -/*
> - * generate client side stubs
> - */
> -static void
> -l_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - char *include;
> - definition *def;
> - int foundprogram = 0;
> - const char *outfilename;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - open_output (infile, outfilename);
> - add_warning ();
> - if (Cflag)
> - fprintf (fout, "#include <memory.h> /* for memset */\n");
> - if (infile && (include = extendfile (infile, ".h")))
> - {
> - fprintf (fout, "#include \"%s\"\n", include);
> - free (include);
> - }
> - else
> - fprintf (fout, "#include <rpc/rpc.h>\n");
> - while ((def = get_definition ()) != NULL)
> - {
> - foundprogram |= (def->def_kind == DEF_PROGRAM);
> - }
> - if (extend && !foundprogram)
> - {
> - unlink (outfilename);
> - return;
> - }
> - write_stubs ();
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -/*
> - * generate the dispatch table
> - */
> -static void
> -t_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - definition *def;
> - int foundprogram = 0;
> - const char *outfilename;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - open_output (infile, outfilename);
> - add_warning ();
> - while ((def = get_definition ()) != NULL)
> - {
> - foundprogram |= (def->def_kind == DEF_PROGRAM);
> - }
> - if (extend && !foundprogram)
> - {
> - unlink (outfilename);
> - return;
> - }
> - write_tables ();
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -/* sample routine for the server template */
> -static void
> -svc_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - definition *def;
> - char *include;
> - const char *outfilename;
> - long tell;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - checkfiles (infile, outfilename);
> - /*check if outfile already exists.
> - if so, print an error message and exit */
> - open_output (infile, outfilename);
> - add_sample_msg ();
> -
> - if (infile && (include = extendfile (infile, ".h")))
> - {
> - fprintf (fout, "#include \"%s\"\n", include);
> - free (include);
> - }
> - else
> - fprintf (fout, "#include <rpc/rpc.h>\n");
> -
> - tell = ftell (fout);
> - while ((def = get_definition ()) != NULL)
> - {
> - write_sample_svc (def);
> - }
> - if (extend && tell == ftell (fout))
> - {
> - unlink (outfilename);
> - }
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -
> -/* sample main routine for client */
> -static void
> -clnt_output (const char *infile, const char *define, int extend,
> - const char *outfile)
> -{
> - definition *def;
> - char *include;
> - const char *outfilename;
> - long tell;
> - int has_program = 0;
> -
> - open_input (infile, define);
> - outfilename = extend ? extendfile (infile, outfile) : outfile;
> - checkfiles (infile, outfilename);
> - /*check if outfile already exists.
> - if so, print an error message and exit */
> -
> - open_output (infile, outfilename);
> - add_sample_msg ();
> - if (infile && (include = extendfile (infile, ".h")))
> - {
> - fprintf (fout, "#include \"%s\"\n", include);
> - free (include);
> - }
> - else
> - fprintf (fout, "#include <rpc/rpc.h>\n");
> - tell = ftell (fout);
> - while ((def = get_definition ()) != NULL)
> - {
> - has_program += write_sample_clnt (def);
> - }
> -
> - if (has_program)
> - write_sample_clnt_main ();
> -
> - if (extend && tell == ftell (fout))
> - {
> - unlink (outfilename);
> - }
> - close_input ();
> - close_output (outfilename);
> -}
> -
> -static const char space[] = " ";
> -
> -static char *
> -file_name (const char *file, const char *ext)
> -{
> - char *temp;
> - temp = extendfile (file, ext);
> -
> - if (access (temp, F_OK) != -1)
> - return (temp);
> -
> - free (temp);
> - return (char *) space;
> -}
> -
> -static void
> -mkfile_output (struct commandline *cmd)
> -{
> - char *mkfilename;
> - char *clientname, *clntname, *xdrname, *hdrname;
> - char *servername, *svcname, *servprogname, *clntprogname;
> -
> - svcname = file_name (cmd->infile, "_svc.c");
> - clntname = file_name (cmd->infile, "_clnt.c");
> - xdrname = file_name (cmd->infile, "_xdr.c");
> - hdrname = file_name (cmd->infile, ".h");
> -
> - if (allfiles)
> - {
> - servername = extendfile (cmd->infile, "_server.c");
> - clientname = extendfile (cmd->infile, "_client.c");
> - }
> - else
> - {
> - servername = (char *) space;
> - clientname = (char *) space;
> - }
> - servprogname = extendfile (cmd->infile, "_server");
> - clntprogname = extendfile (cmd->infile, "_client");
> -
> - if (allfiles)
> - {
> - char *cp, *temp;
> -
> - mkfilename = alloc (strlen ("Makefile.") + strlen (cmd->infile) + 1);
> - if (mkfilename == NULL)
> - abort ();
> - temp = strrchr (cmd->infile, '.');
> - cp = stpcpy (mkfilename, "Makefile.");
> - if (temp != NULL)
> - *((char *) stpncpy (cp, cmd->infile, temp - cmd->infile)) = '\0';
> - else
> - stpcpy (cp, cmd->infile);
> -
> - }
> - else
> - mkfilename = (char *) cmd->outfile;
> -
> - checkfiles (NULL, mkfilename);
> - open_output (NULL, mkfilename);
> -
> - fprintf (fout, "\n# This is a template Makefile generated by rpcgen\n");
> -
> - f_print (fout, "\n# Parameters\n\n");
> -
> - f_print (fout, "CLIENT = %s\nSERVER = %s\n\n", clntprogname, servprogname);
> - f_print (fout, "SOURCES_CLNT.c = \nSOURCES_CLNT.h = \n");
> - f_print (fout, "SOURCES_SVC.c = \nSOURCES_SVC.h = \n");
> - f_print (fout, "SOURCES.x = %s\n\n", cmd->infile);
> - f_print (fout, "TARGETS_SVC.c = %s %s %s \n",
> - svcname, servername, xdrname);
> - f_print (fout, "TARGETS_CLNT.c = %s %s %s \n",
> - clntname, clientname, xdrname);
> - f_print (fout, "TARGETS = %s %s %s %s %s %s\n\n",
> - hdrname, xdrname, clntname,
> - svcname, clientname, servername);
> -
> - f_print (fout, "OBJECTS_CLNT = $(SOURCES_CLNT.c:%%.c=%%.o) \
> -$(TARGETS_CLNT.c:%%.c=%%.o)");
> -
> - f_print (fout, "\nOBJECTS_SVC = $(SOURCES_SVC.c:%%.c=%%.o) \
> -$(TARGETS_SVC.c:%%.c=%%.o)");
> -
> - f_print (fout, "\n# Compiler flags \n");
> - if (mtflag)
> - fprintf (fout, "\nCPPFLAGS += -D_REENTRANT\nCFLAGS += -g \nLDLIBS \
> -+= -lnsl -lpthread \n ");
> - else
> - f_print (fout, "\nCFLAGS += -g \nLDLIBS += -lnsl\n");
> - f_print (fout, "RPCGENFLAGS = \n");
> -
> - f_print (fout, "\n# Targets \n\n");
> -
> - f_print (fout, "all : $(CLIENT) $(SERVER)\n\n");
> - f_print (fout, "$(TARGETS) : $(SOURCES.x) \n");
> - f_print (fout, "\trpcgen $(RPCGENFLAGS) $(SOURCES.x)\n\n");
> - f_print (fout, "$(OBJECTS_CLNT) : $(SOURCES_CLNT.c) $(SOURCES_CLNT.h) \
> -$(TARGETS_CLNT.c) \n\n");
> -
> - f_print (fout, "$(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) \
> -$(TARGETS_SVC.c) \n\n");
> - f_print (fout, "$(CLIENT) : $(OBJECTS_CLNT) \n");
> - f_print (fout, "\t$(LINK.c) -o $(CLIENT) $(OBJECTS_CLNT) \
> -$(LDLIBS) \n\n");
> - f_print (fout, "$(SERVER) : $(OBJECTS_SVC) \n");
> - f_print (fout, "\t$(LINK.c) -o $(SERVER) $(OBJECTS_SVC) $(LDLIBS)\n\n ");
> - f_print (fout, "clean:\n\t $(RM) core $(TARGETS) $(OBJECTS_CLNT) \
> -$(OBJECTS_SVC) $(CLIENT) $(SERVER)\n\n");
> - close_output (mkfilename);
> -
> - free (clntprogname);
> - free (servprogname);
> - if (servername != space)
> - free (servername);
> - if (clientname != space)
> - free (clientname);
> - if (mkfilename != (char *) cmd->outfile)
> - free (mkfilename);
> - if (svcname != space)
> - free (svcname);
> - if (clntname != space)
> - free (clntname);
> - if (xdrname != space)
> - free (xdrname);
> - if (hdrname != space)
> - free (hdrname);
> -}
> -
> -/*
> - * Perform registrations for service output
> - * Return 0 if failed; 1 otherwise.
> - */
> -static int
> -do_registers (int argc, const char *argv[])
> -{
> - int i;
> -
> - if (inetdflag || !tirpcflag)
> - {
> - for (i = 1; i < argc; i++)
> - {
> - if (streq (argv[i], "-s"))
> - {
> - if (!check_nettype (argv[i + 1], valid_i_nettypes))
> - return 0;
> - write_inetd_register (argv[i + 1]);
> - i++;
> - }
> - }
> - }
> - else
> - {
> - for (i = 1; i < argc; i++)
> - if (streq (argv[i], "-s"))
> - {
> - if (!check_nettype (argv[i + 1], valid_ti_nettypes))
> - return 0;
> - write_nettype_register (argv[i + 1]);
> - i++;
> - }
> - else if (streq (argv[i], "-n"))
> - {
> - write_netid_register (argv[i + 1]);
> - i++;
> - }
> - }
> - return 1;
> -}
> -
> -/*
> - * Add another argument to the arg list
> - */
> -static void
> -addarg (const char *cp)
> -{
> - if (argcount >= ARGLISTLEN)
> - {
> - fprintf (stderr, _("rpcgen: too many defines\n"));
> - crash ();
> - /*NOTREACHED */
> - }
> - arglist[argcount++] = cp;
> -}
> -
> -static void
> -putarg (int whereto, const char *cp)
> -{
> - if (whereto >= ARGLISTLEN)
> - {
> - fprintf (stderr, _("rpcgen: arglist coding error\n"));
> - crash ();
> - /*NOTREACHED */
> - }
> - arglist[whereto] = cp;
> -}
> -
> -/*
> - * if input file is stdin and an output file is specified then complain
> - * if the file already exists. Otherwise the file may get overwritten
> - * If input file does not exist, exit with an error
> - */
> -
> -static void
> -checkfiles (const char *infile, const char *outfile)
> -{
> - struct stat64 buf;
> -
> - if (infile) /* infile ! = NULL */
> - if (stat64 (infile, &buf) < 0)
> - {
> - perror (infile);
> - crash ();
> - }
> - if (outfile)
> - {
> - if (stat64 (outfile, &buf) < 0)
> - return; /* file does not exist */
> - else
> - {
> - fprintf (stderr,
> - /* TRANS: the file will not be removed; this is an
> - TRANS: informative message. */
> - _("file `%s' already exists and may be overwritten\n"),
> - outfile);
> - crash ();
> - }
> - }
> -}
> -
> -/*
> - * Parse command line arguments
> - */
> -static int
> -parseargs (int argc, const char *argv[], struct commandline *cmd)
> -{
> - int i;
> - int j;
> - int c;
> - char flag[(1 << 8 * sizeof (char))];
> - int nflags;
> -
> - cmdname = argv[0];
> - cmd->infile = cmd->outfile = NULL;
> - if (argc < 2)
> - {
> - return (0);
> - }
> - allfiles = 0;
> - flag['c'] = 0;
> - flag['h'] = 0;
> - flag['l'] = 0;
> - flag['m'] = 0;
> - flag['o'] = 0;
> - flag['s'] = 0;
> - flag['n'] = 0;
> - flag['t'] = 0;
> - flag['S'] = 0;
> - flag['C'] = 0;
> - flag['M'] = 0;
> -
> - for (i = 1; i < argc; i++)
> - {
> - if (argv[i][0] != '-')
> - {
> - if (cmd->infile)
> - {
> - fprintf (stderr,
> - _("Cannot specify more than one input file!\n"));
> - return 0;
> - }
> - cmd->infile = argv[i];
> - }
> - else if (strcmp (argv[i], "--help") == 0)
> - usage (stdout, 0);
> - else if (strcmp (argv[i], "--version") == 0)
> - print_version ();
> - else
> - {
> - for (j = 1; argv[i][j] != 0; j++)
> - {
> - c = argv[i][j];
> - switch (c)
> - {
> - case 'a':
> - allfiles = 1;
> - break;
> - case 'c':
> - case 'h':
> - case 'l':
> - case 'm':
> - case 't':
> - if (flag[c])
> - return 0;
> - flag[c] = 1;
> - break;
> - case 'S':
> - /* sample flag: Ss or Sc.
> - Ss means set flag['S'];
> - Sc means set flag['C'];
> - Sm means set flag['M']; */
> - c = argv[i][++j]; /* get next char */
> - if (c == 's')
> - c = 'S';
> - else if (c == 'c')
> - c = 'C';
> - else if (c == 'm')
> - c = 'M';
> - else
> - return 0;
> -
> - if (flag[c])
> - return 0;
> - flag[c] = 1;
> - break;
> - case 'C': /* ANSI C syntax */
> - Cflag = 1;
> - break;
> -
> - case 'k': /* K&R C syntax */
> - Cflag = 0;
> - break;
> -
> - case 'b': /* turn TIRPC flag off for
> - generating backward compatible
> - */
> - tirpcflag = 0;
> - break;
> -
> - case '5': /* turn TIRPC flag on for
> - generating SysVr4 compatible
> - */
> - tirpcflag = 1;
> - break;
> - case 'I':
> - inetdflag = 1;
> - break;
> - case 'N':
> - newstyle = 1;
> - break;
> - case 'L':
> - logflag = 1;
> - break;
> - case 'K':
> - if (++i == argc)
> - {
> - return (0);
> - }
> - svcclosetime = argv[i];
> - goto nextarg;
> - case 'T':
> - tblflag = 1;
> - break;
> - case 'M':
> - mtflag = 1;
> - break;
> - case 'i':
> - if (++i == argc)
> - {
> - return (0);
> - }
> - inlineflag = atoi (argv[i]);
> - goto nextarg;
> - case 'n':
> - case 'o':
> - case 's':
> - if (argv[i][j - 1] != '-' ||
> - argv[i][j + 1] != 0)
> - {
> - return (0);
> - }
> - flag[c] = 1;
> - if (++i == argc)
> - {
> - return (0);
> - }
> - if (c == 's')
> - {
> - if (!streq (argv[i], "udp") &&
> - !streq (argv[i], "tcp"))
> - return 0;
> - }
> - else if (c == 'o')
> - {
> - if (cmd->outfile)
> - return 0;
> - cmd->outfile = argv[i];
> - }
> - goto nextarg;
> - case 'D':
> - if (argv[i][j - 1] != '-')
> - return 0;
> - addarg (argv[i]);
> - goto nextarg;
> - case 'Y':
> - if (++i == argc)
> - return 0;
> - {
> - size_t len = strlen (argv[i]);
> - pathbuf = malloc (len + 5);
> - if (pathbuf == NULL)
> - {
> - perror (cmdname);
> - crash ();
> - }
> - stpcpy (stpcpy (pathbuf,
> - argv[i]),
> - "/cpp");
> - CPP = pathbuf;
> - cppDefined = 1;
> - goto nextarg;
> - }
> -
> - default:
> - return 0;
> - }
> - }
> - nextarg:
> - ;
> - }
> - }
> -
> - cmd->cflag = flag['c'];
> - cmd->hflag = flag['h'];
> - cmd->lflag = flag['l'];
> - cmd->mflag = flag['m'];
> - cmd->nflag = flag['n'];
> - cmd->sflag = flag['s'];
> - cmd->tflag = flag['t'];
> - cmd->Ssflag = flag['S'];
> - cmd->Scflag = flag['C'];
> - cmd->makefileflag = flag['M'];
> -
> - if (tirpcflag)
> - {
> - pmflag = inetdflag ? 0 : 1; /* pmflag or inetdflag is always TRUE */
> - if ((inetdflag && cmd->nflag))
> - { /* netid not allowed with inetdflag */
> - fprintf (stderr, _("Cannot use netid flag with inetd flag!\n"));
> - return 0;
> - }
> - }
> - else
> - { /* 4.1 mode */
> - pmflag = 0; /* set pmflag only in tirpcmode */
> - if (cmd->nflag)
> - { /* netid needs TIRPC */
> - f_print (stderr, _("Cannot use netid flag without TIRPC!\n"));
> - return (0);
> - }
> - }
> -
> - if (newstyle && (tblflag || cmd->tflag))
> - {
> - f_print (stderr, _("Cannot use table flags with newstyle!\n"));
> - return (0);
> - }
> -
> - /* check no conflicts with file generation flags */
> - nflags = cmd->cflag + cmd->hflag + cmd->lflag + cmd->mflag +
> - cmd->sflag + cmd->nflag + cmd->tflag + cmd->Ssflag + cmd->Scflag;
> -
> - if (nflags == 0)
> - {
> - if (cmd->outfile != NULL || cmd->infile == NULL)
> - {
> - return (0);
> - }
> - }
> - else if (cmd->infile == NULL &&
> - (cmd->Ssflag || cmd->Scflag || cmd->makefileflag))
> - {
> - fprintf (stderr,
> - _("\"infile\" is required for template generation flags.\n"));
> - return 0;
> - }
> - if (nflags > 1)
> - {
> - fprintf (stderr, _("Cannot have more than one file generation flag!\n"));
> - return 0;
> - }
> - return 1;
> -}
> -
> -static void
> -usage (FILE *stream, int status)
> -{
> - fprintf (stream, _("usage: %s infile\n"), cmdname);
> - fprintf (stream, _("\t%s [-abkCLNTM][-Dname[=value]] [-i size] \
> -[-I [-K seconds]] [-Y path] infile\n"), cmdname);
> - fprintf (stream, _("\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] \
> -[-o outfile] [infile]\n"), cmdname);
> - fprintf (stream, _("\t%s [-s nettype]* [-o outfile] [infile]\n"), cmdname);
> - fprintf (stream, _("\t%s [-n netid]* [-o outfile] [infile]\n"), cmdname);
> - options_usage (stream, status);
> - exit (status);
> -}
> -
> -static void
> -options_usage (FILE *stream, int status)
> -{
> - f_print (stream, _("options:\n"));
> - f_print (stream, _("-a\t\tgenerate all files, including samples\n"));
> - f_print (stream, _("-b\t\tbackward compatibility mode (generates code for SunOS 4.1)\n"));
> - f_print (stream, _("-c\t\tgenerate XDR routines\n"));
> - f_print (stream, _("-C\t\tANSI C mode\n"));
> - f_print (stream, _("-Dname[=value]\tdefine a symbol (same as #define)\n"));
> - f_print (stream, _("-h\t\tgenerate header file\n"));
> - f_print (stream, _("-i size\t\tsize at which to start generating inline code\n"));
> - f_print (stream, _("-I\t\tgenerate code for inetd support in server (for SunOS 4.1)\n"));
> - f_print (stream, _("-K seconds\tserver exits after K seconds of inactivity\n"));
> - f_print (stream, _("-l\t\tgenerate client side stubs\n"));
> - f_print (stream, _("-L\t\tserver errors will be printed to syslog\n"));
> - f_print (stream, _("-m\t\tgenerate server side stubs\n"));
> - f_print (stream, _("-M\t\tgenerate MT-safe code\n"));
> - f_print (stream, _("-n netid\tgenerate server code that supports named netid\n"));
> - f_print (stream, _("-N\t\tsupports multiple arguments and call-by-value\n"));
> - f_print (stream, _("-o outfile\tname of the output file\n"));
> - f_print (stream, _("-s nettype\tgenerate server code that supports named nettype\n"));
> - f_print (stream, _("-Sc\t\tgenerate sample client code that uses remote procedures\n"));
> - f_print (stream, _("-Ss\t\tgenerate sample server code that defines remote procedures\n"));
> - f_print (stream, _("-Sm \t\tgenerate makefile template \n"));
> - f_print (stream, _("-t\t\tgenerate RPC dispatch table\n"));
> - f_print (stream, _("-T\t\tgenerate code to support RPC dispatch tables\n"));
> - f_print (stream, _("-Y path\t\tdirectory name to find C preprocessor (cpp)\n"));
> - f_print (stream, _("-5\t\tSysVr4 compatibility mode\n"));
> - f_print (stream, _("--help\t\tgive this help list\n"));
> - f_print (stream, _("--version\tprint program version\n"));
> -
> - f_print (stream, _("\n\
> -For bug reporting instructions, please see:\n\
> -%s.\n"), REPORT_BUGS_TO);
> - exit (status);
> -}
> -
> -static void
> -print_version (void)
> -{
> - printf ("rpcgen %s%s\n", PKGVERSION, VERSION);
> - exit (0);
> -}
> diff --git a/sunrpc/rpc_parse.c b/sunrpc/rpc_parse.c
> deleted file mode 100644
> index 505a6554cf..0000000000
> --- a/sunrpc/rpc_parse.c
> +++ /dev/null
> @@ -1,687 +0,0 @@
> -/*
> - * From: @(#)rpc_parse.c 1.8 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_parse.c, Parser for the RPC protocol compiler
> - * Copyright (C) 1987 Sun Microsystems, Inc.
> - */
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc/types.h"
> -#include "rpc_scan.h"
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -#define ARGNAME "arg"
> -
> -static void isdefined (definition * defp);
> -static void def_struct (definition * defp);
> -static void def_program (definition * defp);
> -static void def_enum (definition * defp);
> -static void def_const (definition * defp);
> -static void def_union (definition * defp);
> -static void check_type_name (const char *name, int new_type);
> -static void def_typedef (definition * defp);
> -static void get_declaration (declaration * dec, defkind dkind);
> -static void get_prog_declaration (declaration * dec, defkind dkind, int num);
> -static void get_type (const char **prefixp, const char **typep, defkind dkind);
> -static void unsigned_dec (const char **typep);
> -
> -/*
> - * return the next definition you see
> - */
> -definition *
> -get_definition (void)
> -{
> - definition *defp;
> - token tok;
> -
> - defp = ALLOC (definition);
> - get_token (&tok);
> - switch (tok.kind)
> - {
> - case TOK_STRUCT:
> - def_struct (defp);
> - break;
> - case TOK_UNION:
> - def_union (defp);
> - break;
> - case TOK_TYPEDEF:
> - def_typedef (defp);
> - break;
> - case TOK_ENUM:
> - def_enum (defp);
> - break;
> - case TOK_PROGRAM:
> - def_program (defp);
> - break;
> - case TOK_CONST:
> - def_const (defp);
> - break;
> - case TOK_EOF:
> - free (defp);
> - return (NULL);
> - default:
> - error ("definition keyword expected");
> - }
> - scan (TOK_SEMICOLON, &tok);
> - isdefined (defp);
> - return (defp);
> -}
> -
> -static void
> -isdefined (definition * defp)
> -{
> - STOREVAL (&defined, defp);
> -}
> -
> -static void
> -def_struct (definition * defp)
> -{
> - token tok;
> - declaration dec;
> - decl_list *decls;
> - decl_list **tailp;
> -
> - defp->def_kind = DEF_STRUCT;
> -
> - scan (TOK_IDENT, &tok);
> - defp->def_name = tok.str;
> - scan (TOK_LBRACE, &tok);
> - tailp = &defp->def.st.decls;
> - do
> - {
> - get_declaration (&dec, DEF_STRUCT);
> - decls = ALLOC (decl_list);
> - decls->decl = dec;
> - *tailp = decls;
> - tailp = &decls->next;
> - scan (TOK_SEMICOLON, &tok);
> - peek (&tok);
> - }
> - while (tok.kind != TOK_RBRACE);
> - get_token (&tok);
> - *tailp = NULL;
> -}
> -
> -static void
> -def_program (definition * defp)
> -{
> - token tok;
> - declaration dec;
> - decl_list *decls;
> - decl_list **tailp;
> - version_list *vlist;
> - version_list **vtailp;
> - proc_list *plist;
> - proc_list **ptailp;
> - int num_args;
> - bool_t isvoid = FALSE; /* whether first argument is void */
> - defp->def_kind = DEF_PROGRAM;
> - scan (TOK_IDENT, &tok);
> - defp->def_name = tok.str;
> - scan (TOK_LBRACE, &tok);
> - vtailp = &defp->def.pr.versions;
> - tailp = &defp->def.st.decls;
> - scan (TOK_VERSION, &tok);
> - do
> - {
> - scan (TOK_IDENT, &tok);
> - vlist = ALLOC (version_list);
> - vlist->vers_name = tok.str;
> - scan (TOK_LBRACE, &tok);
> - ptailp = &vlist->procs;
> - do
> - {
> - /* get result type */
> - plist = ALLOC (proc_list);
> - get_type (&plist->res_prefix, &plist->res_type,
> - DEF_PROGRAM);
> - if (streq (plist->res_type, "opaque"))
> - {
> - error ("illegal result type");
> - }
> - scan (TOK_IDENT, &tok);
> - plist->proc_name = tok.str;
> - scan (TOK_LPAREN, &tok);
> - /* get args - first one */
> - num_args = 1;
> - isvoid = FALSE;
> - /* type of DEF_PROGRAM in the first
> - * get_prog_declaration and DEF_STURCT in the next
> - * allows void as argument if it is the only argument
> - */
> - get_prog_declaration (&dec, DEF_PROGRAM, num_args);
> - if (streq (dec.type, "void"))
> - isvoid = TRUE;
> - decls = ALLOC (decl_list);
> - plist->args.decls = decls;
> - decls->decl = dec;
> - tailp = &decls->next;
> - /* get args */
> - while (peekscan (TOK_COMMA, &tok))
> - {
> - num_args++;
> - get_prog_declaration (&dec, DEF_STRUCT,
> - num_args);
> - decls = ALLOC (decl_list);
> - decls->decl = dec;
> - *tailp = decls;
> - if (streq (dec.type, "void"))
> - isvoid = TRUE;
> - tailp = &decls->next;
> - }
> - /* multiple arguments are only allowed in newstyle */
> - if (!newstyle && num_args > 1)
> - {
> - error ("only one argument is allowed");
> - }
> - if (isvoid && num_args > 1)
> - {
> - error ("illegal use of void in program definition");
> - }
> - *tailp = NULL;
> - scan (TOK_RPAREN, &tok);
> - scan (TOK_EQUAL, &tok);
> - scan_num (&tok);
> - scan (TOK_SEMICOLON, &tok);
> - plist->proc_num = tok.str;
> - plist->arg_num = num_args;
> - *ptailp = plist;
> - ptailp = &plist->next;
> - peek (&tok);
> - }
> - while (tok.kind != TOK_RBRACE);
> - *ptailp = NULL;
> - *vtailp = vlist;
> - vtailp = &vlist->next;
> - scan (TOK_RBRACE, &tok);
> - scan (TOK_EQUAL, &tok);
> - scan_num (&tok);
> - vlist->vers_num = tok.str;
> - /* make the argument structure name for each arg */
> - for (plist = vlist->procs; plist != NULL;
> - plist = plist->next)
> - {
> - plist->args.argname = make_argname (plist->proc_name,
> - vlist->vers_num);
> - /* free the memory ?? */
> - }
> - scan (TOK_SEMICOLON, &tok);
> - scan2 (TOK_VERSION, TOK_RBRACE, &tok);
> - }
> - while (tok.kind == TOK_VERSION);
> - scan (TOK_EQUAL, &tok);
> - scan_num (&tok);
> - defp->def.pr.prog_num = tok.str;
> - *vtailp = NULL;
> -}
> -
> -
> -static void
> -def_enum (definition * defp)
> -{
> - token tok;
> - enumval_list *elist;
> - enumval_list **tailp;
> -
> - defp->def_kind = DEF_ENUM;
> - scan (TOK_IDENT, &tok);
> - defp->def_name = tok.str;
> - scan (TOK_LBRACE, &tok);
> - tailp = &defp->def.en.vals;
> - do
> - {
> - scan (TOK_IDENT, &tok);
> - elist = ALLOC (enumval_list);
> - elist->name = tok.str;
> - elist->assignment = NULL;
> - scan3 (TOK_COMMA, TOK_RBRACE, TOK_EQUAL, &tok);
> - if (tok.kind == TOK_EQUAL)
> - {
> - scan_num (&tok);
> - elist->assignment = tok.str;
> - scan2 (TOK_COMMA, TOK_RBRACE, &tok);
> - }
> - *tailp = elist;
> - tailp = &elist->next;
> - }
> - while (tok.kind != TOK_RBRACE);
> - *tailp = NULL;
> -}
> -
> -static void
> -def_const (definition * defp)
> -{
> - token tok;
> -
> - defp->def_kind = DEF_CONST;
> - scan (TOK_IDENT, &tok);
> - defp->def_name = tok.str;
> - scan (TOK_EQUAL, &tok);
> - scan2 (TOK_IDENT, TOK_STRCONST, &tok);
> - defp->def.co = tok.str;
> -}
> -
> -static void
> -def_union (definition *defp)
> -{
> - token tok;
> - declaration dec;
> - case_list *cases;
> -/* case_list *tcase; */
> - case_list **tailp;
> -#if 0
> - int flag;
> -#endif
> -
> - defp->def_kind = DEF_UNION;
> - scan (TOK_IDENT, &tok);
> - defp->def_name = tok.str;
> - scan (TOK_SWITCH, &tok);
> - scan (TOK_LPAREN, &tok);
> - get_declaration (&dec, DEF_UNION);
> - defp->def.un.enum_decl = dec;
> - tailp = &defp->def.un.cases;
> - scan (TOK_RPAREN, &tok);
> - scan (TOK_LBRACE, &tok);
> - scan (TOK_CASE, &tok);
> - while (tok.kind == TOK_CASE)
> - {
> - scan2 (TOK_IDENT, TOK_CHARCONST, &tok);
> - cases = ALLOC (case_list);
> - cases->case_name = tok.str;
> - scan (TOK_COLON, &tok);
> - /* now peek at next token */
> -#if 0
> - flag = 0;
> -#endif
> - if (peekscan (TOK_CASE, &tok))
> - {
> -
> - do
> - {
> - scan2 (TOK_IDENT, TOK_CHARCONST, &tok);
> - cases->contflag = 1; /* continued case statement */
> - *tailp = cases;
> - tailp = &cases->next;
> - cases = ALLOC (case_list);
> - cases->case_name = tok.str;
> - scan (TOK_COLON, &tok);
> -
> - }
> - while (peekscan (TOK_CASE, &tok));
> - }
> -#if 0
> - else if (flag)
> - {
> -
> - *tailp = cases;
> - tailp = &cases->next;
> - cases = ALLOC (case_list);
> - };
> -#endif
> -
> - get_declaration (&dec, DEF_UNION);
> - cases->case_decl = dec;
> - cases->contflag = 0; /* no continued case statement */
> - *tailp = cases;
> - tailp = &cases->next;
> - scan (TOK_SEMICOLON, &tok);
> -
> - scan3 (TOK_CASE, TOK_DEFAULT, TOK_RBRACE, &tok);
> - }
> - *tailp = NULL;
> - if (tok.kind == TOK_DEFAULT)
> - {
> - scan (TOK_COLON, &tok);
> - get_declaration (&dec, DEF_UNION);
> - defp->def.un.default_decl = ALLOC (declaration);
> - *defp->def.un.default_decl = dec;
> - scan (TOK_SEMICOLON, &tok);
> - scan (TOK_RBRACE, &tok);
> - }
> - else
> - {
> - defp->def.un.default_decl = NULL;
> - }
> -}
> -
> -static const char *reserved_words[] =
> -{
> - "array",
> - "bytes",
> - "destroy",
> - "free",
> - "getpos",
> - "inline",
> - "pointer",
> - "reference",
> - "setpos",
> - "sizeof",
> - "union",
> - "vector",
> - NULL
> -};
> -
> -static const char *reserved_types[] =
> -{
> - "opaque",
> - "string",
> - NULL
> -};
> -
> -/*
> - * check that the given name is not one that would eventually result in
> - * xdr routines that would conflict with internal XDR routines.
> - */
> -static void
> -check_type_name (const char *name, int new_type)
> -{
> - int i;
> - char tmp[100];
> -
> - for (i = 0; reserved_words[i] != NULL; i++)
> - {
> - if (strcmp (name, reserved_words[i]) == 0)
> - {
> - sprintf (tmp,
> - "illegal (reserved) name :\'%s\' in type definition", name);
> - error (tmp);
> - }
> - }
> - if (new_type)
> - {
> - for (i = 0; reserved_types[i] != NULL; i++)
> - {
> - if (strcmp (name, reserved_types[i]) == 0)
> - {
> - sprintf (tmp,
> - "illegal (reserved) name :\'%s\' in type definition", name);
> - error (tmp);
> - }
> - }
> - }
> -}
> -
> -
> -
> -static void
> -def_typedef (definition * defp)
> -{
> - declaration dec;
> -
> - defp->def_kind = DEF_TYPEDEF;
> - get_declaration (&dec, DEF_TYPEDEF);
> - defp->def_name = dec.name;
> - check_type_name (dec.name, 1);
> - defp->def.ty.old_prefix = dec.prefix;
> - defp->def.ty.old_type = dec.type;
> - defp->def.ty.rel = dec.rel;
> - defp->def.ty.array_max = dec.array_max;
> -}
> -
> -static void
> -get_declaration (declaration * dec, defkind dkind)
> -{
> - token tok;
> -
> - get_type (&dec->prefix, &dec->type, dkind);
> - dec->rel = REL_ALIAS;
> - if (streq (dec->type, "void"))
> - {
> - return;
> - }
> -
> - check_type_name (dec->type, 0);
> -
> - scan2 (TOK_STAR, TOK_IDENT, &tok);
> - if (tok.kind == TOK_STAR)
> - {
> - dec->rel = REL_POINTER;
> - scan (TOK_IDENT, &tok);
> - }
> - dec->name = tok.str;
> - if (peekscan (TOK_LBRACKET, &tok))
> - {
> - if (dec->rel == REL_POINTER)
> - {
> - error ("no array-of-pointer declarations -- use typedef");
> - }
> - dec->rel = REL_VECTOR;
> - scan_num (&tok);
> - dec->array_max = tok.str;
> - scan (TOK_RBRACKET, &tok);
> - }
> - else if (peekscan (TOK_LANGLE, &tok))
> - {
> - if (dec->rel == REL_POINTER)
> - {
> - error ("no array-of-pointer declarations -- use typedef");
> - }
> - dec->rel = REL_ARRAY;
> - if (peekscan (TOK_RANGLE, &tok))
> - {
> - dec->array_max = "~0"; /* unspecified size, use max */
> - }
> - else
> - {
> - scan_num (&tok);
> - dec->array_max = tok.str;
> - scan (TOK_RANGLE, &tok);
> - }
> - }
> - if (streq (dec->type, "opaque"))
> - {
> - if (dec->rel != REL_ARRAY && dec->rel != REL_VECTOR)
> - {
> - error ("array declaration expected");
> - }
> - }
> - else if (streq (dec->type, "string"))
> - {
> - if (dec->rel != REL_ARRAY)
> - {
> - error ("variable-length array declaration expected");
> - }
> - }
> -}
> -
> -static void
> -get_prog_declaration (declaration * dec, defkind dkind, int num /* arg number */ )
> -{
> - token tok;
> - char name[MAXLINESIZE]; /* argument name */
> -
> - if (dkind == DEF_PROGRAM)
> - {
> - peek (&tok);
> - if (tok.kind == TOK_RPAREN)
> - { /* no arguments */
> - dec->rel = REL_ALIAS;
> - dec->type = "void";
> - dec->prefix = NULL;
> - dec->name = NULL;
> - return;
> - }
> - }
> - get_type (&dec->prefix, &dec->type, dkind);
> - dec->rel = REL_ALIAS;
> - if (peekscan (TOK_IDENT, &tok)) /* optional name of argument */
> - strcpy (name, tok.str);
> - else
> - sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
> -
> - dec->name = (char *) strdup (name);
> -
> - if (streq (dec->type, "void"))
> - {
> - return;
> - }
> -
> - if (streq (dec->type, "opaque"))
> - {
> - error ("opaque -- illegal argument type");
> - }
> - if (peekscan (TOK_STAR, &tok))
> - {
> - if (streq (dec->type, "string"))
> - {
> - error ("pointer to string not allowed in program arguments\n");
> - }
> - dec->rel = REL_POINTER;
> - if (peekscan (TOK_IDENT, &tok)) /* optional name of argument */
> - dec->name = strdup (tok.str);
> - }
> - if (peekscan (TOK_LANGLE, &tok))
> - {
> - if (!streq (dec->type, "string"))
> - {
> - error ("arrays cannot be declared as arguments to procedures -- use typedef");
> - }
> - dec->rel = REL_ARRAY;
> - if (peekscan (TOK_RANGLE, &tok))
> - {
> - dec->array_max = "~0"; /* unspecified size, use max */
> - }
> - else
> - {
> - scan_num (&tok);
> - dec->array_max = tok.str;
> - scan (TOK_RANGLE, &tok);
> - }
> - }
> - if (streq (dec->type, "string"))
> - {
> - if (dec->rel != REL_ARRAY)
> - { /* .x specifies just string as
> - * type of argument
> - * - make it string<>
> - */
> - dec->rel = REL_ARRAY;
> - dec->array_max = "~0"; /* unspecified size, use max */
> - }
> - }
> -}
> -
> -static void
> -get_type (const char **prefixp, const char **typep, defkind dkind)
> -{
> - token tok;
> -
> - *prefixp = NULL;
> - get_token (&tok);
> - switch (tok.kind)
> - {
> - case TOK_IDENT:
> - *typep = tok.str;
> - break;
> - case TOK_STRUCT:
> - case TOK_ENUM:
> - case TOK_UNION:
> - *prefixp = tok.str;
> - scan (TOK_IDENT, &tok);
> - *typep = tok.str;
> - break;
> - case TOK_UNSIGNED:
> - unsigned_dec (typep);
> - break;
> - case TOK_SHORT:
> - *typep = "short";
> - (void) peekscan (TOK_INT, &tok);
> - break;
> - case TOK_LONG:
> - *typep = "long";
> - (void) peekscan (TOK_INT, &tok);
> - break;
> - case TOK_HYPER:
> - *typep = "quad_t";
> - (void) peekscan(TOK_INT, &tok);
> - break;
> - case TOK_VOID:
> - if (dkind != DEF_UNION && dkind != DEF_PROGRAM)
> - {
> - error ("voids allowed only inside union and program definitions with one argument");
> - }
> - *typep = tok.str;
> - break;
> - case TOK_STRING:
> - case TOK_OPAQUE:
> - case TOK_CHAR:
> - case TOK_INT:
> - case TOK_FLOAT:
> - case TOK_DOUBLE:
> - case TOK_BOOL:
> - *typep = tok.str;
> - break;
> - default:
> - error ("expected type specifier");
> - }
> -}
> -
> -static void
> -unsigned_dec (const char **typep)
> -{
> - token tok;
> -
> - peek (&tok);
> - switch (tok.kind)
> - {
> - case TOK_CHAR:
> - get_token (&tok);
> - *typep = "u_char";
> - break;
> - case TOK_SHORT:
> - get_token (&tok);
> - *typep = "u_short";
> - (void) peekscan (TOK_INT, &tok);
> - break;
> - case TOK_LONG:
> - get_token (&tok);
> - *typep = "u_long";
> - (void) peekscan (TOK_INT, &tok);
> - break;
> - case TOK_HYPER:
> - get_token (&tok);
> - *typep = "u_quad_t";
> - (void) peekscan(TOK_INT, &tok);
> - break;
> - case TOK_INT:
> - get_token (&tok);
> - *typep = "u_int";
> - break;
> - default:
> - *typep = "u_int";
> - break;
> - }
> -}
> diff --git a/sunrpc/rpc_parse.h b/sunrpc/rpc_parse.h
> deleted file mode 100644
> index e2e2f1e106..0000000000
> --- a/sunrpc/rpc_parse.h
> +++ /dev/null
> @@ -1,165 +0,0 @@
> -/* @(#)rpc_parse.h 1.3 90/08/29
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - *
> - * rpc_parse.h, Definitions for the RPCL parser
> - */
> -
> -enum defkind {
> - DEF_CONST,
> - DEF_STRUCT,
> - DEF_UNION,
> - DEF_ENUM,
> - DEF_TYPEDEF,
> - DEF_PROGRAM
> -};
> -typedef enum defkind defkind;
> -
> -typedef const char *const_def;
> -
> -enum relation {
> - REL_VECTOR, /* fixed length array */
> - REL_ARRAY, /* variable length array */
> - REL_POINTER, /* pointer */
> - REL_ALIAS /* simple */
> -};
> -typedef enum relation relation;
> -
> -struct typedef_def {
> - const char *old_prefix;
> - const char *old_type;
> - relation rel;
> - const char *array_max;
> -};
> -typedef struct typedef_def typedef_def;
> -
> -struct enumval_list {
> - const char *name;
> - const char *assignment;
> - struct enumval_list *next;
> -};
> -typedef struct enumval_list enumval_list;
> -
> -struct enum_def {
> - enumval_list *vals;
> -};
> -typedef struct enum_def enum_def;
> -
> -struct declaration {
> - const char *prefix;
> - const char *type;
> - const char *name;
> - relation rel;
> - const char *array_max;
> -};
> -typedef struct declaration declaration;
> -
> -struct decl_list {
> - declaration decl;
> - struct decl_list *next;
> -};
> -typedef struct decl_list decl_list;
> -
> -struct struct_def {
> - decl_list *decls;
> -};
> -typedef struct struct_def struct_def;
> -
> -struct case_list {
> - const char *case_name;
> - int contflag;
> - declaration case_decl;
> - struct case_list *next;
> -};
> -typedef struct case_list case_list;
> -
> -struct union_def {
> - declaration enum_decl;
> - case_list *cases;
> - declaration *default_decl;
> -};
> -typedef struct union_def union_def;
> -
> -struct arg_list {
> - const char *argname; /* name of struct for arg*/
> - decl_list *decls;
> -};
> -
> -typedef struct arg_list arg_list;
> -
> -struct proc_list {
> - const char *proc_name;
> - const char *proc_num;
> - arg_list args;
> - int arg_num;
> - const char *res_type;
> - const char *res_prefix;
> - struct proc_list *next;
> -};
> -typedef struct proc_list proc_list;
> -
> -struct version_list {
> - const char *vers_name;
> - const char *vers_num;
> - proc_list *procs;
> - struct version_list *next;
> -};
> -typedef struct version_list version_list;
> -
> -struct program_def {
> - const char *prog_num;
> - version_list *versions;
> -};
> -typedef struct program_def program_def;
> -
> -struct definition {
> - const char *def_name;
> - defkind def_kind;
> - union {
> - const_def co;
> - struct_def st;
> - union_def un;
> - enum_def en;
> - typedef_def ty;
> - program_def pr;
> - } def;
> -};
> -typedef struct definition definition;
> -
> -definition *get_definition(void);
> -
> -
> -struct bas_type
> -{
> - const char *name;
> - int length;
> - struct bas_type *next;
> -};
> -
> -typedef struct bas_type bas_type;
> diff --git a/sunrpc/rpc_sample.c b/sunrpc/rpc_sample.c
> deleted file mode 100644
> index e90b58c080..0000000000
> --- a/sunrpc/rpc_sample.c
> +++ /dev/null
> @@ -1,336 +0,0 @@
> -/*
> - * From: @(#)rpc_sample.c 1.1 90/08/30
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_sample.c, Sample client-server code outputter for the RPC protocol compiler
> - */
> -
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -
> -static const char RQSTP[] = "rqstp";
> -
> -static void write_sample_client (const char *program_name, version_list * vp);
> -static void write_sample_server (definition * def);
> -static void return_type (proc_list * plist);
> -
> -
> -void
> -write_sample_svc (definition * def)
> -{
> -
> - if (def->def_kind != DEF_PROGRAM)
> - return;
> - write_sample_server (def);
> -}
> -
> -
> -int
> -write_sample_clnt (definition * def)
> -{
> - version_list *vp;
> - int count = 0;
> -
> - if (def->def_kind != DEF_PROGRAM)
> - return 0;
> - /* generate sample code for each version */
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - write_sample_client (def->def_name, vp);
> - ++count;
> - }
> - return count;
> -}
> -
> -
> -static void
> -write_sample_client (const char *program_name, version_list * vp)
> -{
> - proc_list *proc;
> - int i;
> - decl_list *l;
> -
> - f_print (fout, "\n\nvoid\n");
> - pvname (program_name, vp->vers_num);
> - if (Cflag)
> - f_print (fout, "(char *host)\n{\n");
> - else
> - f_print (fout, "(host)\nchar *host;\n{\n");
> - f_print (fout, "\tCLIENT *clnt;\n");
> -
> - i = 0;
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - f_print (fout, "\t");
> - ++i;
> - if (mtflag)
> - {
> - f_print (fout, "enum clnt_stat retval_%d;\n\t", i);
> - ptype (proc->res_prefix, proc->res_type, 1);
> - if (!streq (proc->res_type, "void"))
> - f_print (fout, "result_%d;\n", i);
> - else
> - fprintf (fout, "*result_%d;\n", i);
> - }
> - else
> - {
> - ptype (proc->res_prefix, proc->res_type, 1);
> - f_print (fout, " *result_%d;\n", i);
> - }
> - /* print out declarations for arguments */
> - if (proc->arg_num < 2 && !newstyle)
> - {
> - f_print (fout, "\t");
> - if (!streq (proc->args.decls->decl.type, "void"))
> - {
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 1);
> - f_print (fout, " ");
> - }
> - else
> - f_print (fout, "char *"); /* cannot have "void" type */
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "_arg;\n");
> - }
> - else if (!streq (proc->args.decls->decl.type, "void"))
> - {
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - {
> - f_print (fout, "\t");
> - ptype (l->decl.prefix, l->decl.type, 1);
> - if (strcmp (l->decl.type, "string") == 1)
> - f_print (fout, " ");
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "_%s;\n", l->decl.name);
> - }
> - }
> - }
> -
> - /* generate creation of client handle */
> - f_print(fout, "\n#ifndef\tDEBUG\n");
> - f_print (fout, "\tclnt = clnt_create (host, %s, %s, \"%s\");\n",
> - program_name, vp->vers_name, tirpcflag ? "netpath" : "udp");
> - f_print (fout, "\tif (clnt == NULL) {\n");
> - f_print (fout, "\t\tclnt_pcreateerror (host);\n");
> - f_print (fout, "\t\texit (1);\n\t}\n");
> - f_print(fout, "#endif\t/* DEBUG */\n\n");
> -
> - /* generate calls to procedures */
> - i = 0;
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - if (mtflag)
> - f_print(fout, "\tretval_%d = ",++i);
> - else
> - f_print (fout, "\tresult_%d = ", ++i);
> - pvname (proc->proc_name, vp->vers_num);
> - if (proc->arg_num < 2 && !newstyle)
> - {
> - f_print (fout, "(");
> - if (streq (proc->args.decls->decl.type, "void"))/* cast to void* */
> - f_print (fout, "(void*)");
> - f_print (fout, "&");
> - pvname (proc->proc_name, vp->vers_num);
> - if (mtflag)
> - f_print(fout, "_arg, &result_%d, clnt);\n", i);
> - else
> - f_print (fout, "_arg, clnt);\n");
> - }
> - else if (streq (proc->args.decls->decl.type, "void"))
> - {
> - if (mtflag)
> - f_print (fout, "(&result_%d, clnt);\n", i);
> - else
> - f_print (fout, "(clnt);\n");
> - }
> - else
> - {
> - f_print (fout, "(");
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - {
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "_%s, ", l->decl.name);
> - }
> - if (mtflag)
> - f_print(fout, "&result_%d, ", i);
> - f_print (fout, "clnt);\n");
> - }
> - if (mtflag)
> - {
> - f_print(fout, "\tif (retval_%d != RPC_SUCCESS) {\n", i);
> - }
> - else
> - {
> - f_print(fout, "\tif (result_%d == (", i);
> - ptype(proc->res_prefix, proc->res_type, 1);
> - f_print(fout, "*) NULL) {\n");
> - }
> - f_print(fout, "\t\tclnt_perror (clnt, \"call failed\");\n");
> - f_print(fout, "\t}\n");
> - }
> -
> - f_print (fout, "#ifndef\tDEBUG\n");
> - f_print (fout, "\tclnt_destroy (clnt);\n");
> - f_print (fout, "#endif\t /* DEBUG */\n");
> - f_print (fout, "}\n");
> -}
> -
> -static void
> -write_sample_server (definition * def)
> -{
> - version_list *vp;
> - proc_list *proc;
> -
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - f_print (fout, "\n");
> - if (!mtflag)
> - {
> - return_type (proc);
> - f_print (fout, "*\n");
> - }
> - else
> - f_print (fout, "bool_t\n");
> - if (Cflag || mtflag)
> - pvname_svc (proc->proc_name, vp->vers_num);
> - else
> - pvname(proc->proc_name, vp->vers_num);
> - printarglist(proc, "result", RQSTP, "struct svc_req *");
> - f_print(fout, "{\n");
> - if (!mtflag)
> - {
> - f_print(fout, "\tstatic ");
> - if(!streq(proc->res_type, "void"))
> - return_type(proc);
> - else
> - f_print(fout, "char *");
> - /* cannot have void type */
> - /* f_print(fout, " result;\n", proc->res_type); */
> - f_print(fout, " result;\n");
> - }
> - else
> - f_print(fout, "\tbool_t retval;\n");
> - fprintf (fout, "\n\t/*\n\t * insert server code here\n\t */\n\n");
> -
> - if (!mtflag)
> - {
> - if (!streq(proc->res_type, "void"))
> - f_print(fout, "\treturn &result;\n}\n");
> - else /* cast back to void * */
> - f_print(fout, "\treturn (void *) &result;\n}\n");
> - }
> - else
> - f_print(fout, "\treturn retval;\n}\n");
> - }
> -
> - /* put in sample freeing routine */
> - if (mtflag)
> - {
> - f_print(fout, "\nint\n");
> - pvname(def->def_name, vp->vers_num);
> - if (Cflag)
> - f_print(fout,"_freeresult (SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)\n");
> - else
> - {
> - f_print(fout,"_freeresult (transp, xdr_result, result)\n");
> - f_print(fout,"\tSVCXPRT *transp;\n");
> - f_print(fout,"\txdrproc_t xdr_result;\n");
> - f_print(fout,"\tcaddr_t result;\n");
> - }
> - f_print(fout, "{\n");
> - f_print(fout, "\txdr_free (xdr_result, result);\n");
> - f_print(fout,
> - "\n\t/*\n\t * Insert additional freeing code here, if needed\n\t */\n");
> - f_print(fout, "\n\treturn 1;\n}\n");
> - }
> - }
> -}
> -
> -
> -
> -static void
> -return_type (proc_list * plist)
> -{
> - ptype (plist->res_prefix, plist->res_type, 1);
> -}
> -
> -void
> -add_sample_msg (void)
> -{
> - f_print (fout, "/*\n");
> - f_print (fout, " * This is sample code generated by rpcgen.\n");
> - f_print (fout, " * These are only templates and you can use them\n");
> - f_print (fout, " * as a guideline for developing your own functions.\n");
> - f_print (fout, " */\n\n");
> -}
> -
> -void
> -write_sample_clnt_main (void)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> -
> - f_print (fout, "\n\n");
> - if (Cflag)
> - f_print (fout, "int\nmain (int argc, char *argv[])\n{\n");
> - else
> - f_print (fout, "int\nmain (argc, argv)\nint argc;\nchar *argv[];\n{\n");
> -
> - f_print (fout, "\tchar *host;");
> - f_print (fout, "\n\n\tif (argc < 2) {");
> - f_print (fout, "\n\t\tprintf (\"usage: %%s server_host\\n\", argv[0]);\n");
> - f_print (fout, "\t\texit (1);\n\t}");
> - f_print (fout, "\n\thost = argv[1];\n");
> -
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - continue;
> - }
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout, "\t");
> - pvname (def->def_name, vp->vers_num);
> - f_print (fout, " (host);\n");
> - }
> - }
> - f_print (fout, "exit (0);\n}\n");
> -}
> diff --git a/sunrpc/rpc_scan.c b/sunrpc/rpc_scan.c
> deleted file mode 100644
> index 0a88bafe76..0000000000
> --- a/sunrpc/rpc_scan.c
> +++ /dev/null
> @@ -1,544 +0,0 @@
> -/*
> - * From: @(#)rpc_scan.c 1.11 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_scan.c, Scanner for the RPC protocol compiler
> - * Copyright (C) 1987, Sun Microsystems, Inc.
> - */
> -#include <stdio.h>
> -#include <ctype.h>
> -#include <string.h>
> -#include <libintl.h>
> -#include "rpc_scan.h"
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -#define startcomment(where) (where[0] == '/' && where[1] == '*')
> -#define endcomment(where) (where[-1] == '*' && where[0] == '/')
> -
> -static int pushed = 0; /* is a token pushed */
> -static token lasttok; /* last token, if pushed */
> -
> -static void unget_token (token * tokp);
> -static void findstrconst (const char **str, const char **val);
> -static void findchrconst (const char **str, const char **val);
> -static void findconst (const char **str, const char **val);
> -static void findkind (const char **mark, token * tokp);
> -static int cppline (const char *line);
> -static int directive (const char *line);
> -static void printdirective (const char *line);
> -static void docppline (const char *line, int *lineno, const char **fname);
> -
> -/*
> - * scan expecting 1 given token
> - */
> -void
> -scan (tok_kind expect, token * tokp)
> -{
> - get_token (tokp);
> - if (tokp->kind != expect)
> - expected1 (expect);
> -}
> -
> -/*
> - * scan expecting any of the 2 given tokens
> - */
> -void
> -scan2 (tok_kind expect1, tok_kind expect2, token * tokp)
> -{
> - get_token (tokp);
> - if (tokp->kind != expect1 && tokp->kind != expect2)
> - {
> - expected2 (expect1, expect2);
> - }
> -}
> -
> -/*
> - * scan expecting any of the 3 given token
> - */
> -void
> -scan3 (tok_kind expect1, tok_kind expect2, tok_kind expect3, token * tokp)
> -{
> - get_token (tokp);
> - if (tokp->kind != expect1 && tokp->kind != expect2
> - && tokp->kind != expect3)
> - {
> - expected3 (expect1, expect2, expect3);
> - }
> -}
> -
> -/*
> - * scan expecting a constant, possibly symbolic
> - */
> -void
> -scan_num (token *tokp)
> -{
> - get_token (tokp);
> - switch (tokp->kind)
> - {
> - case TOK_IDENT:
> - break;
> - default:
> - error (_("constant or identifier expected"));
> - }
> -}
> -
> -/*
> - * Peek at the next token
> - */
> -void
> -peek (token *tokp)
> -{
> - get_token (tokp);
> - unget_token (tokp);
> -}
> -
> -/*
> - * Peek at the next token and scan it if it matches what you expect
> - */
> -int
> -peekscan (tok_kind expect, token *tokp)
> -{
> - peek (tokp);
> - if (tokp->kind == expect)
> - {
> - get_token (tokp);
> - return 1;
> - }
> - return 0;
> -}
> -
> -/*
> - * Get the next token, printing out any directive that are encountered.
> - */
> -void
> -get_token (token *tokp)
> -{
> - int commenting;
> -
> - if (pushed)
> - {
> - pushed = 0;
> - *tokp = lasttok;
> - return;
> - }
> - commenting = 0;
> - for (;;)
> - {
> - if (*where == 0)
> - {
> - for (;;)
> - {
> - if (!fgets (curline, MAXLINESIZE, fin))
> - {
> - tokp->kind = TOK_EOF;
> - *curline = 0;
> - where = curline;
> - return;
> - }
> - linenum++;
> - if (commenting)
> - {
> - break;
> - }
> - else if (cppline (curline))
> - {
> - docppline (curline, &linenum,
> - &infilename);
> - }
> - else if (directive (curline))
> - {
> - printdirective (curline);
> - }
> - else
> - {
> - break;
> - }
> - }
> - where = curline;
> - }
> - else if (isspace (*where))
> - {
> - while (isspace (*where))
> - {
> - where++; /* eat */
> - }
> - }
> - else if (commenting)
> - {
> - for (where++; *where; where++)
> - {
> - if (endcomment (where))
> - {
> - where++;
> - commenting--;
> - break;
> - }
> - }
> - }
> - else if (startcomment (where))
> - {
> - where += 2;
> - commenting++;
> - }
> - else
> - {
> - break;
> - }
> - }
> -
> - /*
> - * 'where' is not whitespace, comment or directive Must be a token!
> - */
> - switch (*where)
> - {
> - case ':':
> - tokp->kind = TOK_COLON;
> - where++;
> - break;
> - case ';':
> - tokp->kind = TOK_SEMICOLON;
> - where++;
> - break;
> - case ',':
> - tokp->kind = TOK_COMMA;
> - where++;
> - break;
> - case '=':
> - tokp->kind = TOK_EQUAL;
> - where++;
> - break;
> - case '*':
> - tokp->kind = TOK_STAR;
> - where++;
> - break;
> - case '[':
> - tokp->kind = TOK_LBRACKET;
> - where++;
> - break;
> - case ']':
> - tokp->kind = TOK_RBRACKET;
> - where++;
> - break;
> - case '{':
> - tokp->kind = TOK_LBRACE;
> - where++;
> - break;
> - case '}':
> - tokp->kind = TOK_RBRACE;
> - where++;
> - break;
> - case '(':
> - tokp->kind = TOK_LPAREN;
> - where++;
> - break;
> - case ')':
> - tokp->kind = TOK_RPAREN;
> - where++;
> - break;
> - case '<':
> - tokp->kind = TOK_LANGLE;
> - where++;
> - break;
> - case '>':
> - tokp->kind = TOK_RANGLE;
> - where++;
> - break;
> -
> - case '"':
> - tokp->kind = TOK_STRCONST;
> - findstrconst (&where, &tokp->str);
> - break;
> - case '\'':
> - tokp->kind = TOK_CHARCONST;
> - findchrconst (&where, &tokp->str);
> - break;
> -
> - case '-':
> - case '0':
> - case '1':
> - case '2':
> - case '3':
> - case '4':
> - case '5':
> - case '6':
> - case '7':
> - case '8':
> - case '9':
> - tokp->kind = TOK_IDENT;
> - findconst (&where, &tokp->str);
> - break;
> -
> - default:
> - if (!(isalpha (*where) || *where == '_'))
> - {
> - char buf[100];
> - char *p;
> -
> - s_print (buf, _("illegal character in file: "));
> - p = buf + strlen (buf);
> - if (isprint (*where))
> - {
> - s_print (p, "%c", *where);
> - }
> - else
> - {
> - s_print (p, "%d", *where);
> - }
> - error (buf);
> - }
> - findkind (&where, tokp);
> - break;
> - }
> -}
> -
> -static void
> -unget_token (token * tokp)
> -{
> - lasttok = *tokp;
> - pushed = 1;
> -}
> -
> -static void
> -findstrconst (const char **str, const char **val)
> -{
> - const char *p;
> - char *tmp;
> - int size;
> -
> - p = *str;
> - do
> - {
> - p++;
> - }
> - while (*p && *p != '"');
> - if (*p == 0)
> - {
> - error (_("unterminated string constant"));
> - }
> - p++;
> - size = p - *str;
> - tmp = alloc (size + 1);
> - strncpy (tmp, *str, size);
> - tmp[size] = 0;
> - *val = tmp;
> - *str = p;
> -}
> -
> -static void
> -findchrconst (const char **str, const char **val)
> -{
> - const char *p;
> - char *tmp;
> - int size;
> -
> - p = *str;
> - do
> - {
> - p++;
> - }
> - while (*p && *p != '\'');
> - if (*p == 0)
> - {
> - error (_("unterminated string constant"));
> - }
> - p++;
> - size = p - *str;
> - if (size != 3)
> - {
> - error (_("empty char string"));
> - }
> - tmp = alloc (size + 1);
> - strncpy (tmp, *str, size);
> - tmp[size] = 0;
> - *val = tmp;
> - *str = p;
> -}
> -
> -static void
> -findconst (const char **str, const char **val)
> -{
> - const char *p;
> - char *tmp;
> - int size;
> -
> - p = *str;
> - if (*p == '0' && *(p + 1) == 'x')
> - {
> - p++;
> - do
> - {
> - p++;
> - }
> - while (isxdigit (*p));
> - }
> - else
> - {
> - do
> - {
> - p++;
> - }
> - while (isdigit (*p));
> - }
> - size = p - *str;
> - tmp = alloc (size + 1);
> - strncpy (tmp, *str, size);
> - tmp[size] = 0;
> - *val = tmp;
> - *str = p;
> -}
> -
> -static const token symbols[] =
> -{
> - {TOK_CONST, "const"},
> - {TOK_UNION, "union"},
> - {TOK_SWITCH, "switch"},
> - {TOK_CASE, "case"},
> - {TOK_DEFAULT, "default"},
> - {TOK_STRUCT, "struct"},
> - {TOK_TYPEDEF, "typedef"},
> - {TOK_ENUM, "enum"},
> - {TOK_OPAQUE, "opaque"},
> - {TOK_BOOL, "bool"},
> - {TOK_VOID, "void"},
> - {TOK_CHAR, "char"},
> - {TOK_INT, "int"},
> - {TOK_UNSIGNED, "unsigned"},
> - {TOK_SHORT, "short"},
> - {TOK_LONG, "long"},
> - {TOK_HYPER, "hyper"},
> - {TOK_FLOAT, "float"},
> - {TOK_DOUBLE, "double"},
> - {TOK_STRING, "string"},
> - {TOK_PROGRAM, "program"},
> - {TOK_VERSION, "version"},
> - {TOK_EOF, "??????"},
> -};
> -
> -static void
> -findkind (const char **mark, token *tokp)
> -{
> - int len;
> - const token *s;
> - const char *str;
> - char *tmp;
> -
> - str = *mark;
> - for (s = symbols; s->kind != TOK_EOF; s++)
> - {
> - len = strlen (s->str);
> - if (strncmp (str, s->str, len) == 0)
> - {
> - if (!isalnum (str[len]) && str[len] != '_')
> - {
> - tokp->kind = s->kind;
> - tokp->str = s->str;
> - *mark = str + len;
> - return;
> - }
> - }
> - }
> - tokp->kind = TOK_IDENT;
> - for (len = 0; isalnum (str[len]) || str[len] == '_'; len++);
> - tmp = alloc (len + 1);
> - strncpy (tmp, str, len);
> - tmp[len] = 0;
> - tokp->str = tmp;
> - *mark = str + len;
> -}
> -
> -static int
> -cppline (const char *line)
> -{
> - return line == curline && *line == '#';
> -}
> -
> -static int
> -directive (const char *line)
> -{
> - return line == curline && *line == '%';
> -}
> -
> -static void
> -printdirective (const char *line)
> -{
> - f_print (fout, "%s", line + 1);
> -}
> -
> -static void
> -docppline (const char *line, int *lineno, const char **fname)
> -{
> - char *file;
> - int num;
> - char *p;
> -
> - line++;
> - while (isspace (*line))
> - {
> - line++;
> - }
> - num = atoi (line);
> - while (isdigit (*line))
> - {
> - line++;
> - }
> - while (isspace (*line))
> - {
> - line++;
> - }
> - if (*line != '"')
> - {
> - error (_("preprocessor error"));
> - }
> - line++;
> - p = file = alloc (strlen (line) + 1);
> - while (*line && *line != '"')
> - {
> - *p++ = *line++;
> - }
> - if (*line == 0)
> - {
> - error (_("preprocessor error"));
> - }
> - *p = 0;
> - if (*file == 0)
> - {
> - free (file);
> - *fname = NULL;
> - }
> - else
> - {
> - *fname = file;
> - }
> - *lineno = num - 1;
> -}
> diff --git a/sunrpc/rpc_scan.h b/sunrpc/rpc_scan.h
> deleted file mode 100644
> index 9786a513b9..0000000000
> --- a/sunrpc/rpc_scan.h
> +++ /dev/null
> @@ -1,104 +0,0 @@
> -/* @(#)rpc_scan.h 1.3 90/08/29 */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - *
> - * rpc_scan.h, Definitions for the RPCL scanner
> - */
> -
> -/*
> - * kinds of tokens
> - */
> -enum tok_kind {
> - TOK_IDENT,
> - TOK_CHARCONST,
> - TOK_STRCONST,
> - TOK_LPAREN,
> - TOK_RPAREN,
> - TOK_LBRACE,
> - TOK_RBRACE,
> - TOK_LBRACKET,
> - TOK_RBRACKET,
> - TOK_LANGLE,
> - TOK_RANGLE,
> - TOK_STAR,
> - TOK_COMMA,
> - TOK_EQUAL,
> - TOK_COLON,
> - TOK_SEMICOLON,
> - TOK_CONST,
> - TOK_STRUCT,
> - TOK_UNION,
> - TOK_SWITCH,
> - TOK_CASE,
> - TOK_DEFAULT,
> - TOK_ENUM,
> - TOK_TYPEDEF,
> - TOK_INT,
> - TOK_SHORT,
> - TOK_LONG,
> - TOK_HYPER,
> - TOK_UNSIGNED,
> - TOK_FLOAT,
> - TOK_DOUBLE,
> - TOK_OPAQUE,
> - TOK_CHAR,
> - TOK_STRING,
> - TOK_BOOL,
> - TOK_VOID,
> - TOK_PROGRAM,
> - TOK_VERSION,
> - TOK_EOF
> -};
> -typedef enum tok_kind tok_kind;
> -
> -/*
> - * a token
> - */
> -struct token {
> - tok_kind kind;
> - const char *str;
> -};
> -typedef struct token token;
> -
> -
> -/*
> - * routine interface
> - */
> -void scan(tok_kind expect, token *tokp);
> -void scan2(tok_kind expect1, tok_kind expect2, token *tokp);
> -void scan3(tok_kind expect1, tok_kind expect2, tok_kind expect3, token *tokp);
> -void scan_num(token *tokp);
> -void peek(token *tokp);
> -int peekscan(tok_kind expect, token *tokp);
> -void get_token(token *tokp);
> -void expected1(tok_kind exp1) __attribute__ ((noreturn));
> -void expected2(tok_kind exp1, tok_kind exp2) __attribute__ ((noreturn));
> -void expected3(tok_kind exp1, tok_kind exp2, tok_kind exp3)
> - __attribute__ ((noreturn));
> diff --git a/sunrpc/rpc_svcout.c b/sunrpc/rpc_svcout.c
> deleted file mode 100644
> index 4f12a8146c..0000000000
> --- a/sunrpc/rpc_svcout.c
> +++ /dev/null
> @@ -1,1093 +0,0 @@
> -/*
> - * From: @(#)rpc_svcout.c 1.29 89/03/30
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_svcout.c, Server-skeleton outputter for the RPC protocol compiler
> - */
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -static const char RQSTP[] = "rqstp";
> -static const char TRANSP[] = "transp";
> -static const char ARG[] = "argument";
> -static const char RESULT[] = "result";
> -static const char ROUTINE[] = "local";
> -static char RETVAL[] = "retval";
> -
> -char _errbuf[256]; /* For all messages */
> -
> -static void internal_proctype (const proc_list * plist);
> -static void p_xdrfunc (const char *rname, const char *typename);
> -static void write_real_program (const definition * def);
> -static void write_program (const definition * def, const char *storage);
> -static void printerr (const char *err, const char *transp);
> -static void printif (const char *proc, const char *transp, const char *arg);
> -static void write_inetmost (const char *infile);
> -static void print_return (const char *space);
> -static void print_pmapunset (const char *space);
> -static void print_err_message (const char *space);
> -static void write_timeout_func (void);
> -static void write_pm_most (const char *infile, int netflag);
> -static void write_rpc_svc_fg (const char *infile, const char *sp);
> -static void open_log_file (const char *infile, const char *sp);
> -
> -static void
> -p_xdrfunc (const char *rname, const char *typename)
> -{
> - if (Cflag)
> - f_print (fout, "\t\t_xdr_%s = (xdrproc_t) xdr_%s;\n", rname,
> - stringfix (typename));
> - else
> - f_print (fout, "\t\t_xdr_%s = xdr_%s;\n", rname, stringfix (typename));
> -}
> -
> -void
> -internal_proctype (const proc_list * plist)
> -{
> - f_print (fout, "static ");
> - ptype (plist->res_prefix, plist->res_type, 1);
> - f_print (fout, "*");
> -}
> -
> -
> -/*
> - * write most of the service, that is, everything but the registrations.
> - */
> -void
> -write_most (const char *infile /* our name */ , int netflag, int nomain)
> -{
> - if (inetdflag || pmflag)
> - {
> - const char *var_type;
> - /* WHY? */
> - var_type = (nomain ? "extern" : "");
> - f_print (fout, "%s int _rpcpmstart;", var_type);
> - f_print (fout, "\t\t/* Started by a port monitor ? */\n");
> - if (!tirpcflag)
> - {
> - f_print (fout, "%s int _rpcfdtype;", var_type);
> - f_print (fout, "\t\t/* Whether Stream or Datagram ? */\n");
> - }
> - if (timerflag)
> - {
> -#if 0
> - f_print (fout, "%s int _rpcsvcdirty;", var_type);
> - f_print (fout, "\t/* Still serving ? */\n");
> -#else
> - f_print(fout, " /* States a server can be in wrt request */\n\n");
> - f_print(fout, "#define\t_IDLE 0\n");
> - f_print(fout, "#define\t_SERVED 1\n");
> - f_print(fout, "#define\t_SERVING 2\n\n");
> - f_print(fout, "static int _rpcsvcstate = _IDLE;");
> - f_print(fout, "\t /* Set when a request is serviced */\n");
> -
> - if (mtflag)
> - {
> - f_print (fout, "mutex_t _svcstate_lock;");
> - f_print (fout,
> - "\t\t\t/* Mutex lock for variable_rpcsvcstate */\n");
> - }
> -#endif
> - }
> - write_svc_aux (nomain);
> - }
> - /* write out dispatcher and stubs */
> - write_programs (nomain ? NULL : "static");
> -
> - if (nomain)
> - return;
> -
> - if (Cflag)
> - f_print (fout, "\nint\nmain (int argc, char **argv)\n");
> - else
> - {
> - f_print (fout, "\nint\nmain (argc, argv)\n");
> - f_print (fout, "\tint argc;\n");
> - f_print (fout, "\tchar **argv;\n");
> - }
> - f_print (fout, "{\n");
> - if (inetdflag)
> - {
> - write_inetmost (infile); /* Includes call to write_rpc_svc_fg() */
> - }
> - else
> - {
> - if (tirpcflag)
> - {
> - if (netflag)
> - {
> - f_print (fout, "\tregister SVCXPRT *%s;\n", TRANSP);
> - f_print (fout, "\tstruct netconfig *nconf = NULL;\n");
> - }
> - f_print (fout, "\tpid_t pid;\n");
> - f_print (fout, "\tint i;\n");
> - f_print (fout, "\tchar mname[FMNAMESZ + 1];\n\n");
> -
> - if (mtflag & timerflag)
> - f_print (fout,
> - "\tmutex_init (&_svcstate_lock, USYNC_THREAD, NULL);\n");
> -
> - write_pm_most (infile, netflag);
> - f_print (fout, "\telse {\n");
> - write_rpc_svc_fg (infile, "\t\t");
> - f_print (fout, "\t}\n");
> - }
> - else
> - {
> - f_print (fout, "\tregister SVCXPRT *%s;\n", TRANSP);
> - f_print (fout, "\n");
> - print_pmapunset ("\t");
> - }
> - }
> -
> - if (logflag && !inetdflag)
> - {
> - open_log_file (infile, "\t");
> - }
> -}
> -
> -/*
> - * write a registration for the given transport
> - */
> -void
> -write_netid_register (const char *transp)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> - const char *sp;
> - char tmpbuf[32];
> -
> - sp = "";
> - f_print (fout, "\n");
> - f_print (fout, "%s\tnconf = getnetconfigent (\"%s\");\n", sp, transp);
> - f_print (fout, "%s\tif (nconf == NULL) {\n", sp);
> - (void) sprintf (_errbuf, "cannot find %s netid.", transp);
> - sprintf (tmpbuf, "%s\t\t", sp);
> - print_err_message (tmpbuf);
> - f_print (fout, "%s\t\texit (1);\n", sp);
> - f_print (fout, "%s\t}\n", sp);
> - f_print (fout, "%s\t%s = svc_tli_create (RPC_ANYFD, nconf, 0, 0, 0);\n",
> - sp, TRANSP /*, transp *//* ?!?... */ );
> - f_print (fout, "%s\tif (%s == NULL) {\n", sp, TRANSP);
> - sprintf (_errbuf, "cannot create %s service.", transp);
> - print_err_message (tmpbuf);
> - f_print (fout, "%s\t\texit (1);\n", sp);
> - f_print (fout, "%s\t}\n", sp);
> -
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - continue;
> - }
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout, "%s\t(void) rpcb_unset (%s, %s, nconf);\n",
> - sp, def->def_name, vp->vers_name);
> - f_print (fout, "%s\tif (!svc_reg (%s, %s, %s, ",
> - sp, TRANSP, def->def_name, vp->vers_name);
> - pvname (def->def_name, vp->vers_num);
> - f_print (fout, ", nconf)) {\n");
> - (void) sprintf (_errbuf, "unable to register (%s, %s, %s).",
> - def->def_name, vp->vers_name, transp);
> - print_err_message (tmpbuf);
> - f_print (fout, "%s\t\texit (1);\n", sp);
> - f_print (fout, "%s\t}\n", sp);
> - }
> - }
> - f_print (fout, "%s\tfreenetconfigent (nconf);\n", sp);
> -}
> -
> -/*
> - * write a registration for the given transport for TLI
> - */
> -void
> -write_nettype_register (const char *transp)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> -
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - continue;
> - }
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout, "\tif (!svc_create (");
> - pvname (def->def_name, vp->vers_num);
> - f_print (fout, ", %s, %s, \"%s\")) {\n ",
> - def->def_name, vp->vers_name, transp);
> - (void) sprintf (_errbuf,
> - "unable to create (%s, %s) for %s.",
> - def->def_name, vp->vers_name, transp);
> - print_err_message ("\t\t");
> - f_print (fout, "\t\texit (1);\n");
> - f_print (fout, "\t}\n");
> - }
> - }
> -}
> -
> -/*
> - * write the rest of the service
> - */
> -void
> -write_rest (void)
> -{
> - f_print (fout, "\n");
> - if (inetdflag)
> - {
> - f_print (fout, "\tif (%s == (SVCXPRT *)NULL) {\n", TRANSP);
> - (void) sprintf (_errbuf, "could not create a handle");
> - print_err_message ("\t\t");
> - f_print (fout, "\t\texit (1);\n");
> - f_print (fout, "\t}\n");
> - if (timerflag)
> - {
> - f_print (fout, "\tif (_rpcpmstart) {\n");
> - f_print (fout,
> - "\t\t(void) signal (SIGALRM, %s closedown);\n",
> - Cflag ? "(SIG_PF)" : "(void(*)())");
> - f_print (fout, "\t\t(void) alarm (_RPCSVC_CLOSEDOWN);\n");
> - f_print (fout, "\t}\n");
> - }
> - }
> - f_print (fout, "\tsvc_run ();\n");
> - (void) sprintf (_errbuf, "svc_run returned");
> - print_err_message ("\t");
> - f_print (fout, "\texit (1);\n");
> - f_print (fout, "\t/* NOTREACHED */\n");
> - f_print (fout, "}\n");
> -}
> -
> -void
> -write_programs (const char *storage)
> -{
> - list *l;
> - definition *def;
> -
> - /* write out stubs for procedure definitions */
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - write_real_program (def);
> - }
> - }
> -
> - /* write out dispatcher for each program */
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - write_program (def, storage);
> - }
> - }
> -}
> -
> -/* write out definition of internal function (e.g. _printmsg_1(...))
> - which calls server's defintion of actual function (e.g. printmsg_1(...)).
> - Unpacks single user argument of printmsg_1 to call-by-value format
> - expected by printmsg_1. */
> -static void
> -write_real_program (const definition * def)
> -{
> - version_list *vp;
> - proc_list *proc;
> - decl_list *l;
> -
> - if (!newstyle)
> - return; /* not needed for old style */
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - fprintf (fout, "\n");
> - if (!mtflag)
> - internal_proctype (proc);
> - else
> - f_print (fout, "int");
> - f_print (fout, "\n_");
> - pvname (proc->proc_name, vp->vers_num);
> - if (Cflag)
> - {
> - f_print (fout, " (");
> - /* arg name */
> - if (proc->arg_num > 1)
> - f_print (fout, "%s", proc->args.argname);
> - else
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 0);
> - if (mtflag)
> - {
> - f_print(fout, " *argp, void *%s, struct svc_req *%s)\n",
> - RESULT, RQSTP);
> - }
> - else
> - f_print (fout, " *argp, struct svc_req *%s)\n",
> - RQSTP);
> - }
> - else
> - {
> - if (mtflag)
> - f_print(fout, " (argp, %s, %s)\n", RESULT, RQSTP);
> - else
> - f_print (fout, " (argp, %s)\n", RQSTP);
> - /* arg name */
> - if (proc->arg_num > 1)
> - f_print (fout, "\t%s *argp;\n", proc->args.argname);
> - else
> - {
> - f_print (fout, "\t");
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 0);
> - f_print (fout, " *argp;\n");
> - }
> - f_print (fout, " struct svc_req *%s;\n", RQSTP);
> - }
> -
> - f_print (fout, "{\n");
> - f_print (fout, "\treturn (");
> - if (Cflag || mtflag)
> - pvname_svc (proc->proc_name, vp->vers_num);
> - else
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "(");
> - if (proc->arg_num < 2)
> - { /* single argument */
> - if (!streq (proc->args.decls->decl.type, "void"))
> - f_print (fout, "*argp, "); /* non-void */
> - }
> - else
> - {
> - for (l = proc->args.decls; l != NULL; l = l->next)
> - f_print (fout, "argp->%s, ", l->decl.name);
> - }
> - if (mtflag)
> - f_print (fout, "%s, ", RESULT);
> - f_print (fout, "%s));\n}\n", RQSTP);
> - }
> - }
> -}
> -
> -static void
> -write_program (const definition * def, const char *storage)
> -{
> - version_list *vp;
> - proc_list *proc;
> - int filled;
> -
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout, "\n");
> - if (storage != NULL)
> - {
> - f_print (fout, "%s ", storage);
> - }
> - f_print (fout, "void\n");
> - pvname (def->def_name, vp->vers_num);
> -
> - if (Cflag)
> - {
> - f_print (fout, "(struct svc_req *%s, ", RQSTP);
> - f_print (fout, "register SVCXPRT *%s)\n", TRANSP);
> - }
> - else
> - {
> - f_print (fout, "(%s, %s)\n", RQSTP, TRANSP);
> - f_print (fout, " struct svc_req *%s;\n", RQSTP);
> - f_print (fout, " register SVCXPRT *%s;\n", TRANSP);
> - }
> -
> - f_print (fout, "{\n");
> -
> - filled = 0;
> - f_print (fout, "\tunion {\n");
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - if (proc->arg_num < 2)
> - { /* single argument */
> - if (streq (proc->args.decls->decl.type,
> - "void"))
> - {
> - continue;
> - }
> - filled = 1;
> - f_print (fout, "\t\t");
> - ptype (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type, 0);
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "_arg;\n");
> -
> - }
> - else
> - {
> - filled = 1;
> - f_print (fout, "\t\t%s", proc->args.argname);
> - f_print (fout, " ");
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, "_arg;\n");
> - }
> - }
> - if (!filled)
> - {
> - f_print (fout, "\t\tint fill;\n");
> - }
> - f_print (fout, "\t} %s;\n", ARG);
> - if (mtflag)
> - {
> - f_print(fout, "\tunion {\n");
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - if (!streq (proc->res_type, "void"))
> - {
> - f_print(fout, "\t\t");
> - ptype(proc->res_prefix, proc->res_type, 0);
> - pvname(proc->proc_name, vp->vers_num);
> - f_print(fout, "_res;\n");
> - }
> - f_print(fout, "\t} %s;\n", RESULT);
> - f_print(fout, "\tbool_t %s;\n", RETVAL);
> -
> - } else
> - f_print (fout, "\tchar *%s;\n", RESULT);
> -
> - if (Cflag)
> - {
> - f_print (fout, "\txdrproc_t _xdr_%s, _xdr_%s;\n", ARG, RESULT);
> - if (mtflag)
> - f_print(fout,
> - "\tbool_t (*%s)(char *, void *, struct svc_req *);\n",
> - ROUTINE);
> - else
> - f_print (fout, "\tchar *(*%s)(char *, struct svc_req *);\n",
> - ROUTINE);
> - }
> - else
> - {
> - f_print (fout, "\tbool_t (*_xdr_%s)(), (*_xdr_%s)();\n", ARG, RESULT);
> - if (mtflag)
> - f_print(fout, "\tbool_t (*%s)();\n", ROUTINE);
> - else
> - f_print (fout, "\tchar *(*%s)();\n", ROUTINE);
> - }
> - f_print (fout, "\n");
> -
> - if (timerflag)
> -#if 0
> - f_print (fout, "\t_rpcsvcdirty = 1;\n");
> -#else
> - {
> - if (mtflag)
> - f_print(fout, "\tmutex_lock(&_svcstate_lock);\n");
> - f_print(fout, "\t_rpcsvcstate = _SERVING;\n");
> - if (mtflag)
> - f_print(fout, "\tmutex_unlock(&_svcstate_lock);\n");
> - }
> -#endif
> -
> - f_print (fout, "\tswitch (%s->rq_proc) {\n", RQSTP);
> - if (!nullproc (vp->procs))
> - {
> - f_print (fout, "\tcase NULLPROC:\n");
> - f_print (fout,
> - "\t\t(void) svc_sendreply (%s, (xdrproc_t) xdr_void, (char *)NULL);\n",
> - TRANSP);
> - print_return ("\t\t");
> - f_print (fout, "\n");
> - }
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - f_print (fout, "\tcase %s:\n", proc->proc_name);
> - if (proc->arg_num < 2)
> - { /* single argument */
> - p_xdrfunc (ARG, proc->args.decls->decl.type);
> - }
> - else
> - {
> - p_xdrfunc (ARG, proc->args.argname);
> - }
> - p_xdrfunc (RESULT, proc->res_type);
> - if (Cflag)
> - {
> - if (mtflag)
> - f_print(fout,
> - "\t\t%s = (bool_t (*) (char *, void *, struct svc_req *))",
> - ROUTINE);
> - else
> - f_print (fout,
> - "\t\t%s = (char *(*)(char *, struct svc_req *)) ",
> - ROUTINE);
> - }
> - else
> - if (mtflag)
> - f_print(fout, "\t\t%s = (bool_t (*)()) ", ROUTINE);
> - else
> - f_print (fout, "\t\t%s = (char *(*)()) ", ROUTINE);
> -
> - if (newstyle)
> - { /* new style: calls internal routine */
> - f_print (fout, "_");
> - }
> - if ((Cflag || mtflag) && !newstyle)
> - pvname_svc (proc->proc_name, vp->vers_num);
> - else
> - pvname (proc->proc_name, vp->vers_num);
> - f_print (fout, ";\n");
> - f_print (fout, "\t\tbreak;\n\n");
> - }
> - f_print (fout, "\tdefault:\n");
> - printerr ("noproc", TRANSP);
> - print_return ("\t\t");
> - f_print (fout, "\t}\n");
> -
> - f_print (fout, "\tmemset ((char *)&%s, 0, sizeof (%s));\n", ARG, ARG);
> - printif ("getargs", TRANSP, ARG);
> - printerr ("decode", TRANSP);
> - print_return ("\t\t");
> - f_print (fout, "\t}\n");
> -
> - if (!mtflag)
> - {
> - if (Cflag)
> - f_print (fout, "\t%s = (*%s)((char *)&%s, %s);\n",
> - RESULT, ROUTINE, ARG, RQSTP);
> - else
> - f_print (fout, "\t%s = (*%s)(&%s, %s);\n",
> - RESULT, ROUTINE, ARG, RQSTP);
> - }
> - else
> - if (Cflag)
> - f_print(fout, "\t%s = (bool_t) (*%s)((char *)&%s, (void *)&%s, %s);\n",
> - RETVAL, ROUTINE, ARG, RESULT, RQSTP);
> - else
> - f_print(fout, "\t%s = (bool_t) (*%s)(&%s, &%s, %s);\n",
> - RETVAL, ROUTINE, ARG, RESULT, RQSTP);
> - if (mtflag)
> - f_print(fout,
> - "\tif (%s > 0 && !svc_sendreply(%s, (xdrproc_t) _xdr_%s, (char *)&%s)) {\n",
> - RETVAL, TRANSP, RESULT, RESULT);
> - else
> - f_print(fout,
> - "\tif (%s != NULL && !svc_sendreply(%s, (xdrproc_t) _xdr_%s, %s)) {\n",
> - RESULT, TRANSP, RESULT, RESULT);
> -
> - printerr ("systemerr", TRANSP);
> - f_print (fout, "\t}\n");
> -
> - printif ("freeargs", TRANSP, ARG);
> -
> - sprintf (_errbuf, "unable to free arguments");
> - print_err_message ("\t\t");
> - f_print (fout, "\t\texit (1);\n");
> - f_print (fout, "\t}\n");
> - /* print out free routine */
> - if (mtflag)
> - {
> - f_print(fout,"\tif (!");
> - pvname(def->def_name, vp->vers_num);
> - f_print(fout,"_freeresult (%s, _xdr_%s, (caddr_t) &%s))\n",
> - TRANSP, RESULT, RESULT);
> - (void) sprintf(_errbuf, "unable to free results");
> - print_err_message("\t\t");
> - f_print(fout, "\n");
> - }
> - print_return ("\t");
> - f_print (fout, "}\n");
> - }
> -}
> -
> -static void
> -printerr (const char *err, const char *transp)
> -{
> - f_print (fout, "\t\tsvcerr_%s (%s);\n", err, transp);
> -}
> -
> -static void
> -printif (const char *proc, const char *transp, const char *arg)
> -{
> - f_print (fout, "\tif (!svc_%s (%s, (xdrproc_t) _xdr_%s, (caddr_t) &%s)) {\n",
> - proc, transp, arg, arg);
> -}
> -
> -int
> -nullproc (const proc_list * proc)
> -{
> - for (; proc != NULL; proc = proc->next)
> - {
> - if (streq (proc->proc_num, "0"))
> - {
> - return 1;
> - }
> - }
> - return 0;
> -}
> -
> -static void
> -write_inetmost (const char *infile)
> -{
> - f_print (fout, "\tregister SVCXPRT *%s;\n", TRANSP);
> - f_print (fout, "\tint sock;\n");
> - f_print (fout, "\tint proto;\n");
> - f_print (fout, "\tstruct sockaddr_in saddr;\n");
> - f_print (fout, "\tint asize = sizeof (saddr);\n");
> - f_print (fout, "\n");
> - f_print (fout,
> - "\tif (getsockname (0, (struct sockaddr *)&saddr, &asize) == 0) {\n");
> - f_print (fout, "\t\tint ssize = sizeof (int);\n\n");
> - f_print (fout, "\t\tif (saddr.sin_family != AF_INET)\n");
> - f_print (fout, "\t\t\texit (1);\n");
> - f_print (fout, "\t\tif (getsockopt (0, SOL_SOCKET, SO_TYPE,\n");
> - f_print (fout, "\t\t\t\t(char *)&_rpcfdtype, &ssize) == -1)\n");
> - f_print (fout, "\t\t\texit (1);\n");
> - f_print (fout, "\t\tsock = 0;\n");
> - f_print (fout, "\t\t_rpcpmstart = 1;\n");
> - f_print (fout, "\t\tproto = 0;\n");
> - open_log_file (infile, "\t\t");
> - f_print (fout, "\t} else {\n");
> - write_rpc_svc_fg (infile, "\t\t");
> - f_print (fout, "\t\tsock = RPC_ANYSOCK;\n");
> - print_pmapunset ("\t\t");
> - f_print (fout, "\t}\n");
> -}
> -
> -static void
> -print_return (const char *space)
> -{
> - if (exitnow)
> - f_print (fout, "%sexit (0);\n", space);
> - else
> - {
> - if (timerflag)
> - {
> -#if 0
> - f_print (fout, "%s_rpcsvcdirty = 0;\n", space);
> -#else
> - if (mtflag)
> - f_print(fout, "%smutex_lock(&_svcstate_lock);\n", space);
> - f_print(fout, "%s_rpcsvcstate = _SERVED;\n", space);
> - if (mtflag)
> - f_print(fout, "%smutex_unlock(&_svcstate_lock);\n", space);
> -#endif
> - }
> - f_print (fout, "%sreturn;\n", space);
> - }
> -}
> -
> -static void
> -print_pmapunset (const char *space)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> -
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - for (vp = def->def.pr.versions; vp != NULL;
> - vp = vp->next)
> - {
> - f_print (fout, "%spmap_unset (%s, %s);\n",
> - space, def->def_name, vp->vers_name);
> - }
> - }
> - }
> -}
> -
> -static void
> -print_err_message (const char *space)
> -{
> - if (logflag)
> - f_print (fout, "%ssyslog (LOG_ERR, \"%%s\", \"%s\");\n", space, _errbuf);
> - else if (inetdflag || pmflag)
> - f_print (fout, "%s_msgout (\"%s\");\n", space, _errbuf);
> - else
> - f_print (fout, "%sfprintf (stderr, \"%%s\", \"%s\");\n", space, _errbuf);
> -}
> -
> -/*
> - * Write the server auxiliary function ( _msgout, timeout)
> - */
> -void
> -write_svc_aux (int nomain)
> -{
> - if (!logflag)
> - write_msg_out ();
> - if (!nomain)
> - write_timeout_func ();
> -}
> -
> -/*
> - * Write the _msgout function
> - */
> -
> -void
> -write_msg_out (void)
> -{
> - f_print (fout, "\n");
> - f_print (fout, "static\n");
> - if (!Cflag)
> - {
> - f_print (fout, "void _msgout (msg)\n");
> - f_print (fout, "\tchar *msg;\n");
> - }
> - else
> - {
> - f_print (fout, "void _msgout (char* msg)\n");
> - }
> - f_print (fout, "{\n");
> - f_print (fout, "#ifdef RPC_SVC_FG\n");
> - if (inetdflag || pmflag)
> - f_print (fout, "\tif (_rpcpmstart)\n");
> - f_print (fout, "\t\tsyslog (LOG_ERR, \"%%s\", msg);\n");
> - f_print (fout, "\telse\n");
> - f_print (fout, "\t\tfprintf (stderr, \"%%s\\n\", msg);\n");
> - f_print (fout, "#else\n");
> - f_print (fout, "\tsyslog (LOG_ERR, \"%%s\", msg);\n");
> - f_print (fout, "#endif\n");
> - f_print (fout, "}\n");
> -}
> -
> -/*
> - * Write the timeout function
> - */
> -static void
> -write_timeout_func (void)
> -{
> - if (!timerflag)
> - return;
> - f_print (fout, "\n");
> - f_print (fout, "static void\n");
> - if (Cflag)
> - f_print (fout, "closedown (int sig)\n");
> - else
> - f_print (fout, "closedown (sig)\n\tint sig;\n");
> - f_print (fout, "{\n");
> -
> -#if 0
> - f_print (fout, "\t(void) signal (sig, %s closedown);\n",
> - Cflag ? "(SIG_PF)" : "(void(*)())");
> -#endif
> - if (mtflag)
> - f_print(fout, "\tmutex_lock(&_svcstate_lock);\n");
> -#if 0
> - f_print (fout, "\tif (_rpcsvcdirty == 0) {\n");
> -#else
> - f_print(fout, "\tif (_rpcsvcstate == _IDLE) {\n");
> -#endif
> - f_print (fout, "\t\textern fd_set svc_fdset;\n");
> - f_print (fout, "\t\tstatic int size;\n");
> - f_print (fout, "\t\tint i, openfd;\n");
> - if (tirpcflag && pmflag)
> - {
> - f_print (fout, "\t\tstruct t_info tinfo;\n\n");
> - f_print (fout, "\t\tif (!t_getinfo(0, &tinfo) && (tinfo.servtype == T_CLTS))\n");
> - }
> - else
> - {
> - f_print (fout, "\n\t\tif (_rpcfdtype == SOCK_DGRAM)\n");
> - }
> - f_print (fout, "\t\t\texit (0);\n");
> - f_print (fout, "\t\tif (size == 0) {\n");
> - if (tirpcflag)
> - {
> - f_print (fout, "\t\t\tstruct rlimit rl;\n\n");
> - f_print (fout, "\t\t\trl.rlim_max = 0;\n");
> - f_print (fout, "\t\t\tgetrlimit(RLIMIT_NOFILE, &rl);\n");
> - f_print (fout, "\t\t\tif ((size = rl.rlim_max) == 0) {\n");
> - if (mtflag)
> - f_print(fout, "\t\t\t\tmutex_unlock(&_svcstate_lock);\n");
> - f_print (fout, "\t\t\t\treturn;\n\t\t\t}\n");
> - }
> - else
> - {
> - f_print (fout, "\t\t\tsize = getdtablesize();\n");
> - }
> - f_print (fout, "\t\t}\n");
> - f_print (fout, "\t\tfor (i = 0, openfd = 0; i < size && openfd < 2; i++)\n");
> - f_print (fout, "\t\t\tif (FD_ISSET(i, &svc_fdset))\n");
> - f_print (fout, "\t\t\t\topenfd++;\n");
> - f_print (fout, "\t\tif (openfd <= 1)\n");
> - f_print (fout, "\t\t\texit (0);\n");
> - f_print (fout, "\t}\n");
> - f_print(fout, "\tif (_rpcsvcstate == _SERVED)\n");
> - f_print(fout, "\t\t_rpcsvcstate = _IDLE;\n\n");
> - if (mtflag)
> - f_print(fout, "\tmutex_unlock(&_svcstate_lock);\n");
> - f_print(fout, "\t(void) signal(SIGALRM, %s closedown);\n",
> - Cflag? "(SIG_PF)" : "(void(*)())");
> - f_print (fout, "\talarm (_RPCSVC_CLOSEDOWN);\n");
> - f_print (fout, "}\n");
> -}
> -
> -/*
> - * Write the most of port monitor support
> - */
> -static void
> -write_pm_most (const char *infile, int netflag)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> -
> - f_print (fout, "\tif (!ioctl(0, I_LOOK, mname) &&\n");
> - f_print (fout, "\t\t(!strcmp(mname, \"sockmod\") ||");
> - f_print (fout, " !strcmp(mname, \"timod\"))) {\n");
> - f_print (fout, "\t\tchar *netid;\n");
> - if (!netflag)
> - { /* Not included by -n option */
> - f_print (fout, "\t\tstruct netconfig *nconf = NULL;\n");
> - f_print (fout, "\t\tSVCXPRT *%s;\n", TRANSP);
> - }
> - if (timerflag)
> - f_print (fout, "\t\tint pmclose;\n");
> -/* not necessary, defined in /usr/include/stdlib */
> -/* f_print(fout, "\t\textern char *getenv();\n"); */
> - f_print (fout, "\n");
> - f_print (fout, "\t\t_rpcpmstart = 1;\n");
> - if (logflag)
> - open_log_file (infile, "\t\t");
> - f_print (fout, "\t\tif ((netid = getenv(\"NLSPROVIDER\")) == NULL) {\n");
> - sprintf (_errbuf, "cannot get transport name");
> - print_err_message ("\t\t\t");
> - f_print (fout, "\t\t} else if ((nconf = getnetconfigent(netid)) == NULL) {\n");
> - sprintf (_errbuf, "cannot get transport info");
> - print_err_message ("\t\t\t");
> - f_print (fout, "\t\t}\n");
> - /*
> - * A kludgy support for inetd services. Inetd only works with
> - * sockmod, and RPC works only with timod, hence all this jugglery
> - */
> - f_print (fout, "\t\tif (strcmp(mname, \"sockmod\") == 0) {\n");
> - f_print (fout, "\t\t\tif (ioctl(0, I_POP, 0) || ioctl(0, I_PUSH, \"timod\")) {\n");
> - sprintf (_errbuf, "could not get the right module");
> - print_err_message ("\t\t\t\t");
> - f_print (fout, "\t\t\t\texit(1);\n");
> - f_print (fout, "\t\t\t}\n");
> - f_print (fout, "\t\t}\n");
> - if (timerflag)
> - f_print (fout, "\t\tpmclose = (t_getstate(0) != T_DATAXFER);\n");
> - f_print (fout, "\t\tif ((%s = svc_tli_create(0, nconf, NULL, 0, 0)) == NULL) {\n",
> - TRANSP);
> - sprintf (_errbuf, "cannot create server handle");
> - print_err_message ("\t\t\t");
> - f_print (fout, "\t\t\texit(1);\n");
> - f_print (fout, "\t\t}\n");
> - f_print (fout, "\t\tif (nconf)\n");
> - f_print (fout, "\t\t\tfreenetconfigent(nconf);\n");
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - continue;
> - }
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout,
> - "\t\tif (!svc_reg(%s, %s, %s, ",
> - TRANSP, def->def_name, vp->vers_name);
> - pvname (def->def_name, vp->vers_num);
> - f_print (fout, ", 0)) {\n");
> - (void) sprintf (_errbuf, "unable to register (%s, %s).",
> - def->def_name, vp->vers_name);
> - print_err_message ("\t\t\t");
> - f_print (fout, "\t\t\texit(1);\n");
> - f_print (fout, "\t\t}\n");
> - }
> - }
> - if (timerflag)
> - {
> - f_print (fout, "\t\tif (pmclose) {\n");
> - f_print (fout, "\t\t\t(void) signal(SIGALRM, %s closedown);\n",
> - Cflag ? "(SIG_PF)" : "(void(*)())");
> - f_print (fout, "\t\t\t(void) alarm(_RPCSVC_CLOSEDOWN);\n");
> - f_print (fout, "\t\t}\n");
> - }
> - f_print (fout, "\t\tsvc_run();\n");
> - f_print (fout, "\t\texit(1);\n");
> - f_print (fout, "\t\t/* NOTREACHED */\n");
> - f_print (fout, "\t}\n");
> -}
> -
> -/*
> - * Support for backgrounding the server if self started.
> - */
> -static void
> -write_rpc_svc_fg (const char *infile, const char *sp)
> -{
> - f_print (fout, "#ifndef RPC_SVC_FG\n");
> - f_print (fout, "%sint size;\n", sp);
> - if (tirpcflag)
> - f_print (fout, "%sstruct rlimit rl;\n", sp);
> - if (inetdflag)
> - f_print (fout, "%sint pid, i;\n\n", sp);
> - f_print (fout, "%spid = fork();\n", sp);
> - f_print (fout, "%sif (pid < 0) {\n", sp);
> - f_print (fout, "%s\tperror(\"cannot fork\");\n", sp);
> - f_print (fout, "%s\texit(1);\n", sp);
> - f_print (fout, "%s}\n", sp);
> - f_print (fout, "%sif (pid)\n", sp);
> - f_print (fout, "%s\texit(0);\n", sp);
> - /* get number of file descriptors */
> - if (tirpcflag)
> - {
> - f_print (fout, "%srl.rlim_max = 0;\n", sp);
> - f_print (fout, "%sgetrlimit(RLIMIT_NOFILE, &rl);\n", sp);
> - f_print (fout, "%sif ((size = rl.rlim_max) == 0)\n", sp);
> - f_print (fout, "%s\texit(1);\n", sp);
> - }
> - else
> - {
> - f_print (fout, "%ssize = getdtablesize();\n", sp);
> - }
> -
> - f_print (fout, "%sfor (i = 0; i < size; i++)\n", sp);
> - f_print (fout, "%s\t(void) close(i);\n", sp);
> - /* Redirect stderr and stdout to console */
> - f_print (fout, "%si = open(\"/dev/console\", 2);\n", sp);
> - f_print (fout, "%s(void) dup2(i, 1);\n", sp);
> - f_print (fout, "%s(void) dup2(i, 2);\n", sp);
> - /* This removes control of the controlling terminal */
> - if (tirpcflag)
> - f_print (fout, "%ssetsid();\n", sp);
> - else
> - {
> - f_print (fout, "%si = open(\"/dev/tty\", 2);\n", sp);
> - f_print (fout, "%sif (i >= 0) {\n", sp);
> - f_print (fout, "%s\t(void) ioctl(i, TIOCNOTTY, (char *)NULL);\n", sp);;
> - f_print (fout, "%s\t(void) close(i);\n", sp);
> - f_print (fout, "%s}\n", sp);
> - }
> - if (!logflag)
> - open_log_file (infile, sp);
> - f_print (fout, "#endif\n");
> - if (logflag)
> - open_log_file (infile, sp);
> -}
> -
> -static void
> -open_log_file (const char *infile, const char *sp)
> -{
> - char *s;
> -
> - s = strrchr (infile, '.');
> - if (s)
> - *s = '\0';
> - f_print (fout, "%sopenlog(\"%s\", LOG_PID, LOG_DAEMON);\n", sp, infile);
> - if (s)
> - *s = '.';
> -}
> -
> -/*
> - * write a registration for the given transport for Inetd
> - */
> -void
> -write_inetd_register (const char *transp)
> -{
> - list *l;
> - definition *def;
> - version_list *vp;
> - const char *sp;
> - int isudp;
> - char tmpbuf[32];
> -
> - if (inetdflag)
> - sp = "\t";
> - else
> - sp = "";
> - if (streq (transp, "udp") || streq (transp, "udp6"))
> - isudp = 1;
> - else
> - isudp = 0;
> - f_print (fout, "\n");
> - if (inetdflag)
> - {
> - f_print (fout, "\tif ((_rpcfdtype == 0) || (_rpcfdtype == %s)) {\n",
> - isudp ? "SOCK_DGRAM" : "SOCK_STREAM");
> - }
> - f_print (fout, "%s\t%s = svc%s_create(%s",
> - sp, TRANSP, transp, inetdflag ? "sock" : "RPC_ANYSOCK");
> - if (!isudp)
> - f_print (fout, ", 0, 0");
> - f_print (fout, ");\n");
> - f_print (fout, "%s\tif (%s == NULL) {\n", sp, TRANSP);
> - (void) sprintf (_errbuf, "cannot create %s service.", transp);
> - (void) sprintf (tmpbuf, "%s\t\t", sp);
> - print_err_message (tmpbuf);
> - f_print (fout, "%s\t\texit(1);\n", sp);
> - f_print (fout, "%s\t}\n", sp);
> -
> - if (inetdflag)
> - {
> - f_print (fout, "%s\tif (!_rpcpmstart)\n\t", sp);
> - f_print (fout, "%s\tproto = IPPROTO_%s;\n",
> - sp, isudp ? "UDP" : "TCP");
> - }
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind != DEF_PROGRAM)
> - {
> - continue;
> - }
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - f_print (fout, "%s\tif (!svc_register(%s, %s, %s, ",
> - sp, TRANSP, def->def_name, vp->vers_name);
> - pvname (def->def_name, vp->vers_num);
> - if (inetdflag)
> - f_print (fout, ", proto)) {\n");
> - else
> - f_print (fout, ", IPPROTO_%s)) {\n",
> - isudp ? "UDP" : "TCP");
> - (void) sprintf (_errbuf, "unable to register (%s, %s, %s).",
> - def->def_name, vp->vers_name, transp);
> - print_err_message (tmpbuf);
> - f_print (fout, "%s\t\texit(1);\n", sp);
> - f_print (fout, "%s\t}\n", sp);
> - }
> - }
> - if (inetdflag)
> - f_print (fout, "\t}\n");
> -}
> diff --git a/sunrpc/rpc_tblout.c b/sunrpc/rpc_tblout.c
> deleted file mode 100644
> index a7d2f43528..0000000000
> --- a/sunrpc/rpc_tblout.c
> +++ /dev/null
> @@ -1,178 +0,0 @@
> -/*
> - * From: @(#)rpc_tblout.c 1.4 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_tblout.c, Dispatch table outputter for the RPC protocol compiler
> - */
> -#include <stdio.h>
> -#include <string.h>
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -#define TABSIZE 8
> -#define TABCOUNT 5
> -#define TABSTOP (TABSIZE*TABCOUNT)
> -
> -static const char tabstr[TABCOUNT + 1] = "\t\t\t\t\t";
> -
> -static const char tbl_hdr[] = "struct rpcgen_table %s_table[] = {\n";
> -static const char tbl_end[] = "};\n";
> -
> -static const char null_entry[] = "\n\t(char *(*)())0,\n\
> - \t(xdrproc_t) xdr_void,\t\t\t0,\n\
> - \t(xdrproc_t) xdr_void,\t\t\t0,\n";
> -
> -
> -static const char tbl_nproc[] = "int %s_nproc =\n\tsizeof(%s_table)/sizeof(%s_table[0]);\n\n";
> -
> -static void write_table (const definition * def);
> -static void printit (const char *prefix, const char *type);
> -
> -void
> -write_tables (void)
> -{
> - list *l;
> - definition *def;
> -
> - f_print (fout, "\n");
> - for (l = defined; l != NULL; l = l->next)
> - {
> - def = (definition *) l->val;
> - if (def->def_kind == DEF_PROGRAM)
> - {
> - write_table (def);
> - }
> - }
> -}
> -
> -static void
> -write_table (const definition * def)
> -{
> - version_list *vp;
> - proc_list *proc;
> - int current;
> - int expected;
> - char progvers[100];
> - int warning;
> -
> - for (vp = def->def.pr.versions; vp != NULL; vp = vp->next)
> - {
> - warning = 0;
> - s_print (progvers, "%s_%s",
> - locase (def->def_name), vp->vers_num);
> - /* print the table header */
> - f_print (fout, tbl_hdr, progvers);
> -
> - if (nullproc (vp->procs))
> - {
> - expected = 0;
> - }
> - else
> - {
> - expected = 1;
> - f_print (fout, null_entry);
> - }
> - for (proc = vp->procs; proc != NULL; proc = proc->next)
> - {
> - current = atoi (proc->proc_num);
> - if (current != expected++)
> - {
> - f_print (fout,
> - "\n/*\n * WARNING: table out of order\n */\n");
> - if (warning == 0)
> - {
> - f_print (stderr,
> - "WARNING %s table is out of order\n",
> - progvers);
> - warning = 1;
> - nonfatalerrors = 1;
> - }
> - expected = current + 1;
> - }
> - f_print (fout, "\n\t(char *(*)())RPCGEN_ACTION(");
> -
> - /* routine to invoke */
> - if (Cflag && !newstyle)
> - pvname_svc (proc->proc_name, vp->vers_num);
> - else
> - {
> - if (newstyle)
> - f_print (fout, "_"); /* calls internal func */
> - pvname (proc->proc_name, vp->vers_num);
> - }
> - f_print (fout, "),\n");
> -
> - /* argument info */
> - if (proc->arg_num > 1)
> - printit ((char *) NULL, proc->args.argname);
> - else
> - /* do we have to do something special for newstyle */
> - printit (proc->args.decls->decl.prefix,
> - proc->args.decls->decl.type);
> - /* result info */
> - printit (proc->res_prefix, proc->res_type);
> - }
> -
> - /* print the table trailer */
> - f_print (fout, tbl_end);
> - f_print (fout, tbl_nproc, progvers, progvers, progvers);
> - }
> -}
> -
> -static void
> -printit (const char *prefix, const char *type)
> -{
> - int len;
> - int tabs;
> -
> -
> - len = fprintf (fout, "\txdr_%s,", stringfix (type));
> - /* account for leading tab expansion */
> - len += TABSIZE - 1;
> - /* round up to tabs required */
> - tabs = (TABSTOP - len + TABSIZE - 1) / TABSIZE;
> - f_print (fout, "%s", &tabstr[TABCOUNT - tabs]);
> -
> - if (streq (type, "void"))
> - {
> - f_print (fout, "0");
> - }
> - else
> - {
> - f_print (fout, "sizeof ( ");
> - /* XXX: should "follow" be 1 ??? */
> - ptype (prefix, type, 0);
> - f_print (fout, ")");
> - }
> - f_print (fout, ",\n");
> -}
> diff --git a/sunrpc/rpc_util.c b/sunrpc/rpc_util.c
> deleted file mode 100644
> index 52aa69757b..0000000000
> --- a/sunrpc/rpc_util.c
> +++ /dev/null
> @@ -1,525 +0,0 @@
> -/*
> - * From: @(#)rpc_util.c 1.11 89/02/22
> - *
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * rpc_util.c, Utility routines for the RPC protocol compiler
> - */
> -#include <stdio.h>
> -#include <ctype.h>
> -#include <string.h>
> -#include <unistd.h>
> -#include "rpc_scan.h"
> -#include "rpc_parse.h"
> -#include "rpc_util.h"
> -#include "proto.h"
> -
> -#define ARGEXT "argument"
> -
> -char curline[MAXLINESIZE]; /* current read line */
> -const char *where = curline; /* current point in line */
> -int linenum = 0; /* current line number */
> -
> -const char *infilename; /* input filename */
> -
> -#define NFILES 7
> -const char *outfiles[NFILES]; /* output file names */
> -int nfiles;
> -
> -FILE *fout; /* file pointer of current output */
> -FILE *fin; /* file pointer of current input */
> -
> -list *defined; /* list of defined things */
> -
> -static int findit (const definition * def, const char *type);
> -static const char *fixit (const char *type, const char *orig);
> -static int typedefed (const definition * def, const char *type);
> -static const char *toktostr (tok_kind kind);
> -static void printbuf (void);
> -static void printwhere (void);
> -
> -/*
> - * Reinitialize the world
> - */
> -void
> -reinitialize (void)
> -{
> - memset (curline, 0, MAXLINESIZE);
> - where = curline;
> - linenum = 0;
> - defined = NULL;
> -}
> -
> -/*
> - * string equality
> - */
> -int
> -streq (const char *a, const char *b)
> -{
> - return strcmp (a, b) == 0;
> -}
> -
> -/*
> - * find a value in a list
> - */
> -definition *
> -findval (list *lst, const char *val,
> - int (*cmp) (const definition *, const char *))
> -{
> -
> - for (; lst != NULL; lst = lst->next)
> - {
> - if (cmp (lst->val, val))
> - {
> - return lst->val;
> - }
> - }
> - return NULL;
> -}
> -
> -/*
> - * store a value in a list
> - */
> -void
> -storeval (list **lstp, definition *val)
> -{
> - list **l;
> - list *lst;
> -
> -
> - for (l = lstp; *l != NULL; l = (list **) & (*l)->next);
> - lst = ALLOC (list);
> - lst->val = val;
> - lst->next = NULL;
> - *l = lst;
> -}
> -
> -static int
> -findit (const definition * def, const char *type)
> -{
> - return streq (def->def_name, type);
> -}
> -
> -static const char *
> -fixit (const char *type, const char *orig)
> -{
> - definition *def;
> -
> - def = findval (defined, type, findit);
> - if (def == NULL || def->def_kind != DEF_TYPEDEF)
> - {
> - return orig;
> - }
> - switch (def->def.ty.rel)
> - {
> - case REL_VECTOR:
> - if (streq (def->def.ty.old_type, "opaque"))
> - return ("char");
> - else
> - return (def->def.ty.old_type);
> - case REL_ALIAS:
> - return (fixit (def->def.ty.old_type, orig));
> - default:
> - return orig;
> - }
> -}
> -
> -const char *
> -fixtype (const char *type)
> -{
> - return fixit (type, type);
> -}
> -
> -const char *
> -stringfix (const char *type)
> -{
> - if (streq (type, "string"))
> - {
> - return "wrapstring";
> - }
> - else
> - {
> - return type;
> - }
> -}
> -
> -void
> -ptype (const char *prefix, const char *type, int follow)
> -{
> - if (prefix != NULL)
> - {
> - if (streq (prefix, "enum"))
> - {
> - f_print (fout, "enum ");
> - }
> - else
> - {
> - f_print (fout, "struct ");
> - }
> - }
> - if (streq (type, "bool"))
> - {
> - f_print (fout, "bool_t ");
> - }
> - else if (streq (type, "string"))
> - {
> - f_print (fout, "char *");
> - }
> - else
> - {
> - f_print (fout, "%s ", follow ? fixtype (type) : type);
> - }
> -}
> -
> -static int
> -typedefed (const definition * def, const char *type)
> -{
> - if (def->def_kind != DEF_TYPEDEF || def->def.ty.old_prefix != NULL)
> - {
> - return 0;
> - }
> - else
> - {
> - return streq (def->def_name, type);
> - }
> -}
> -
> -int
> -isvectordef (const char *type, relation rel)
> -{
> - definition *def;
> -
> - for (;;)
> - {
> - switch (rel)
> - {
> - case REL_VECTOR:
> - return !streq (type, "string");
> - case REL_ARRAY:
> - return 0;
> - case REL_POINTER:
> - return 0;
> - case REL_ALIAS:
> - def = findval (defined, type, typedefed);
> - if (def == NULL)
> - {
> - return 0;
> - }
> - type = def->def.ty.old_type;
> - rel = def->def.ty.rel;
> - }
> - }
> -}
> -
> -char *
> -locase (const char *str)
> -{
> - char c;
> - static char buf[100];
> - char *p = buf;
> -
> - while ((c = *str++) != 0)
> - {
> - *p++ = (c >= 'A' && c <= 'Z') ? (c - 'A' + 'a') : c;
> - }
> - *p = 0;
> - return buf;
> -}
> -
> -void
> -pvname_svc (const char *pname, const char *vnum)
> -{
> - f_print (fout, "%s_%s_svc", locase (pname), vnum);
> -}
> -
> -void
> -pvname (const char *pname, const char *vnum)
> -{
> - f_print (fout, "%s_%s", locase (pname), vnum);
> -}
> -
> -/*
> - * print a useful (?) error message, and then die
> - */
> -void
> -error (const char *msg)
> -{
> - printwhere ();
> - f_print (stderr, "%s, line %d: ", infilename, linenum);
> - f_print (stderr, "%s\n", msg);
> - crash ();
> -}
> -
> -/*
> - * Something went wrong, unlink any files that we may have created and then
> - * die.
> - */
> -void
> -crash (void)
> -{
> - int i;
> -
> - for (i = 0; i < nfiles; i++)
> - {
> - unlink (outfiles[i]);
> - }
> - exit (1);
> -}
> -
> -void
> -record_open (const char *file)
> -{
> - if (nfiles < NFILES)
> - {
> - outfiles[nfiles++] = file;
> - }
> - else
> - {
> - f_print (stderr, "too many files!\n");
> - crash ();
> - }
> -}
> -
> -static char expectbuf[100];
> -
> -/*
> - * error, token encountered was not the expected one
> - */
> -void
> -expected1 (tok_kind exp1)
> -{
> - s_print (expectbuf, "expected '%s'",
> - toktostr (exp1));
> - error (expectbuf);
> -}
> -
> -/*
> - * error, token encountered was not one of two expected ones
> - */
> -void
> -expected2 (tok_kind exp1, tok_kind exp2)
> -{
> - s_print (expectbuf, "expected '%s' or '%s'",
> - toktostr (exp1),
> - toktostr (exp2));
> - error (expectbuf);
> -}
> -
> -/*
> - * error, token encountered was not one of 3 expected ones
> - */
> -void
> -expected3 (tok_kind exp1, tok_kind exp2, tok_kind exp3)
> -{
> - s_print (expectbuf, "expected '%s', '%s' or '%s'",
> - toktostr (exp1),
> - toktostr (exp2),
> - toktostr (exp3));
> - error (expectbuf);
> -}
> -
> -void
> -tabify (FILE * f, int tab)
> -{
> - while (tab--)
> - {
> - (void) fputc ('\t', f);
> - }
> -}
> -
> -
> -static const token tokstrings[] =
> -{
> - {TOK_IDENT, "identifier"},
> - {TOK_CONST, "const"},
> - {TOK_RPAREN, ")"},
> - {TOK_LPAREN, "("},
> - {TOK_RBRACE, "}"},
> - {TOK_LBRACE, "{"},
> - {TOK_LBRACKET, "["},
> - {TOK_RBRACKET, "]"},
> - {TOK_STAR, "*"},
> - {TOK_COMMA, ","},
> - {TOK_EQUAL, "="},
> - {TOK_COLON, ":"},
> - {TOK_SEMICOLON, ";"},
> - {TOK_UNION, "union"},
> - {TOK_STRUCT, "struct"},
> - {TOK_SWITCH, "switch"},
> - {TOK_CASE, "case"},
> - {TOK_DEFAULT, "default"},
> - {TOK_ENUM, "enum"},
> - {TOK_TYPEDEF, "typedef"},
> - {TOK_INT, "int"},
> - {TOK_SHORT, "short"},
> - {TOK_LONG, "long"},
> - {TOK_UNSIGNED, "unsigned"},
> - {TOK_DOUBLE, "double"},
> - {TOK_FLOAT, "float"},
> - {TOK_CHAR, "char"},
> - {TOK_STRING, "string"},
> - {TOK_OPAQUE, "opaque"},
> - {TOK_BOOL, "bool"},
> - {TOK_VOID, "void"},
> - {TOK_PROGRAM, "program"},
> - {TOK_VERSION, "version"},
> - {TOK_EOF, "??????"}
> -};
> -
> -static const char *
> -toktostr (tok_kind kind)
> -{
> - const token *sp;
> -
> - for (sp = tokstrings; sp->kind != TOK_EOF && sp->kind != kind; sp++);
> - return sp->str;
> -}
> -
> -static void
> -printbuf (void)
> -{
> - char c;
> - int i;
> - int cnt;
> -
> -#define TABSIZE 4
> -
> - for (i = 0; (c = curline[i]) != 0; i++)
> - {
> - if (c == '\t')
> - {
> - cnt = 8 - (i % TABSIZE);
> - c = ' ';
> - }
> - else
> - {
> - cnt = 1;
> - }
> - while (cnt--)
> - {
> - (void) fputc (c, stderr);
> - }
> - }
> -}
> -
> -static void
> -printwhere (void)
> -{
> - int i;
> - char c;
> - int cnt;
> -
> - printbuf ();
> - for (i = 0; i < where - curline; i++)
> - {
> - c = curline[i];
> - if (c == '\t')
> - {
> - cnt = 8 - (i % TABSIZE);
> - }
> - else
> - {
> - cnt = 1;
> - }
> - while (cnt--)
> - {
> - (void) fputc ('^', stderr);
> - }
> - }
> - (void) fputc ('\n', stderr);
> -}
> -
> -char *
> -make_argname (const char *pname, const char *vname)
> -{
> - char *name;
> -
> - name = malloc (strlen (pname) + strlen (vname) + strlen (ARGEXT) + 3);
> - if (!name)
> - {
> - fprintf (stderr, "failed in malloc");
> - exit (1);
> - }
> - sprintf (name, "%s_%s_%s", locase (pname), vname, ARGEXT);
> - return name;
> -}
> -
> -bas_type *typ_list_h;
> -bas_type *typ_list_t;
> -
> -void
> -add_type (int len, const char *type)
> -{
> - bas_type *ptr;
> -
> -
> - if ((ptr = malloc (sizeof (bas_type))) == NULL)
> - {
> - fprintf (stderr, "failed in malloc");
> - exit (1);
> - }
> -
> - ptr->name = type;
> - ptr->length = len;
> - ptr->next = NULL;
> - if (typ_list_t == NULL)
> - {
> -
> - typ_list_t = ptr;
> - typ_list_h = ptr;
> - }
> - else
> - {
> -
> - typ_list_t->next = ptr;
> - typ_list_t = ptr;
> - }
> -
> -}
> -
> -
> -bas_type *
> -find_type (const char *type)
> -{
> - bas_type *ptr;
> -
> - ptr = typ_list_h;
> -
> -
> - while (ptr != NULL)
> - {
> - if (strcmp (ptr->name, type) == 0)
> - return ptr;
> - else
> - ptr = ptr->next;
> - };
> - return NULL;
> -}
> diff --git a/sunrpc/rpc_util.h b/sunrpc/rpc_util.h
> deleted file mode 100644
> index 53316d9516..0000000000
> --- a/sunrpc/rpc_util.h
> +++ /dev/null
> @@ -1,154 +0,0 @@
> -/* @(#)rpc_util.h 1.5 90/08/29 */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - *
> - * rpc_util.h, Useful definitions for the RPC protocol compiler
> - */
> -
> -#include <stdlib.h>
> -
> -#define alloc(size) malloc((unsigned)(size))
> -#define ALLOC(object) (object *) malloc(sizeof(object))
> -
> -#define s_print (void) sprintf
> -#define f_print (void) fprintf
> -
> -struct list {
> - definition *val;
> - struct list *next;
> -};
> -typedef struct list list;
> -
> -struct xdrfunc {
> - char *name;
> - int pointerp;
> - struct xdrfunc *next;
> -};
> -typedef struct xdrfunc xdrfunc;
> -
> -#define PUT 1
> -#define GET 2
> -
> -/*
> - * Global variables
> - */
> -#define MAXLINESIZE 1024
> -extern char curline[MAXLINESIZE];
> -extern const char *where;
> -extern int linenum;
> -
> -extern const char *infilename;
> -extern FILE *fout;
> -extern FILE *fin;
> -
> -extern list *defined;
> -
> -extern bas_type *typ_list_h;
> -extern bas_type *typ_list_t;
> -extern xdrfunc *xdrfunc_head, *xdrfunc_tail;
> -
> -/*
> - * All the option flags
> - */
> -extern int inetdflag;
> -extern int pmflag;
> -extern int tblflag;
> -extern int logflag;
> -extern int newstyle;
> -extern int Cflag; /* C++ flag */
> -extern int CCflag; /* C++ flag */
> -extern int tirpcflag; /* flag for generating tirpc code */
> -extern int inlineflag; /* if this is 0, then do not generate inline code */
> -extern int mtflag;
> -
> -/*
> - * Other flags related with inetd jumpstart.
> - */
> -extern int indefinitewait;
> -extern int exitnow;
> -extern int timerflag;
> -
> -extern int nonfatalerrors;
> -
> -/*
> - * rpc_util routines
> - */
> -void storeval(list **lstp, definition *val);
> -#define STOREVAL(list,item) storeval(list,item)
> -
> -definition *findval(list *lst, const char *val,
> - int (*cmp)(const definition *, const char *));
> -#define FINDVAL(list,item,finder) findval(list, item, finder)
> -
> -const char *fixtype(const char *type);
> -const char *stringfix(const char *type);
> -char *locase(const char *str);
> -void pvname_svc(const char *pname, const char *vnum);
> -void pvname(const char *pname, const char *vnum);
> -void ptype(const char *prefix, const char *type, int follow);
> -int isvectordef(const char *type, relation rel);
> -int streq(const char *a, const char *b);
> -void error(const char *msg);
> -void tabify(FILE *f, int tab);
> -void record_open(const char *file);
> -bas_type *find_type(const char *type);
> -
> -
> -/*
> - * rpc_cout routines
> - */
> -void emit(definition *def);
> -
> -/*
> - * rpc_hout routines
> - */
> -void print_datadef(definition *def);
> -void print_funcdef(definition *def);
> -
> -/*
> - * rpc_svcout routines
> - */
> -void write_most(const char *infile, int netflag, int nomain);
> -void write_register(void);
> -void write_rest(void);
> -void write_programs(const char *storage);
> -void write_svc_aux(int nomain);
> -void write_inetd_register(const char *transp);
> -void write_netid_register(const char *);
> -void write_nettype_register(const char *);
> -/*
> - * rpc_clntout routines
> - */
> -void write_stubs(void);
> -
> -/*
> - * rpc_tblout routines
> - */
> -void write_tables(void);
> diff --git a/sunrpc/rpcgen.c b/sunrpc/rpcgen.c
> deleted file mode 100644
> index 1b455ba243..0000000000
> --- a/sunrpc/rpcgen.c
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -/* Empty file expected by glibc's standard build rules for
> - executables. */
> diff --git a/sunrpc/rpcsvc/bootparam.h b/sunrpc/rpcsvc/bootparam.h
> deleted file mode 100644
> index 0cd3ebbe5a..0000000000
> --- a/sunrpc/rpcsvc/bootparam.h
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> -
> - The GNU C Library is free software; you can redistribute it and/or
> - modify it under the terms of the GNU Lesser General Public
> - License as published by the Free Software Foundation; either
> - version 2.1 of the License, or (at your option) any later version.
> -
> - The GNU C Library is distributed in the hope that it will be useful,
> - but WITHOUT ANY WARRANTY; without even the implied warranty of
> - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> - Lesser General Public License for more details.
> -
> - You should have received a copy of the GNU Lesser General Public
> - License along with the GNU C Library; if not, see
> - <https://www.gnu.org/licenses/>. */
> -
> -#ifndef _RPCSVC_BOOTPARAM_H
> -#define _RPCSVC_BOOTPARAM_H
> -
> -#include <rpcsvc/bootparam_prot.h>
> -
> -#endif /* _RPCSVC_BOOTPARAM_H */
> diff --git a/sunrpc/rpcsvc/bootparam_prot.x b/sunrpc/rpcsvc/bootparam_prot.x
> deleted file mode 100644
> index 117e428560..0000000000
> --- a/sunrpc/rpcsvc/bootparam_prot.x
> +++ /dev/null
> @@ -1,97 +0,0 @@
> -/* @(#)bootparam_prot.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * RPC for bootparms service.
> - * There are two procedures:
> - * WHOAMI takes a net address and returns a client name and also a
> - * likely net address for routing
> - * GETFILE takes a client name and file identifier and returns the
> - * server name, server net address and pathname for the file.
> - * file identifiers typically include root, swap, pub and dump
> - */
> -
> -#ifdef RPC_HDR
> -%#include <rpc/types.h>
> -%#include <sys/time.h>
> -%#include <sys/errno.h>
> -%#include <nfs/nfs.h>
> -#endif
> -
> -const MAX_MACHINE_NAME = 255;
> -const MAX_PATH_LEN = 1024;
> -const MAX_FILEID = 32;
> -const IP_ADDR_TYPE = 1;
> -
> -typedef string bp_machine_name_t<MAX_MACHINE_NAME>;
> -typedef string bp_path_t<MAX_PATH_LEN>;
> -typedef string bp_fileid_t<MAX_FILEID>;
> -
> -struct ip_addr_t {
> - char net;
> - char host;
> - char lh;
> - char impno;
> -};
> -
> -union bp_address switch (int address_type) {
> - case IP_ADDR_TYPE:
> - ip_addr_t ip_addr;
> -};
> -
> -struct bp_whoami_arg {
> - bp_address client_address;
> -};
> -
> -struct bp_whoami_res {
> - bp_machine_name_t client_name;
> - bp_machine_name_t domain_name;
> - bp_address router_address;
> -};
> -
> -struct bp_getfile_arg {
> - bp_machine_name_t client_name;
> - bp_fileid_t file_id;
> -};
> -
> -struct bp_getfile_res {
> - bp_machine_name_t server_name;
> - bp_address server_address;
> - bp_path_t server_path;
> -};
> -
> -program BOOTPARAMPROG {
> - version BOOTPARAMVERS {
> - bp_whoami_res BOOTPARAMPROC_WHOAMI(bp_whoami_arg) = 1;
> - bp_getfile_res BOOTPARAMPROC_GETFILE(bp_getfile_arg) = 2;
> - } = 1;
> -} = 100026;
> diff --git a/sunrpc/rpcsvc/key_prot.x b/sunrpc/rpcsvc/key_prot.x
> deleted file mode 100644
> index 9baf943916..0000000000
> --- a/sunrpc/rpcsvc/key_prot.x
> +++ /dev/null
> @@ -1,283 +0,0 @@
> -/*
> - * Key server protocol definition
> - * Copyright (c) 2010, Oracle America, Inc.
> - *
> - * 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 the "Oracle America, 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.
> - *
> - * The keyserver is a public key storage/encryption/decryption service
> - * The encryption method used is based on the Diffie-Hellman exponential
> - * key exchange technology.
> - *
> - * The key server is local to each machine, akin to the portmapper.
> - * Under TI-RPC, communication with the keyserver is through the
> - * loopback transport.
> - *
> - * NOTE: This .x file generates the USER level headers for the keyserver.
> - * the KERNEL level headers are created by hand as they kernel has special
> - * requirements.
> - */
> -
> -%#if 0
> -%#pragma ident "@(#)key_prot.x 1.7 94/04/29 SMI"
> -%#endif
> -%
> -%/* Copyright (c) 1990, 1991 Sun Microsystems, Inc. */
> -%
> -%/*
> -% * Compiled from key_prot.x using rpcgen.
> -% * DO NOT EDIT THIS FILE!
> -% * This is NOT source code!
> -% */
> -
> -/*
> - * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
> - *
> - * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
> - * where p is also prime.
> - *
> - * PROOT satisfies the following two conditions:
> - * (1) (PROOT ** 2) % MODULUS != 1
> - * (2) (PROOT ** p) % MODULUS != 1
> - *
> - */
> -
> -const PROOT = 3;
> -const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
> -
> -const HEXKEYBYTES = 48; /* HEXKEYBYTES == strlen(HEXMODULUS) */
> -const KEYSIZE = 192; /* KEYSIZE == bit length of key */
> -const KEYBYTES = 24; /* byte length of key */
> -
> -/*
> - * The first 16 hex digits of the encrypted secret key are used as
> - * a checksum in the database.
> - */
> -const KEYCHECKSUMSIZE = 16;
> -
> -/*
> - * status of operation
> - */
> -enum keystatus {
> - KEY_SUCCESS, /* no problems */
> - KEY_NOSECRET, /* no secret key stored */
> - KEY_UNKNOWN, /* unknown netname */
> - KEY_SYSTEMERR /* system error (out of memory, encryption failure) */
> -};
> -
> -typedef opaque keybuf[HEXKEYBYTES]; /* store key in hex */
> -
> -typedef string netnamestr<MAXNETNAMELEN>;
> -
> -/*
> - * Argument to ENCRYPT or DECRYPT
> - */
> -struct cryptkeyarg {
> - netnamestr remotename;
> - des_block deskey;
> -};
> -
> -/*
> - * Argument to ENCRYPT_PK or DECRYPT_PK
> - */
> -struct cryptkeyarg2 {
> - netnamestr remotename;
> - netobj remotekey; /* Contains a length up to 1024 bytes */
> - des_block deskey;
> -};
> -
> -
> -/*
> - * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
> - */
> -union cryptkeyres switch (keystatus status) {
> -case KEY_SUCCESS:
> - des_block deskey;
> -default:
> - void;
> -};
> -
> -const MAXGIDS = 16; /* max number of gids in gid list */
> -
> -/*
> - * Unix credential
> - */
> -struct unixcred {
> - u_int uid;
> - u_int gid;
> - u_int gids<MAXGIDS>;
> -};
> -
> -/*
> - * Result returned from GETCRED
> - */
> -union getcredres switch (keystatus status) {
> -case KEY_SUCCESS:
> - unixcred cred;
> -default:
> - void;
> -};
> -/*
> - * key_netstarg;
> - */
> -
> -struct key_netstarg {
> - keybuf st_priv_key;
> - keybuf st_pub_key;
> - netnamestr st_netname;
> -};
> -
> -union key_netstres switch (keystatus status){
> -case KEY_SUCCESS:
> - key_netstarg knet;
> -default:
> - void;
> -};
> -
> -#ifdef RPC_HDR
> -%
> -%#ifndef opaque
> -%#define opaque char
> -%#endif
> -%
> -#endif
> -program KEY_PROG {
> - version KEY_VERS {
> -
> - /*
> - * This is my secret key.
> - * Store it for me.
> - */
> - keystatus
> - KEY_SET(keybuf) = 1;
> -
> - /*
> - * I want to talk to X.
> - * Encrypt a conversation key for me.
> - */
> - cryptkeyres
> - KEY_ENCRYPT(cryptkeyarg) = 2;
> -
> - /*
> - * X just sent me a message.
> - * Decrypt the conversation key for me.
> - */
> - cryptkeyres
> - KEY_DECRYPT(cryptkeyarg) = 3;
> -
> - /*
> - * Generate a secure conversation key for me
> - */
> - des_block
> - KEY_GEN(void) = 4;
> -
> - /*
> - * Get me the uid, gid and group-access-list associated
> - * with this netname (for kernel which cannot use NIS)
> - */
> - getcredres
> - KEY_GETCRED(netnamestr) = 5;
> - } = 1;
> - version KEY_VERS2 {
> -
> - /*
> - * #######
> - * Procedures 1-5 are identical to version 1
> - * #######
> - */
> -
> - /*
> - * This is my secret key.
> - * Store it for me.
> - */
> - keystatus
> - KEY_SET(keybuf) = 1;
> -
> - /*
> - * I want to talk to X.
> - * Encrypt a conversation key for me.
> - */
> - cryptkeyres
> - KEY_ENCRYPT(cryptkeyarg) = 2;
> -
> - /*
> - * X just sent me a message.
> - * Decrypt the conversation key for me.
> - */
> - cryptkeyres
> - KEY_DECRYPT(cryptkeyarg) = 3;
> -
> - /*
> - * Generate a secure conversation key for me
> - */
> - des_block
> - KEY_GEN(void) = 4;
> -
> - /*
> - * Get me the uid, gid and group-access-list associated
> - * with this netname (for kernel which cannot use NIS)
> - */
> - getcredres
> - KEY_GETCRED(netnamestr) = 5;
> -
> - /*
> - * I want to talk to X. and I know X's public key
> - * Encrypt a conversation key for me.
> - */
> - cryptkeyres
> - KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
> -
> - /*
> - * X just sent me a message. and I know X's public key
> - * Decrypt the conversation key for me.
> - */
> - cryptkeyres
> - KEY_DECRYPT_PK(cryptkeyarg2) = 7;
> -
> - /*
> - * Store my public key, netname and private key.
> - */
> - keystatus
> - KEY_NET_PUT(key_netstarg) = 8;
> -
> - /*
> - * Retrieve my public key, netname and private key.
> - */
> - key_netstres
> - KEY_NET_GET(void) = 9;
> -
> - /*
> - * Return me the conversation key that is constructed
> - * from my secret key and this publickey.
> - */
> -
> - cryptkeyres
> - KEY_GET_CONV(keybuf) = 10;
> -
> -
> - } = 2;
> -} = 100029;
> diff --git a/sunrpc/rpcsvc/klm_prot.x b/sunrpc/rpcsvc/klm_prot.x
> deleted file mode 100644
> index aee5b1a962..0000000000
> --- a/sunrpc/rpcsvc/klm_prot.x
> +++ /dev/null
> @@ -1,130 +0,0 @@
> -/* @(#)klm_prot.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Kernel/lock manager protocol definition
> - * Copyright (c) 2010, Oracle America, Inc.
> - *
> - * 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 the "Oracle America, 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.
> - *
> - * protocol used between the UNIX kernel (the "client") and the
> - * local lock manager. The local lock manager is a deamon running
> - * above the kernel.
> - */
> -
> -const LM_MAXSTRLEN = 1024;
> -
> -/*
> - * lock manager status returns
> - */
> -enum klm_stats {
> - klm_granted = 0, /* lock is granted */
> - klm_denied = 1, /* lock is denied */
> - klm_denied_nolocks = 2, /* no lock entry available */
> - klm_working = 3 /* lock is being processed */
> -};
> -
> -/*
> - * lock manager lock identifier
> - */
> -struct klm_lock {
> - string server_name<LM_MAXSTRLEN>;
> - netobj fh; /* a counted file handle */
> - int pid; /* holder of the lock */
> - unsigned l_offset; /* beginning offset of the lock */
> - unsigned l_len; /* byte length of the lock;
> - * zero means through end of file */
> -};
> -
> -/*
> - * lock holder identifier
> - */
> -struct klm_holder {
> - bool exclusive; /* FALSE if shared lock */
> - int svid; /* holder of the lock (pid) */
> - unsigned l_offset; /* beginning offset of the lock */
> - unsigned l_len; /* byte length of the lock;
> - * zero means through end of file */
> -};
> -
> -/*
> - * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
> - */
> -struct klm_stat {
> - klm_stats stat;
> -};
> -
> -/*
> - * reply to a KLM_TEST call
> - */
> -union klm_testrply switch (klm_stats stat) {
> - case klm_denied:
> - struct klm_holder holder;
> - default: /* All other cases return no arguments */
> - void;
> -};
> -
> -
> -/*
> - * arguments to KLM_LOCK
> - */
> -struct klm_lockargs {
> - bool block;
> - bool exclusive;
> - struct klm_lock alock;
> -};
> -
> -/*
> - * arguments to KLM_TEST
> - */
> -struct klm_testargs {
> - bool exclusive;
> - struct klm_lock alock;
> -};
> -
> -/*
> - * arguments to KLM_UNLOCK
> - */
> -struct klm_unlockargs {
> - struct klm_lock alock;
> -};
> -
> -program KLM_PROG {
> - version KLM_VERS {
> -
> - klm_testrply KLM_TEST (struct klm_testargs) = 1;
> -
> - klm_stat KLM_LOCK (struct klm_lockargs) = 2;
> -
> - klm_stat KLM_CANCEL (struct klm_lockargs) = 3;
> - /* klm_granted=> the cancel request fails due to lock is already granted */
> - /* klm_denied=> the cancel request successfully aborts
> -lock request */
> -
> - klm_stat KLM_UNLOCK (struct klm_unlockargs) = 4;
> - } = 1;
> -} = 100020;
> diff --git a/sunrpc/rpcsvc/mount.x b/sunrpc/rpcsvc/mount.x
> deleted file mode 100644
> index ed3b339c49..0000000000
> --- a/sunrpc/rpcsvc/mount.x
> +++ /dev/null
> @@ -1,161 +0,0 @@
> -/* @(#)mount.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * Protocol description for the mount program
> - */
> -
> -
> -const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
> -const MNTNAMLEN = 255; /* maximum bytes in a name argument */
> -const FHSIZE = 32; /* size in bytes of a file handle */
> -
> -/*
> - * The fhandle is the file handle that the server passes to the client.
> - * All file operations are done using the file handles to refer to a file
> - * or a directory. The file handle can contain whatever information the
> - * server needs to distinguish an individual file.
> - */
> -typedef opaque fhandle[FHSIZE];
> -
> -/*
> - * If a status of zero is returned, the call completed successfully, and
> - * a file handle for the directory follows. A non-zero status indicates
> - * some sort of error. The status corresponds with UNIX error numbers.
> - */
> -union fhstatus switch (unsigned fhs_status) {
> -case 0:
> - fhandle fhs_fhandle;
> -default:
> - void;
> -};
> -
> -/*
> - * The type dirpath is the pathname of a directory
> - */
> -typedef string dirpath<MNTPATHLEN>;
> -
> -/*
> - * The type name is used for arbitrary names (hostnames, groupnames)
> - */
> -typedef string name<MNTNAMLEN>;
> -
> -/*
> - * A list of who has what mounted
> - */
> -typedef struct mountbody *mountlist;
> -struct mountbody {
> - name ml_hostname;
> - dirpath ml_directory;
> - mountlist ml_next;
> -};
> -
> -/*
> - * A list of netgroups
> - */
> -typedef struct groupnode *groups;
> -struct groupnode {
> - name gr_name;
> - groups gr_next;
> -};
> -
> -/*
> - * A list of what is exported and to whom
> - */
> -typedef struct exportnode *exports;
> -struct exportnode {
> - dirpath ex_dir;
> - groups ex_groups;
> - exports ex_next;
> -};
> -
> -program MOUNTPROG {
> - /*
> - * Version one of the mount protocol communicates with version two
> - * of the NFS protocol. The only connecting point is the fhandle
> - * structure, which is the same for both protocols.
> - */
> - version MOUNTVERS {
> - /*
> - * Does no work. It is made available in all RPC services
> - * to allow server response testing and timing
> - */
> - void
> - MOUNTPROC_NULL(void) = 0;
> -
> - /*
> - * If fhs_status is 0, then fhs_fhandle contains the
> - * file handle for the directory. This file handle may
> - * be used in the NFS protocol. This procedure also adds
> - * a new entry to the mount list for this client mounting
> - * the directory.
> - * Unix authentication required.
> - */
> - fhstatus
> - MOUNTPROC_MNT(dirpath) = 1;
> -
> - /*
> - * Returns the list of remotely mounted filesystems. The
> - * mountlist contains one entry for each hostname and
> - * directory pair.
> - */
> - mountlist
> - MOUNTPROC_DUMP(void) = 2;
> -
> - /*
> - * Removes the mount list entry for the directory
> - * Unix authentication required.
> - */
> - void
> - MOUNTPROC_UMNT(dirpath) = 3;
> -
> - /*
> - * Removes all of the mount list entries for this client
> - * Unix authentication required.
> - */
> - void
> - MOUNTPROC_UMNTALL(void) = 4;
> -
> - /*
> - * Returns a list of all the exported filesystems, and which
> - * machines are allowed to import it.
> - */
> - exports
> - MOUNTPROC_EXPORT(void) = 5;
> -
> - /*
> - * Identical to MOUNTPROC_EXPORT above
> - */
> - exports
> - MOUNTPROC_EXPORTALL(void) = 6;
> - } = 1;
> -} = 100005;
> diff --git a/sunrpc/rpcsvc/nfs_prot.x b/sunrpc/rpcsvc/nfs_prot.x
> deleted file mode 100644
> index ad992e238f..0000000000
> --- a/sunrpc/rpcsvc/nfs_prot.x
> +++ /dev/null
> @@ -1,352 +0,0 @@
> -/* @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * nfs_prot.x 1.2 87/10/12
> - * Copyright (c) 2010, Oracle America, Inc.
> - *
> - * 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 the "Oracle America, 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.
> - */
> -const NFS_PORT = 2049;
> -const NFS_MAXDATA = 8192;
> -const NFS_MAXPATHLEN = 1024;
> -const NFS_MAXNAMLEN = 255;
> -const NFS_FHSIZE = 32;
> -const NFS_COOKIESIZE = 4;
> -const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
> -
> -/*
> - * File types
> - */
> -const NFSMODE_FMT = 0170000; /* type of file */
> -const NFSMODE_DIR = 0040000; /* directory */
> -const NFSMODE_CHR = 0020000; /* character special */
> -const NFSMODE_BLK = 0060000; /* block special */
> -const NFSMODE_REG = 0100000; /* regular */
> -const NFSMODE_LNK = 0120000; /* symbolic link */
> -const NFSMODE_SOCK = 0140000; /* socket */
> -const NFSMODE_FIFO = 0010000; /* fifo */
> -
> -/*
> - * Error status
> - */
> -enum nfsstat {
> - NFS_OK= 0, /* no error */
> - NFSERR_PERM=1, /* Not owner */
> - NFSERR_NOENT=2, /* No such file or directory */
> - NFSERR_IO=5, /* I/O error */
> - NFSERR_NXIO=6, /* No such device or address */
> - NFSERR_ACCES=13, /* Permission denied */
> - NFSERR_EXIST=17, /* File exists */
> - NFSERR_NODEV=19, /* No such device */
> - NFSERR_NOTDIR=20, /* Not a directory*/
> - NFSERR_ISDIR=21, /* Is a directory */
> - NFSERR_FBIG=27, /* File too large */
> - NFSERR_NOSPC=28, /* No space left on device */
> - NFSERR_ROFS=30, /* Read-only file system */
> - NFSERR_NAMETOOLONG=63, /* File name too long */
> - NFSERR_NOTEMPTY=66, /* Directory not empty */
> - NFSERR_DQUOT=69, /* Disc quota exceeded */
> - NFSERR_STALE=70, /* Stale NFS file handle */
> - NFSERR_WFLUSH=99 /* write cache flushed */
> -};
> -
> -/*
> - * File types
> - */
> -enum ftype {
> - NFNON = 0, /* non-file */
> - NFREG = 1, /* regular file */
> - NFDIR = 2, /* directory */
> - NFBLK = 3, /* block special */
> - NFCHR = 4, /* character special */
> - NFLNK = 5, /* symbolic link */
> - NFSOCK = 6, /* unix domain sockets */
> - NFBAD = 7, /* unused */
> - NFFIFO = 8 /* named pipe */
> -};
> -
> -/*
> - * File access handle
> - */
> -struct nfs_fh {
> - opaque data[NFS_FHSIZE];
> -};
> -
> -/*
> - * Timeval
> - */
> -struct nfstime {
> - unsigned seconds;
> - unsigned useconds;
> -};
> -
> -
> -/*
> - * File attributes
> - */
> -struct fattr {
> - ftype type; /* file type */
> - unsigned mode; /* protection mode bits */
> - unsigned nlink; /* # hard links */
> - unsigned uid; /* owner user id */
> - unsigned gid; /* owner group id */
> - unsigned size; /* file size in bytes */
> - unsigned blocksize; /* preferred block size */
> - unsigned rdev; /* special device # */
> - unsigned blocks; /* Kb of disk used by file */
> - unsigned fsid; /* device # */
> - unsigned fileid; /* inode # */
> - nfstime atime; /* time of last access */
> - nfstime mtime; /* time of last modification */
> - nfstime ctime; /* time of last change */
> -};
> -
> -/*
> - * File attributes which can be set
> - */
> -struct sattr {
> - unsigned mode; /* protection mode bits */
> - unsigned uid; /* owner user id */
> - unsigned gid; /* owner group id */
> - unsigned size; /* file size in bytes */
> - nfstime atime; /* time of last access */
> - nfstime mtime; /* time of last modification */
> -};
> -
> -
> -typedef string filename<NFS_MAXNAMLEN>;
> -typedef string nfspath<NFS_MAXPATHLEN>;
> -
> -/*
> - * Reply status with file attributes
> - */
> -union attrstat switch (nfsstat status) {
> -case NFS_OK:
> - fattr attributes;
> -default:
> - void;
> -};
> -
> -struct sattrargs {
> - nfs_fh file;
> - sattr attributes;
> -};
> -
> -/*
> - * Arguments for directory operations
> - */
> -struct diropargs {
> - nfs_fh dir; /* directory file handle */
> - filename name; /* name (up to NFS_MAXNAMLEN bytes) */
> -};
> -
> -struct diropokres {
> - nfs_fh file;
> - fattr attributes;
> -};
> -
> -/*
> - * Results from directory operation
> - */
> -union diropres switch (nfsstat status) {
> -case NFS_OK:
> - diropokres diropres;
> -default:
> - void;
> -};
> -
> -union readlinkres switch (nfsstat status) {
> -case NFS_OK:
> - nfspath data;
> -default:
> - void;
> -};
> -
> -/*
> - * Arguments to remote read
> - */
> -struct readargs {
> - nfs_fh file; /* handle for file */
> - unsigned offset; /* byte offset in file */
> - unsigned count; /* immediate read count */
> - unsigned totalcount; /* total read count (from this offset)*/
> -};
> -
> -/*
> - * Status OK portion of remote read reply
> - */
> -struct readokres {
> - fattr attributes; /* attributes, need for pagin*/
> - opaque data<NFS_MAXDATA>;
> -};
> -
> -union readres switch (nfsstat status) {
> -case NFS_OK:
> - readokres reply;
> -default:
> - void;
> -};
> -
> -/*
> - * Arguments to remote write
> - */
> -struct writeargs {
> - nfs_fh file; /* handle for file */
> - unsigned beginoffset; /* beginning byte offset in file */
> - unsigned offset; /* current byte offset in file */
> - unsigned totalcount; /* total write count (to this offset)*/
> - opaque data<NFS_MAXDATA>;
> -};
> -
> -struct createargs {
> - diropargs where;
> - sattr attributes;
> -};
> -
> -struct renameargs {
> - diropargs from;
> - diropargs to;
> -};
> -
> -struct linkargs {
> - nfs_fh from;
> - diropargs to;
> -};
> -
> -struct symlinkargs {
> - diropargs from;
> - nfspath to;
> - sattr attributes;
> -};
> -
> -
> -typedef opaque nfscookie[NFS_COOKIESIZE];
> -
> -/*
> - * Arguments to readdir
> - */
> -struct readdirargs {
> - nfs_fh dir; /* directory handle */
> - nfscookie cookie;
> - unsigned count; /* number of directory bytes to read */
> -};
> -
> -struct entry {
> - unsigned fileid;
> - filename name;
> - nfscookie cookie;
> - entry *nextentry;
> -};
> -
> -struct dirlist {
> - entry *entries;
> - bool eof;
> -};
> -
> -union readdirres switch (nfsstat status) {
> -case NFS_OK:
> - dirlist reply;
> -default:
> - void;
> -};
> -
> -struct statfsokres {
> - unsigned tsize; /* preferred transfer size in bytes */
> - unsigned bsize; /* fundamental file system block size */
> - unsigned blocks; /* total blocks in file system */
> - unsigned bfree; /* free blocks in fs */
> - unsigned bavail; /* free blocks avail to non-superuser */
> -};
> -
> -union statfsres switch (nfsstat status) {
> -case NFS_OK:
> - statfsokres reply;
> -default:
> - void;
> -};
> -
> -/*
> - * Remote file service routines
> - */
> -program NFS_PROGRAM {
> - version NFS_VERSION {
> - void
> - NFSPROC_NULL(void) = 0;
> -
> - attrstat
> - NFSPROC_GETATTR(nfs_fh) = 1;
> -
> - attrstat
> - NFSPROC_SETATTR(sattrargs) = 2;
> -
> - void
> - NFSPROC_ROOT(void) = 3;
> -
> - diropres
> - NFSPROC_LOOKUP(diropargs) = 4;
> -
> - readlinkres
> - NFSPROC_READLINK(nfs_fh) = 5;
> -
> - readres
> - NFSPROC_READ(readargs) = 6;
> -
> - void
> - NFSPROC_WRITECACHE(void) = 7;
> -
> - attrstat
> - NFSPROC_WRITE(writeargs) = 8;
> -
> - diropres
> - NFSPROC_CREATE(createargs) = 9;
> -
> - nfsstat
> - NFSPROC_REMOVE(diropargs) = 10;
> -
> - nfsstat
> - NFSPROC_RENAME(renameargs) = 11;
> -
> - nfsstat
> - NFSPROC_LINK(linkargs) = 12;
> -
> - nfsstat
> - NFSPROC_SYMLINK(symlinkargs) = 13;
> -
> - diropres
> - NFSPROC_MKDIR(createargs) = 14;
> -
> - nfsstat
> - NFSPROC_RMDIR(diropargs) = 15;
> -
> - readdirres
> - NFSPROC_READDIR(readdirargs) = 16;
> -
> - statfsres
> - NFSPROC_STATFS(nfs_fh) = 17;
> - } = 2;
> -} = 100003;
> diff --git a/sunrpc/rpcsvc/nlm_prot.x b/sunrpc/rpcsvc/nlm_prot.x
> deleted file mode 100644
> index 81ff13735e..0000000000
> --- a/sunrpc/rpcsvc/nlm_prot.x
> +++ /dev/null
> @@ -1,203 +0,0 @@
> -/* @(#)nlm_prot.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Network lock manager protocol definition
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - *
> - * protocol used between local lock manager and remote lock manager
> - */
> -
> -#ifdef RPC_HDR
> -%#define LM_MAXSTRLEN 1024
> -%#define MAXNAMELEN LM_MAXSTRLEN+1
> -#endif
> -
> -/*
> - * status of a call to the lock manager
> - */
> -enum nlm_stats {
> - nlm_granted = 0,
> - nlm_denied = 1,
> - nlm_denied_nolocks = 2,
> - nlm_blocked = 3,
> - nlm_denied_grace_period = 4
> -};
> -
> -struct nlm_holder {
> - bool exclusive;
> - int svid;
> - netobj oh;
> - unsigned l_offset;
> - unsigned l_len;
> -};
> -
> -union nlm_testrply switch (nlm_stats stat) {
> - case nlm_denied:
> - struct nlm_holder holder;
> - default:
> - void;
> -};
> -
> -struct nlm_stat {
> - nlm_stats stat;
> -};
> -
> -struct nlm_res {
> - netobj cookie;
> - nlm_stat stat;
> -};
> -
> -struct nlm_testres {
> - netobj cookie;
> - nlm_testrply stat;
> -};
> -
> -struct nlm_lock {
> - string caller_name<LM_MAXSTRLEN>;
> - netobj fh; /* identify a file */
> - netobj oh; /* identify owner of a lock */
> - int svid; /* generated from pid for svid */
> - unsigned l_offset;
> - unsigned l_len;
> -};
> -
> -struct nlm_lockargs {
> - netobj cookie;
> - bool block;
> - bool exclusive;
> - struct nlm_lock alock;
> - bool reclaim; /* used for recovering locks */
> - int state; /* specify local status monitor state */
> -};
> -
> -struct nlm_cancargs {
> - netobj cookie;
> - bool block;
> - bool exclusive;
> - struct nlm_lock alock;
> -};
> -
> -struct nlm_testargs {
> - netobj cookie;
> - bool exclusive;
> - struct nlm_lock alock;
> -};
> -
> -struct nlm_unlockargs {
> - netobj cookie;
> - struct nlm_lock alock;
> -};
> -
> -
> -#ifdef RPC_HDR
> -%/*
> -% * The following enums are actually bit encoded for efficient
> -% * boolean algebra.... DON'T change them.....
> -% */
> -#endif
> -enum fsh_mode {
> - fsm_DN = 0, /* deny none */
> - fsm_DR = 1, /* deny read */
> - fsm_DW = 2, /* deny write */
> - fsm_DRW = 3 /* deny read/write */
> -};
> -
> -enum fsh_access {
> - fsa_NONE = 0, /* for completeness */
> - fsa_R = 1, /* read only */
> - fsa_W = 2, /* write only */
> - fsa_RW = 3 /* read/write */
> -};
> -
> -struct nlm_share {
> - string caller_name<LM_MAXSTRLEN>;
> - netobj fh;
> - netobj oh;
> - fsh_mode mode;
> - fsh_access access;
> -};
> -
> -struct nlm_shareargs {
> - netobj cookie;
> - nlm_share share;
> - bool reclaim;
> -};
> -
> -struct nlm_shareres {
> - netobj cookie;
> - nlm_stats stat;
> - int sequence;
> -};
> -
> -struct nlm_notify {
> - string name<MAXNAMELEN>;
> - long state;
> -};
> -
> -/*
> - * Over-the-wire protocol used between the network lock managers
> - */
> -
> -program NLM_PROG {
> - version NLM_VERS {
> -
> - nlm_testres NLM_TEST(struct nlm_testargs) = 1;
> -
> - nlm_res NLM_LOCK(struct nlm_lockargs) = 2;
> -
> - nlm_res NLM_CANCEL(struct nlm_cancargs) = 3;
> - nlm_res NLM_UNLOCK(struct nlm_unlockargs) = 4;
> -
> - /*
> - * remote lock manager call-back to grant lock
> - */
> - nlm_res NLM_GRANTED(struct nlm_testargs)= 5;
> - /*
> - * message passing style of requesting lock
> - */
> - void NLM_TEST_MSG(struct nlm_testargs) = 6;
> - void NLM_LOCK_MSG(struct nlm_lockargs) = 7;
> - void NLM_CANCEL_MSG(struct nlm_cancargs) =8;
> - void NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
> - void NLM_GRANTED_MSG(struct nlm_testargs) = 10;
> - void NLM_TEST_RES(nlm_testres) = 11;
> - void NLM_LOCK_RES(nlm_res) = 12;
> - void NLM_CANCEL_RES(nlm_res) = 13;
> - void NLM_UNLOCK_RES(nlm_res) = 14;
> - void NLM_GRANTED_RES(nlm_res) = 15;
> - } = 1;
> -
> - version NLM_VERSX {
> - nlm_shareres NLM_SHARE(nlm_shareargs) = 20;
> - nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21;
> - nlm_res NLM_NM_LOCK(nlm_lockargs) = 22;
> - void NLM_FREE_ALL(nlm_notify) = 23;
> - } = 3;
> -
> -} = 100021;
> diff --git a/sunrpc/rpcsvc/rex.x b/sunrpc/rpcsvc/rex.x
> deleted file mode 100644
> index b5baf15a85..0000000000
> --- a/sunrpc/rpcsvc/rex.x
> +++ /dev/null
> @@ -1,229 +0,0 @@
> -/* @(#)rex.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * Remote execution (rex) protocol specification
> - */
> -
> -const STRINGSIZE = 1024;
> -typedef string rexstring<1024>;
> -
> -/*
> - * values to pass to REXPROC_SIGNAL
> - */
> -const SIGINT = 2; /* interrupt */
> -
> -/*
> - * Values for rst_flags, below
> - */
> -const REX_INTERACTIVE = 1; /* interactive mode */
> -
> -struct rex_start {
> - rexstring rst_cmd<>; /* list of command and args */
> - rexstring rst_host; /* working directory host name */
> - rexstring rst_fsname; /* working directory file system name */
> - rexstring rst_dirwithin;/* working directory within file system */
> - rexstring rst_env<>; /* list of environment */
> - unsigned int rst_port0; /* port for stdin */
> - unsigned int rst_port1; /* port for stdout */
> - unsigned int rst_port2; /* port for stderr */
> - unsigned int rst_flags; /* options - see const above */
> -};
> -
> -struct rex_result {
> - int rlt_stat; /* integer status code */
> - rexstring rlt_message; /* string message for human consumption */
> -};
> -
> -
> -struct sgttyb {
> - unsigned four; /* always equals 4 */
> - opaque chars[4];
> - /* chars[0] == input speed */
> - /* chars[1] == output speed */
> - /* chars[2] == kill character */
> - /* chars[3] == erase character */
> - unsigned flags;
> -};
> -/* values for speeds above (baud rates) */
> -const B0 = 0;
> -const B50 = 1;
> -const B75 = 2;
> -const B110 = 3;
> -const B134 = 4;
> -const B150 = 5;
> -const B200 = 6;
> -const B300 = 7;
> -const B600 = 8;
> -const B1200 = 9;
> -const B1800 = 10;
> -const B2400 = 11;
> -const B4800 = 12;
> -const B9600 = 13;
> -const B19200 = 14;
> -const B38400 = 15;
> -
> -/* values for flags above */
> -const TANDEM = 0x00000001; /* send stopc on out q full */
> -const CBREAK = 0x00000002; /* half-cooked mode */
> -const LCASE = 0x00000004; /* simulate lower case */
> -const ECHO = 0x00000008; /* echo input */
> -const CRMOD = 0x00000010; /* map \r to \r\n on output */
> -const RAW = 0x00000020; /* no i/o processing */
> -const ODDP = 0x00000040; /* get/send odd parity */
> -const EVENP = 0x00000080; /* get/send even parity */
> -const ANYP = 0x000000c0; /* get any parity/send none */
> -const NLDELAY = 0x00000300; /* \n delay */
> -const NL0 = 0x00000000;
> -const NL1 = 0x00000100; /* tty 37 */
> -const NL2 = 0x00000200; /* vt05 */
> -const NL3 = 0x00000300;
> -const TBDELAY = 0x00000c00; /* horizontal tab delay */
> -const TAB0 = 0x00000000;
> -const TAB1 = 0x00000400; /* tty 37 */
> -const TAB2 = 0x00000800;
> -const XTABS = 0x00000c00; /* expand tabs on output */
> -const CRDELAY = 0x00003000; /* \r delay */
> -const CR0 = 0x00000000;
> -const CR1 = 0x00001000; /* tn 300 */
> -const CR2 = 0x00002000; /* tty 37 */
> -const CR3 = 0x00003000; /* concept 100 */
> -const VTDELAY = 0x00004000; /* vertical tab delay */
> -const FF0 = 0x00000000;
> -const FF1 = 0x00004000; /* tty 37 */
> -const BSDELAY = 0x00008000; /* \b delay */
> -const BS0 = 0x00000000;
> -const BS1 = 0x00008000;
> -const CRTBS = 0x00010000; /* do backspacing for crt */
> -const PRTERA = 0x00020000; /* \ ... / erase */
> -const CRTERA = 0x00040000; /* " \b " to wipe out char */
> -const TILDE = 0x00080000; /* hazeltine tilde kludge */
> -const MDMBUF = 0x00100000; /* start/stop output on carrier intr */
> -const LITOUT = 0x00200000; /* literal output */
> -const TOSTOP = 0x00400000; /* SIGTTOU on background output */
> -const FLUSHO = 0x00800000; /* flush output to terminal */
> -const NOHANG = 0x01000000; /* no SIGHUP on carrier drop */
> -const L001000 = 0x02000000;
> -const CRTKIL = 0x04000000; /* kill line with " \b " */
> -const PASS8 = 0x08000000;
> -const CTLECH = 0x10000000; /* echo control chars as ^X */
> -const PENDIN = 0x20000000; /* tp->t_rawq needs reread */
> -const DECCTQ = 0x40000000; /* only ^Q starts after ^S */
> -const NOFLSH = 0x80000000; /* no output flush on signal */
> -
> -struct tchars {
> - unsigned six; /* always equals 6 */
> - opaque chars[6];
> - /* chars[0] == interrupt char */
> - /* chars[1] == quit char */
> - /* chars[2] == start output char */
> - /* chars[3] == stop output char */
> - /* chars[4] == end-of-file char */
> - /* chars[5] == input delimiter (like nl) */
> -};
> -
> -struct ltchars {
> - unsigned six; /* always equals 6 */
> - opaque chars[6];
> - /* chars[0] == stop process signal */
> - /* chars[1] == delayed stop process signal */
> - /* chars[2] == reprint line */
> - /* chars[3] == flush output */
> - /* chars[4] == word erase */
> - /* chars[5] == literal next character */
> - unsigned mode;
> -};
> -
> -struct rex_ttysize {
> - int ts_lines;
> - int ts_cols;
> -};
> -
> -struct rex_ttymode {
> - sgttyb basic; /* standard unix tty flags */
> - tchars more; /* interrupt, kill characters, etc. */
> - ltchars yetmore; /* special Berkeley characters */
> - unsigned andmore; /* and Berkeley modes */
> -};
> -
> -/* values for andmore above */
> -const LCRTBS = 0x0001; /* do backspacing for crt */
> -const LPRTERA = 0x0002; /* \ ... / erase */
> -const LCRTERA = 0x0004; /* " \b " to wipe out char */
> -const LTILDE = 0x0008; /* hazeltine tilde kludge */
> -const LMDMBUF = 0x0010; /* start/stop output on carrier intr */
> -const LLITOUT = 0x0020; /* literal output */
> -const LTOSTOP = 0x0040; /* SIGTTOU on background output */
> -const LFLUSHO = 0x0080; /* flush output to terminal */
> -const LNOHANG = 0x0100; /* no SIGHUP on carrier drop */
> -const LL001000 = 0x0200;
> -const LCRTKIL = 0x0400; /* kill line with " \b " */
> -const LPASS8 = 0x0800;
> -const LCTLECH = 0x1000; /* echo control chars as ^X */
> -const LPENDIN = 0x2000; /* needs reread */
> -const LDECCTQ = 0x4000; /* only ^Q starts after ^S */
> -const LNOFLSH = 0x8000; /* no output flush on signal */
> -
> -program REXPROG {
> - version REXVERS {
> -
> - /*
> - * Start remote execution
> - */
> - rex_result
> - REXPROC_START(rex_start) = 1;
> -
> - /*
> - * Wait for remote execution to terminate
> - */
> - rex_result
> - REXPROC_WAIT(void) = 2;
> -
> - /*
> - * Send tty modes
> - */
> - void
> - REXPROC_MODES(rex_ttymode) = 3;
> -
> - /*
> - * Send window size change
> - */
> - void
> - REXPROC_WINCH(rex_ttysize) = 4;
> -
> - /*
> - * Send other signal
> - */
> - void
> - REXPROC_SIGNAL(int) = 5;
> - } = 1;
> -} = 100017;
> diff --git a/sunrpc/rpcsvc/rquota.x b/sunrpc/rpcsvc/rquota.x
> deleted file mode 100644
> index c4575240d3..0000000000
> --- a/sunrpc/rpcsvc/rquota.x
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/* @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC */
> -/* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */
> -
> -/*
> - * Remote quota protocol
> - * Requires unix authentication
> - */
> -
> -const RQ_PATHLEN = 1024;
> -
> -struct getquota_args {
> - string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */
> - int gqa_uid; /* inquire about quota for uid */
> -};
> -
> -/*
> - * remote quota structure
> - */
> -struct rquota {
> - int rq_bsize; /* block size for block counts */
> - bool rq_active; /* indicates whether quota is active */
> - unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */
> - unsigned int rq_bsoftlimit; /* preferred limit on disk blks */
> - unsigned int rq_curblocks; /* current block count */
> - unsigned int rq_fhardlimit; /* absolute limit on allocated files */
> - unsigned int rq_fsoftlimit; /* preferred file limit */
> - unsigned int rq_curfiles; /* current # allocated files */
> - unsigned int rq_btimeleft; /* time left for excessive disk use */
> - unsigned int rq_ftimeleft; /* time left for excessive files */
> -};
> -
> -enum gqr_status {
> - Q_OK = 1, /* quota returned */
> - Q_NOQUOTA = 2, /* noquota for uid */
> - Q_EPERM = 3 /* no permission to access quota */
> -};
> -
> -union getquota_rslt switch (gqr_status status) {
> -case Q_OK:
> - rquota gqr_rquota; /* valid if status == Q_OK */
> -case Q_NOQUOTA:
> - void;
> -case Q_EPERM:
> - void;
> -};
> -
> -program RQUOTAPROG {
> - version RQUOTAVERS {
> - /*
> - * Get all quotas
> - */
> - getquota_rslt
> - RQUOTAPROC_GETQUOTA(getquota_args) = 1;
> -
> - /*
> - * Get active quotas only
> - */
> - getquota_rslt
> - RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
> - } = 1;
> -} = 100011;
> diff --git a/sunrpc/rpcsvc/rstat.x b/sunrpc/rpcsvc/rstat.x
> deleted file mode 100644
> index 9b7b102218..0000000000
> --- a/sunrpc/rpcsvc/rstat.x
> +++ /dev/null
> @@ -1,145 +0,0 @@
> -/* @(#)rstat.x 2.2 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * Gather statistics on remote machines
> - */
> -
> -#ifdef RPC_HDR
> -
> -%#ifndef FSCALE
> -%/*
> -% * Scale factor for scaled integers used to count load averages.
> -% */
> -%#define FSHIFT 8 /* bits to right of fixed binary point */
> -%#define FSCALE (1<<FSHIFT)
> -%
> -%#endif /* ndef FSCALE */
> -
> -#endif /* def RPC_HDR */
> -
> -const CPUSTATES = 4;
> -const DK_NDRIVE = 4;
> -
> -/*
> - * GMT since 0:00, January 1, 1970
> - */
> -struct rstat_timeval {
> - unsigned int tv_sec; /* seconds */
> - unsigned int tv_usec; /* and microseconds */
> -};
> -
> -struct statstime { /* RSTATVERS_TIME */
> - int cp_time[CPUSTATES];
> - int dk_xfer[DK_NDRIVE];
> - unsigned int v_pgpgin; /* these are cumulative sum */
> - unsigned int v_pgpgout;
> - unsigned int v_pswpin;
> - unsigned int v_pswpout;
> - unsigned int v_intr;
> - int if_ipackets;
> - int if_ierrors;
> - int if_oerrors;
> - int if_collisions;
> - unsigned int v_swtch;
> - int avenrun[3]; /* scaled by FSCALE */
> - rstat_timeval boottime;
> - rstat_timeval curtime;
> - int if_opackets;
> -};
> -
> -struct statsswtch { /* RSTATVERS_SWTCH */
> - int cp_time[CPUSTATES];
> - int dk_xfer[DK_NDRIVE];
> - unsigned int v_pgpgin; /* these are cumulative sum */
> - unsigned int v_pgpgout;
> - unsigned int v_pswpin;
> - unsigned int v_pswpout;
> - unsigned int v_intr;
> - int if_ipackets;
> - int if_ierrors;
> - int if_oerrors;
> - int if_collisions;
> - unsigned int v_swtch;
> - unsigned int avenrun[3];/* scaled by FSCALE */
> - rstat_timeval boottime;
> - int if_opackets;
> -};
> -
> -struct stats { /* RSTATVERS_ORIG */
> - int cp_time[CPUSTATES];
> - int dk_xfer[DK_NDRIVE];
> - unsigned int v_pgpgin; /* these are cumulative sum */
> - unsigned int v_pgpgout;
> - unsigned int v_pswpin;
> - unsigned int v_pswpout;
> - unsigned int v_intr;
> - int if_ipackets;
> - int if_ierrors;
> - int if_oerrors;
> - int if_collisions;
> - int if_opackets;
> -};
> -
> -
> -program RSTATPROG {
> - /*
> - * Newest version includes current time and context switching info
> - */
> - version RSTATVERS_TIME {
> - statstime
> - RSTATPROC_STATS(void) = 1;
> -
> - unsigned int
> - RSTATPROC_HAVEDISK(void) = 2;
> - } = 3;
> - /*
> - * Does not have current time
> - */
> - version RSTATVERS_SWTCH {
> - statsswtch
> - RSTATPROC_STATS(void) = 1;
> -
> - unsigned int
> - RSTATPROC_HAVEDISK(void) = 2;
> - } = 2;
> - /*
> - * Old version has no info about current time or context switching
> - */
> - version RSTATVERS_ORIG {
> - stats
> - RSTATPROC_STATS(void) = 1;
> -
> - unsigned int
> - RSTATPROC_HAVEDISK(void) = 2;
> - } = 1;
> -} = 100001;
> diff --git a/sunrpc/rpcsvc/rusers.x b/sunrpc/rpcsvc/rusers.x
> deleted file mode 100644
> index 5bbfe97e79..0000000000
> --- a/sunrpc/rpcsvc/rusers.x
> +++ /dev/null
> @@ -1,228 +0,0 @@
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -%/*
> -% * Find out about remote users
> -% */
> -
> -const RUSERS_MAXUSERLEN = 32;
> -const RUSERS_MAXLINELEN = 32;
> -const RUSERS_MAXHOSTLEN = 257;
> -
> -struct rusers_utmp {
> - string ut_user<RUSERS_MAXUSERLEN>; /* aka ut_name */
> - string ut_line<RUSERS_MAXLINELEN>; /* device */
> - string ut_host<RUSERS_MAXHOSTLEN>; /* host user logged on from */
> - int ut_type; /* type of entry */
> - int ut_time; /* time entry was made */
> - unsigned int ut_idle; /* minutes idle */
> -};
> -
> -typedef rusers_utmp utmp_array<>;
> -
> -#ifdef RPC_HDR
> -%
> -%/*
> -% * Values for ut_type field above.
> -% */
> -#endif
> -const RUSERS_EMPTY = 0;
> -const RUSERS_RUN_LVL = 1;
> -const RUSERS_BOOT_TIME = 2;
> -const RUSERS_OLD_TIME = 3;
> -const RUSERS_NEW_TIME = 4;
> -const RUSERS_INIT_PROCESS = 5;
> -const RUSERS_LOGIN_PROCESS = 6;
> -const RUSERS_USER_PROCESS = 7;
> -const RUSERS_DEAD_PROCESS = 8;
> -const RUSERS_ACCOUNTING = 9;
> -
> -program RUSERSPROG {
> -
> - version RUSERSVERS_3 {
> - int
> - RUSERSPROC_NUM(void) = 1;
> -
> - utmp_array
> - RUSERSPROC_NAMES(void) = 2;
> -
> - utmp_array
> - RUSERSPROC_ALLNAMES(void) = 3;
> - } = 3;
> -
> -} = 100002;
> -
> -#ifdef RPC_HDR
> -%
> -%
> -%#ifdef __cplusplus
> -%extern "C" {
> -%#endif
> -%
> -%#include <rpc/xdr.h>
> -%
> -%/*
> -% * The following structures are used by version 2 of the rusersd protocol.
> -% * They were not developed with rpcgen, so they do not appear as RPCL.
> -% */
> -%
> -%#define RUSERSVERS_IDLE 2
> -%#define RUSERSVERS 3 /* current version */
> -%#define MAXUSERS 100
> -%
> -%/*
> -% * This is the structure used in version 2 of the rusersd RPC service.
> -% * It corresponds to the utmp structure for BSD systems.
> -% */
> -%struct ru_utmp {
> -% char ut_line[8]; /* tty name */
> -% char ut_name[8]; /* user id */
> -% char ut_host[16]; /* host name, if remote */
> -% long int ut_time; /* time on */
> -%};
> -%
> -%struct utmparr {
> -% struct ru_utmp **uta_arr;
> -% int uta_cnt;
> -%};
> -%typedef struct utmparr utmparr;
> -%
> -%extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW;
> -%
> -%struct utmpidle {
> -% struct ru_utmp ui_utmp;
> -% unsigned int ui_idle;
> -%};
> -%
> -%struct utmpidlearr {
> -% struct utmpidle **uia_arr;
> -% int uia_cnt;
> -%};
> -%
> -%extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW;
> -%
> -%#ifdef __cplusplus
> -%}
> -%#endif
> -#endif
> -
> -
> -#ifdef RPC_XDR
> -%bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp);
> -%
> -%bool_t
> -%xdr_utmp (XDR *xdrs, struct ru_utmp *objp)
> -%{
> -% /* Since the fields are char foo [xxx], we should not free them. */
> -% if (xdrs->x_op != XDR_FREE)
> -% {
> -% char *ptr;
> -% unsigned int size;
> -% ptr = objp->ut_line;
> -% size = sizeof (objp->ut_line);
> -% if (!xdr_bytes (xdrs, &ptr, &size, size)) {
> -% return (FALSE);
> -% }
> -% ptr = objp->ut_name;
> -% size = sizeof (objp->ut_name);
> -% if (!xdr_bytes (xdrs, &ptr, &size, size)) {
> -% return (FALSE);
> -% }
> -% ptr = objp->ut_host;
> -% size = sizeof (objp->ut_host);
> -% if (!xdr_bytes (xdrs, &ptr, &size, size)) {
> -% return (FALSE);
> -% }
> -% }
> -% if (!xdr_long(xdrs, &objp->ut_time)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -%
> -%bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp);
> -%
> -%bool_t
> -%xdr_utmpptr (XDR *xdrs, struct ru_utmp **objpp)
> -%{
> -% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
> -% (xdrproc_t) xdr_utmp)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -%
> -%bool_t
> -%xdr_utmparr (XDR *xdrs, struct utmparr *objp)
> -%{
> -% if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
> -% MAXUSERS, sizeof(struct ru_utmp *),
> -% (xdrproc_t) xdr_utmpptr)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -%
> -%bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp);
> -%
> -%bool_t
> -%xdr_utmpidle (XDR *xdrs, struct utmpidle *objp)
> -%{
> -% if (!xdr_utmp(xdrs, &objp->ui_utmp)) {
> -% return (FALSE);
> -% }
> -% if (!xdr_u_int(xdrs, &objp->ui_idle)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -%
> -%bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp);
> -%
> -%bool_t
> -%xdr_utmpidleptr (XDR *xdrs, struct utmpidle **objpp)
> -%{
> -% if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
> -% (xdrproc_t) xdr_utmpidle)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -%
> -%bool_t
> -%xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp)
> -%{
> -% if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
> -% MAXUSERS, sizeof(struct utmpidle *),
> -% (xdrproc_t) xdr_utmpidleptr)) {
> -% return (FALSE);
> -% }
> -% return (TRUE);
> -%}
> -#endif
> diff --git a/sunrpc/rpcsvc/sm_inter.x b/sunrpc/rpcsvc/sm_inter.x
> deleted file mode 100644
> index 767f0e0856..0000000000
> --- a/sunrpc/rpcsvc/sm_inter.x
> +++ /dev/null
> @@ -1,110 +0,0 @@
> -/*
> - * Status monitor protocol specification
> - * Copyright (c) 2010, Oracle America, Inc.
> - *
> - * 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 the "Oracle America, 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.
> - */
> -
> -
> -program SM_PROG {
> - version SM_VERS {
> - /* res_stat = stat_succ if status monitor agrees to monitor */
> - /* res_stat = stat_fail if status monitor cannot monitor */
> - /* if res_stat == stat_succ, state = state number of site sm_name */
> - struct sm_stat_res SM_STAT(struct sm_name) = 1;
> -
> - /* res_stat = stat_succ if status monitor agrees to monitor */
> - /* res_stat = stat_fail if status monitor cannot monitor */
> - /* stat consists of state number of local site */
> - struct sm_stat_res SM_MON(struct mon) = 2;
> -
> - /* stat consists of state number of local site */
> - struct sm_stat SM_UNMON(struct mon_id) = 3;
> -
> - /* stat consists of state number of local site */
> - struct sm_stat SM_UNMON_ALL(struct my_id) = 4;
> -
> - void SM_SIMU_CRASH(void) = 5;
> -
> - } = 1;
> -} = 100024;
> -
> -const SM_MAXSTRLEN = 1024;
> -
> -struct sm_name {
> - string mon_name<SM_MAXSTRLEN>;
> -};
> -
> -struct my_id {
> - string my_name<SM_MAXSTRLEN>; /* name of the site initiating the monitoring request*/
> - int my_prog; /* rpc program # of the requesting process */
> - int my_vers; /* rpc version # of the requesting process */
> - int my_proc; /* rpc procedure # of the requesting process */
> -};
> -
> -struct mon_id {
> - string mon_name<SM_MAXSTRLEN>; /* name of the site to be monitored */
> - struct my_id my_id;
> -};
> -
> -
> -struct mon{
> - struct mon_id mon_id;
> - opaque priv[16]; /* private information to store at monitor for requesting process */
> -};
> -
> -
> -/*
> - * state # of status monitor monotonically increases each time
> - * status of the site changes:
> - * an even number (>= 0) indicates the site is down and
> - * an odd number (> 0) indicates the site is up;
> - */
> -struct sm_stat {
> - int state; /* state # of status monitor */
> -};
> -
> -enum res {
> - stat_succ = 0, /* status monitor agrees to monitor */
> - stat_fail = 1 /* status monitor cannot monitor */
> -};
> -
> -struct sm_stat_res {
> - res res_stat;
> - int state;
> -};
> -
> -/*
> - * structure of the status message sent back by the status monitor
> - * when monitor site status changes
> - */
> -struct status {
> - string mon_name<SM_MAXSTRLEN>;
> - int state;
> - opaque priv[16]; /* stored private information */
> -};
> diff --git a/sunrpc/rpcsvc/spray.x b/sunrpc/rpcsvc/spray.x
> deleted file mode 100644
> index 68b7c48442..0000000000
> --- a/sunrpc/rpcsvc/spray.x
> +++ /dev/null
> @@ -1,84 +0,0 @@
> -/* @(#)spray.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * Spray a server with packets
> - * Useful for testing flakiness of network interfaces
> - */
> -
> -const SPRAYMAX = 8845; /* max amount can spray */
> -
> -/*
> - * GMT since 0:00, 1 January 1970
> - */
> -struct spraytimeval {
> - unsigned int sec;
> - unsigned int usec;
> -};
> -
> -/*
> - * spray statistics
> - */
> -struct spraycumul {
> - unsigned int counter;
> - spraytimeval clock;
> -};
> -
> -/*
> - * spray data
> - */
> -typedef opaque sprayarr<SPRAYMAX>;
> -
> -program SPRAYPROG {
> - version SPRAYVERS {
> - /*
> - * Just throw away the data and increment the counter
> - * This call never returns, so the client should always
> - * time it out.
> - */
> - void
> - SPRAYPROC_SPRAY(sprayarr) = 1;
> -
> - /*
> - * Get the value of the counter and elapsed time since
> - * last CLEAR.
> - */
> - spraycumul
> - SPRAYPROC_GET(void) = 2;
> -
> - /*
> - * Clear the counter and reset the elapsed time
> - */
> - void
> - SPRAYPROC_CLEAR(void) = 3;
> - } = 1;
> -} = 100012;
> diff --git a/sunrpc/rpcsvc/yppasswd.x b/sunrpc/rpcsvc/yppasswd.x
> deleted file mode 100644
> index 34e3efe3f9..0000000000
> --- a/sunrpc/rpcsvc/yppasswd.x
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/* @(#)yppasswd.x 2.1 88/08/01 4.0 RPCSRC */
> -
> -/*
> - * Copyright (c) 2010, Oracle America, Inc.
> - * 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 the "Oracle America, 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.
> - */
> -
> -/*
> - * YP password update protocol
> - * Requires unix authentication
> - */
> -program YPPASSWDPROG {
> - version YPPASSWDVERS {
> - /*
> - * Update my passwd entry
> - */
> - int
> - YPPASSWDPROC_UPDATE(yppasswd) = 1;
> - } = 1;
> -} = 100009;
> -
> -
> -struct passwd {
> - string pw_name<>; /* username */
> - string pw_passwd<>; /* encrypted password */
> - int pw_uid; /* user id */
> - int pw_gid; /* group id */
> - string pw_gecos<>; /* in real life name */
> - string pw_dir<>; /* home directory */
> - string pw_shell<>; /* default shell */
> -};
> -
> -struct yppasswd {
> - string oldpass<>; /* unencrypted old password */
> - passwd newpw; /* new passwd entry */
> -};
OK. Files removed.
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 6e847cff8a..0d1ce97229 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -265,9 +265,6 @@ GLIBC_2.32 __iswupper_l F
> GLIBC_2.32 __iswxdigit_l F
> GLIBC_2.32 __isxdigit_l F
> GLIBC_2.32 __ivaliduser F
> -GLIBC_2.32 __key_decryptsession_pk_LOCAL D 0x4
> -GLIBC_2.32 __key_encryptsession_pk_LOCAL D 0x4
> -GLIBC_2.32 __key_gendes_LOCAL D 0x4
> GLIBC_2.32 __libc_allocate_rtsig F
> GLIBC_2.32 __libc_calloc F
> GLIBC_2.32 __libc_current_sigrtmax F
> @@ -348,10 +345,6 @@ GLIBC_2.32 __res_nclose F
> GLIBC_2.32 __res_ninit F
> GLIBC_2.32 __res_randomid F
> GLIBC_2.32 __res_state F
> -GLIBC_2.32 __rpc_thread_createerr F
> -GLIBC_2.32 __rpc_thread_svc_fdset F
> -GLIBC_2.32 __rpc_thread_svc_max_pollfd F
> -GLIBC_2.32 __rpc_thread_svc_pollfd F
> GLIBC_2.32 __rseq_abi T 0x20
> GLIBC_2.32 __sbrk F
> GLIBC_2.32 __sched_cpualloc F
> @@ -494,7 +487,6 @@ GLIBC_2.32 __xpg_sigpause F
> GLIBC_2.32 __xpg_strerror_r F
> GLIBC_2.32 __xstat F
> GLIBC_2.32 __xstat64 F
> -GLIBC_2.32 _authenticate F
> GLIBC_2.32 _dl_mcount_wrapper F
> GLIBC_2.32 _dl_mcount_wrapper_check F
> GLIBC_2.32 _environ D 0x4
> @@ -508,7 +500,6 @@ GLIBC_2.32 _mcount F
> GLIBC_2.32 _nl_default_dirname D 0x12
> GLIBC_2.32 _nl_domain_bindings D 0x4
> GLIBC_2.32 _nl_msg_cat_cntr D 0x4
> -GLIBC_2.32 _null_auth D 0xc
> GLIBC_2.32 _obstack_allocated_p F
> GLIBC_2.32 _obstack_begin F
> GLIBC_2.32 _obstack_begin_1 F
> @@ -517,8 +508,6 @@ GLIBC_2.32 _obstack_memory_used F
> GLIBC_2.32 _obstack_newchunk F
> GLIBC_2.32 _res D 0x200
> GLIBC_2.32 _res_hconf D 0x30
> -GLIBC_2.32 _rpc_dtablesize F
> -GLIBC_2.32 _seterr_reply F
> GLIBC_2.32 _setjmp F
> GLIBC_2.32 _tolower F
> GLIBC_2.32 _toupper F
> @@ -566,12 +555,6 @@ GLIBC_2.32 atof F
> GLIBC_2.32 atoi F
> GLIBC_2.32 atol F
> GLIBC_2.32 atoll F
> -GLIBC_2.32 authdes_create F
> -GLIBC_2.32 authdes_getucred F
> -GLIBC_2.32 authdes_pk_create F
> -GLIBC_2.32 authnone_create F
> -GLIBC_2.32 authunix_create F
> -GLIBC_2.32 authunix_create_default F
> GLIBC_2.32 backtrace F
> GLIBC_2.32 backtrace_symbols F
> GLIBC_2.32 backtrace_symbols_fd F
> @@ -591,14 +574,12 @@ GLIBC_2.32 c16rtomb F
> GLIBC_2.32 c32rtomb F
> GLIBC_2.32 cacheflush F
> GLIBC_2.32 calloc F
> -GLIBC_2.32 callrpc F
> GLIBC_2.32 canonicalize_file_name F
> GLIBC_2.32 capget F
> GLIBC_2.32 capset F
> GLIBC_2.32 catclose F
> GLIBC_2.32 catgets F
> GLIBC_2.32 catopen F
> -GLIBC_2.32 cbc_crypt F
> GLIBC_2.32 cfgetispeed F
> GLIBC_2.32 cfgetospeed F
> GLIBC_2.32 cfmakeraw F
> @@ -613,19 +594,6 @@ GLIBC_2.32 chroot F
> GLIBC_2.32 clearenv F
> GLIBC_2.32 clearerr F
> GLIBC_2.32 clearerr_unlocked F
> -GLIBC_2.32 clnt_broadcast F
> -GLIBC_2.32 clnt_create F
> -GLIBC_2.32 clnt_pcreateerror F
> -GLIBC_2.32 clnt_perrno F
> -GLIBC_2.32 clnt_perror F
> -GLIBC_2.32 clnt_spcreateerror F
> -GLIBC_2.32 clnt_sperrno F
> -GLIBC_2.32 clnt_sperror F
> -GLIBC_2.32 clntraw_create F
> -GLIBC_2.32 clnttcp_create F
> -GLIBC_2.32 clntudp_bufcreate F
> -GLIBC_2.32 clntudp_create F
> -GLIBC_2.32 clntunix_create F
> GLIBC_2.32 clock F
> GLIBC_2.32 clock_adjtime F
> GLIBC_2.32 clock_getcpuclockid F
> @@ -654,7 +622,6 @@ GLIBC_2.32 daylight D 0x4
> GLIBC_2.32 dcgettext F
> GLIBC_2.32 dcngettext F
> GLIBC_2.32 delete_module F
> -GLIBC_2.32 des_setparity F
> GLIBC_2.32 dgettext F
> GLIBC_2.32 difftime F
> GLIBC_2.32 dirfd F
> @@ -671,7 +638,6 @@ GLIBC_2.32 dup3 F
> GLIBC_2.32 duplocale F
> GLIBC_2.32 dysize F
> GLIBC_2.32 eaccess F
> -GLIBC_2.32 ecb_crypt F
> GLIBC_2.32 ecvt F
> GLIBC_2.32 ecvt_r F
> GLIBC_2.32 endaliasent F
> @@ -863,7 +829,6 @@ GLIBC_2.32 gai_strerror F
> GLIBC_2.32 gcvt F
> GLIBC_2.32 get_avphys_pages F
> GLIBC_2.32 get_current_dir_name F
> -GLIBC_2.32 get_myaddress F
> GLIBC_2.32 get_nprocs F
> GLIBC_2.32 get_nprocs_conf F
> GLIBC_2.32 get_phys_pages F
> @@ -933,7 +898,6 @@ GLIBC_2.32 getnetent F
> GLIBC_2.32 getnetent_r F
> GLIBC_2.32 getnetgrent F
> GLIBC_2.32 getnetgrent_r F
> -GLIBC_2.32 getnetname F
> GLIBC_2.32 getopt F
> GLIBC_2.32 getopt_long F
> GLIBC_2.32 getopt_long_only F
> @@ -952,7 +916,6 @@ GLIBC_2.32 getprotobynumber_r F
> GLIBC_2.32 getprotoent F
> GLIBC_2.32 getprotoent_r F
> GLIBC_2.32 getpt F
> -GLIBC_2.32 getpublickey F
> GLIBC_2.32 getpw F
> GLIBC_2.32 getpwent F
> GLIBC_2.32 getpwent_r F
> @@ -971,10 +934,8 @@ GLIBC_2.32 getrpcbynumber F
> GLIBC_2.32 getrpcbynumber_r F
> GLIBC_2.32 getrpcent F
> GLIBC_2.32 getrpcent_r F
> -GLIBC_2.32 getrpcport F
> GLIBC_2.32 getrusage F
> GLIBC_2.32 gets F
> -GLIBC_2.32 getsecretkey F
> GLIBC_2.32 getservbyname F
> GLIBC_2.32 getservbyname_r F
> GLIBC_2.32 getservbyport F
> @@ -1043,7 +1004,6 @@ GLIBC_2.32 hcreate_r F
> GLIBC_2.32 hdestroy F
> GLIBC_2.32 hdestroy_r F
> GLIBC_2.32 herror F
> -GLIBC_2.32 host2netname F
> GLIBC_2.32 hsearch F
> GLIBC_2.32 hsearch_r F
> GLIBC_2.32 hstrerror F
> @@ -1166,15 +1126,6 @@ GLIBC_2.32 isxdigit F
> GLIBC_2.32 isxdigit_l F
> GLIBC_2.32 jrand48 F
> GLIBC_2.32 jrand48_r F
> -GLIBC_2.32 key_decryptsession F
> -GLIBC_2.32 key_decryptsession_pk F
> -GLIBC_2.32 key_encryptsession F
> -GLIBC_2.32 key_encryptsession_pk F
> -GLIBC_2.32 key_gendes F
> -GLIBC_2.32 key_get_conv F
> -GLIBC_2.32 key_secretkey_is_set F
> -GLIBC_2.32 key_setnet F
> -GLIBC_2.32 key_setsecret F
> GLIBC_2.32 kill F
> GLIBC_2.32 killpg F
> GLIBC_2.32 klogctl F
> @@ -1291,8 +1242,6 @@ GLIBC_2.32 munmap F
> GLIBC_2.32 muntrace F
> GLIBC_2.32 name_to_handle_at F
> GLIBC_2.32 nanosleep F
> -GLIBC_2.32 netname2host F
> -GLIBC_2.32 netname2user F
> GLIBC_2.32 newlocale F
> GLIBC_2.32 nftw F
> GLIBC_2.32 nftw64 F
> @@ -1327,7 +1276,6 @@ GLIBC_2.32 opterr D 0x4
> GLIBC_2.32 optind D 0x4
> GLIBC_2.32 optopt D 0x4
> GLIBC_2.32 parse_printf_format F
> -GLIBC_2.32 passwd2des F
> GLIBC_2.32 pathconf F
> GLIBC_2.32 pause F
> GLIBC_2.32 pclose F
> @@ -1341,11 +1289,6 @@ GLIBC_2.32 pkey_free F
> GLIBC_2.32 pkey_get F
> GLIBC_2.32 pkey_mprotect F
> GLIBC_2.32 pkey_set F
> -GLIBC_2.32 pmap_getmaps F
> -GLIBC_2.32 pmap_getport F
> -GLIBC_2.32 pmap_rmtcall F
> -GLIBC_2.32 pmap_set F
> -GLIBC_2.32 pmap_unset F
> GLIBC_2.32 poll F
> GLIBC_2.32 popen F
> GLIBC_2.32 posix_fadvise F
> @@ -1516,7 +1459,6 @@ GLIBC_2.32 register_printf_function F
> GLIBC_2.32 register_printf_modifier F
> GLIBC_2.32 register_printf_specifier F
> GLIBC_2.32 register_printf_type F
> -GLIBC_2.32 registerrpc F
> GLIBC_2.32 remap_file_pages F
> GLIBC_2.32 remove F
> GLIBC_2.32 removexattr F
> @@ -1532,11 +1474,9 @@ GLIBC_2.32 rexec_af F
> GLIBC_2.32 rexecoptions D 0x4
> GLIBC_2.32 rindex F
> GLIBC_2.32 rmdir F
> -GLIBC_2.32 rpc_createerr D 0x10
> GLIBC_2.32 rpmatch F
> GLIBC_2.32 rresvport F
> GLIBC_2.32 rresvport_af F
> -GLIBC_2.32 rtime F
> GLIBC_2.32 ruserok F
> GLIBC_2.32 ruserok_af F
> GLIBC_2.32 ruserpass F
> @@ -1772,34 +1712,6 @@ GLIBC_2.32 strverscmp F
> GLIBC_2.32 strxfrm F
> GLIBC_2.32 strxfrm_l F
> GLIBC_2.32 stty F
> -GLIBC_2.32 svc_exit F
> -GLIBC_2.32 svc_fdset D 0x80
> -GLIBC_2.32 svc_getreq F
> -GLIBC_2.32 svc_getreq_common F
> -GLIBC_2.32 svc_getreq_poll F
> -GLIBC_2.32 svc_getreqset F
> -GLIBC_2.32 svc_max_pollfd D 0x4
> -GLIBC_2.32 svc_pollfd D 0x4
> -GLIBC_2.32 svc_register F
> -GLIBC_2.32 svc_run F
> -GLIBC_2.32 svc_sendreply F
> -GLIBC_2.32 svc_unregister F
> -GLIBC_2.32 svcauthdes_stats D 0xc
> -GLIBC_2.32 svcerr_auth F
> -GLIBC_2.32 svcerr_decode F
> -GLIBC_2.32 svcerr_noproc F
> -GLIBC_2.32 svcerr_noprog F
> -GLIBC_2.32 svcerr_progvers F
> -GLIBC_2.32 svcerr_systemerr F
> -GLIBC_2.32 svcerr_weakauth F
> -GLIBC_2.32 svcfd_create F
> -GLIBC_2.32 svcraw_create F
> -GLIBC_2.32 svctcp_create F
> -GLIBC_2.32 svcudp_bufcreate F
> -GLIBC_2.32 svcudp_create F
> -GLIBC_2.32 svcudp_enablecache F
> -GLIBC_2.32 svcunix_create F
> -GLIBC_2.32 svcunixfd_create F
> GLIBC_2.32 swab F
> GLIBC_2.32 swapcontext F
> GLIBC_2.32 swapoff F
> @@ -1890,7 +1802,6 @@ GLIBC_2.32 unshare F
> GLIBC_2.32 updwtmp F
> GLIBC_2.32 updwtmpx F
> GLIBC_2.32 uselocale F
> -GLIBC_2.32 user2netname F
> GLIBC_2.32 usleep F
> GLIBC_2.32 utime F
> GLIBC_2.32 utimensat F
> @@ -2010,76 +1921,3 @@ GLIBC_2.32 wprintf F
> GLIBC_2.32 write F
> GLIBC_2.32 writev F
> GLIBC_2.32 wscanf F
> -GLIBC_2.32 xdecrypt F
> -GLIBC_2.32 xdr_accepted_reply F
> -GLIBC_2.32 xdr_array F
> -GLIBC_2.32 xdr_authdes_cred F
> -GLIBC_2.32 xdr_authdes_verf F
> -GLIBC_2.32 xdr_authunix_parms F
> -GLIBC_2.32 xdr_bool F
> -GLIBC_2.32 xdr_bytes F
> -GLIBC_2.32 xdr_callhdr F
> -GLIBC_2.32 xdr_callmsg F
> -GLIBC_2.32 xdr_char F
> -GLIBC_2.32 xdr_cryptkeyarg F
> -GLIBC_2.32 xdr_cryptkeyarg2 F
> -GLIBC_2.32 xdr_cryptkeyres F
> -GLIBC_2.32 xdr_des_block F
> -GLIBC_2.32 xdr_double F
> -GLIBC_2.32 xdr_enum F
> -GLIBC_2.32 xdr_float F
> -GLIBC_2.32 xdr_free F
> -GLIBC_2.32 xdr_getcredres F
> -GLIBC_2.32 xdr_hyper F
> -GLIBC_2.32 xdr_int F
> -GLIBC_2.32 xdr_int16_t F
> -GLIBC_2.32 xdr_int32_t F
> -GLIBC_2.32 xdr_int64_t F
> -GLIBC_2.32 xdr_int8_t F
> -GLIBC_2.32 xdr_key_netstarg F
> -GLIBC_2.32 xdr_key_netstres F
> -GLIBC_2.32 xdr_keybuf F
> -GLIBC_2.32 xdr_keystatus F
> -GLIBC_2.32 xdr_long F
> -GLIBC_2.32 xdr_longlong_t F
> -GLIBC_2.32 xdr_netnamestr F
> -GLIBC_2.32 xdr_netobj F
> -GLIBC_2.32 xdr_opaque F
> -GLIBC_2.32 xdr_opaque_auth F
> -GLIBC_2.32 xdr_pmap F
> -GLIBC_2.32 xdr_pmaplist F
> -GLIBC_2.32 xdr_pointer F
> -GLIBC_2.32 xdr_quad_t F
> -GLIBC_2.32 xdr_reference F
> -GLIBC_2.32 xdr_rejected_reply F
> -GLIBC_2.32 xdr_replymsg F
> -GLIBC_2.32 xdr_rmtcall_args F
> -GLIBC_2.32 xdr_rmtcallres F
> -GLIBC_2.32 xdr_short F
> -GLIBC_2.32 xdr_sizeof F
> -GLIBC_2.32 xdr_string F
> -GLIBC_2.32 xdr_u_char F
> -GLIBC_2.32 xdr_u_hyper F
> -GLIBC_2.32 xdr_u_int F
> -GLIBC_2.32 xdr_u_long F
> -GLIBC_2.32 xdr_u_longlong_t F
> -GLIBC_2.32 xdr_u_quad_t F
> -GLIBC_2.32 xdr_u_short F
> -GLIBC_2.32 xdr_uint16_t F
> -GLIBC_2.32 xdr_uint32_t F
> -GLIBC_2.32 xdr_uint64_t F
> -GLIBC_2.32 xdr_uint8_t F
> -GLIBC_2.32 xdr_union F
> -GLIBC_2.32 xdr_unixcred F
> -GLIBC_2.32 xdr_vector F
> -GLIBC_2.32 xdr_void F
> -GLIBC_2.32 xdr_wrapstring F
> -GLIBC_2.32 xdrmem_create F
> -GLIBC_2.32 xdrrec_create F
> -GLIBC_2.32 xdrrec_endofrecord F
> -GLIBC_2.32 xdrrec_eof F
> -GLIBC_2.32 xdrrec_skiprecord F
> -GLIBC_2.32 xdrstdio_create F
> -GLIBC_2.32 xencrypt F
> -GLIBC_2.32 xprt_register F
> -GLIBC_2.32 xprt_unregister F
>
OK. ARC port ABI cleanup before release. It looks like everything was removed.
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 9+ messages in thread