From 0dee67386c1ef99baee307ab01d20c79739cbc2a Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 21 Oct 1998 15:29:52 +0000 Subject: Update. 1998-10-21 14:38 Ulrich Drepper * sysdeps/unix/sysdep.h (INLINE_SYSCALL): New macro. Simply call __syscall_* function. * sysdeps/unix/sysv/linux/aio_sigqueue.c: Use INLINE_SYSCALL instead of calling __syscall_* function. * sysdeps/unix/sysv/linux/fxstat.c: Likewise. * sysdeps/unix/sysv/linux/fxstat64.c: Likewise. * sysdeps/unix/sysv/linux/getcwd.c: Likewise. * sysdeps/unix/sysv/linux/getdents.c: Likewise. * sysdeps/unix/sysv/linux/getpriority.c: Likewise. * sysdeps/unix/sysv/linux/getresgid.c: Likewise. * sysdeps/unix/sysv/linux/getresuid.c: Likewise. * sysdeps/unix/sysv/linux/lxstat.c: Likewise. * sysdeps/unix/sysv/linux/lxstat64.c: Likewise. * sysdeps/unix/sysv/linux/poll.c: Likewise. * sysdeps/unix/sysv/linux/pread.c: Likewise. * sysdeps/unix/sysv/linux/pread64.c: Likewise. * sysdeps/unix/sysv/linux/ptrace.c: Likewise. * sysdeps/unix/sysv/linux/pwrite.c: Likewise. * sysdeps/unix/sysv/linux/pwrite64.c: Likewise. * sysdeps/unix/sysv/linux/readv.c: Likewise. * sysdeps/unix/sysv/linux/reboot.c: Likewise. * sysdeps/unix/sysv/linux/sigaction.c: Likewise. * sysdeps/unix/sysv/linux/siglist.h: Likewise. * sysdeps/unix/sysv/linux/sigpending.c: Likewise. * sysdeps/unix/sysv/linux/sigprocmask.c: Likewise. * sysdeps/unix/sysv/linux/sigqueue.c: Likewise. * sysdeps/unix/sysv/linux/sigsuspend.c: Likewise. * sysdeps/unix/sysv/linux/sigtimedwait.c: Likewise. * sysdeps/unix/sysv/linux/sigwaitinfo.c: Likewise. * sysdeps/unix/sysv/linux/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/sysctl.c: Likewise. * sysdeps/unix/sysv/linux/ustat.c: Likewise. * sysdeps/unix/sysv/linux/writev.c: Likewise. * sysdeps/unix/sysv/linux/xmknod.c: Likewise. * sysdeps/unix/sysv/linux/xstat.c: Likewise. * sysdeps/unix/sysv/linux/xstat64.c: Likewise. * sysdeps/unix/sysv/linux/i386/chown.c: Likewise. * sysdeps/unix/sysv/linux/i386/getgroups.c: Likewise. * sysdeps/unix/sysv/linux/i386/setfsgid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setfsuid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setgid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setgroups.c: Likewise. * sysdeps/unix/sysv/linux/i386/setresgid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setresuid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setuid.c: Likewise. * sysdeps/unix/sysv/linux/i386/sysdep.h: Define INLINE_SYSCALL using inline assembler. * sysdeps/unix/sysv/linux/i386/syscalls.list: Remove various __syscall_* definitions. * sysdeps/unix/sysv/linux/syscalls.list: Move various __syscall_* definitions to... * sysdeps/unix/sysv/linux/alpha/syscalls.list: ...here... * sysdeps/unix/sysv/linux/arm/syscalls.list: ...and here... * sysdeps/unix/sysv/linux/m68k/syscalls.list: ...and here... * sysdeps/unix/sysv/linux/mips/syscalls.list: ...and here... * sysdeps/unix/sysv/linux/powerpc/syscalls.list: ...and here... * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: ...and here... * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: ...and here. * sysdeps/unix/sysv/linux/i386/Makefile [subdir=misc] (sysdep_routines): Remove s_pread64 and s_pwrite64. * sysdeps/unix/sysv/linux/i386/pread.c: New file. * sysdeps/unix/sysv/linux/i386/pread64.c: New file. * sysdeps/unix/sysv/linux/i386/pwrite.c: New file. * sysdeps/unix/sysv/linux/i386/pwrite64.c: New file. * sysdeps/unix/sysv/linux/i386/s_pread64.S: Removed. * sysdeps/unix/sysv/linux/i386/s_pwrite64.S: Removed. 1998-10-21 Andreas Jaeger * sysdeps/unix/sysv/linux/siglist.h: Fix some typos in these files and bring them in synch. * sysdeps/unix/siglist.c: Likewise. Reported by Vladimir Michl [PR libc/832]. 1998-10-20 Andreas Schwab * sysdeps/unix/sysv/linux/i386/setresuid.c: Allow -1 as arguments. * sysdeps/unix/sysv/linux/i386/setresgid.c: Likewise. * sysdeps/unix/sysv/linux/i386/setreuid.c: New file. * sysdeps/unix/sysv/linux/i386/setregid.c: New file. * sysdeps/unix/sysv/linux/m68k/setreuid.c: New file. * sysdeps/unix/sysv/linux/m68k/setregid.c: New file. * sysdeps/unix/sysv/linux/arm/setreuid.c: New file. * sysdeps/unix/sysv/linux/arm/setregid.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/setreuid.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/setregid.c: New file. * sysdeps/unix/sysv/linux/i386/syscalls.list: Add s_setreuid and s_setregid. * sysdeps/unix/sysv/linux/m68k/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/arm/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Likewise. 1998-10-20 Andreas Schwab * sunrpc/rpc_main.c (close_output, close_input): New functions. (c_output, h_output, s_output, l_output, t_output, svc_output, clnt_output, mkfile_output): Call them at the end. 1998-10-19 Andreas Schwab * db/Makefile (LDFLAGS-db1.so): New variable, to avoid duplicating link command. 1998-10-18 Zack Weinberg * sysdeps/unix/opendir.c: Check at runtime for kernel support for O_DIRECTORY. 1998-10-20 H.J. Lu * sysdeps/unix/sysv/linux/i386/setresuid.c (__setresuid): Fix argument types. --- sunrpc/rpc_main.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'sunrpc') diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c index a5249e3df7..6cdef73d79 100644 --- a/sunrpc/rpc_main.c +++ b/sunrpc/rpc_main.c @@ -47,6 +47,7 @@ const char main_rcsid[] = #include #include #include +#include #include "rpc_parse.h" #include "rpc_util.h" #include "rpc_scan.h" @@ -82,6 +83,7 @@ static int cppDefined = 0; /* explicit path for C preprocessor */ static const char *CPP = SUNOS_CPP; static char CPPFLAGS[] = "-C"; static char *pathbuf; +static int cpp_pid; static const char *allv[] = { "rpcgen", "-s", "udp", "-s", "tcp", @@ -296,6 +298,18 @@ open_output (const char *infile, const char *outfile) 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: "), cmdname); + perror (outfile ?: ""); + crash (); + } +} + static void add_warning (void) { @@ -354,7 +368,8 @@ open_input (const char *infile, const char *define) perror ("pipe"); exit (1); } - switch (fork ()) + cpp_pid = fork (); + switch (cpp_pid) { case 0: find_cpp (); @@ -384,6 +399,32 @@ open_input (const char *infile, const char *define) } } +/* 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[] = { @@ -454,6 +495,8 @@ c_output (const char *infile, const char *define, int extend, if (extend && tell == ftell (fout)) unlink (outfilename); + close_input (); + close_output (outfilename); } void @@ -620,6 +663,8 @@ h_output (const char *infile, const char *define, int extend, } fprintf (fout, "\n#endif /* !_%s */\n", guard); + close_input (); + close_output (outfilename); } /* @@ -750,6 +795,8 @@ s_output (int argc, const char *argv[], const char *infile, const char *define, } write_rest (); } + close_input (); + close_output (outfilename); } /* @@ -787,6 +834,8 @@ l_output (const char *infile, const char *define, int extend, return; } write_stubs (); + close_input (); + close_output (outfilename); } /* @@ -814,6 +863,8 @@ t_output (const char *infile, const char *define, int extend, return; } write_tables (); + close_input (); + close_output (outfilename); } /* sample routine for the server template */ @@ -851,6 +902,8 @@ svc_output (const char *infile, const char *define, int extend, { unlink (outfilename); } + close_input (); + close_output (outfilename); } @@ -893,6 +946,8 @@ clnt_output (const char *infile, const char *define, int extend, { unlink (outfilename); } + close_input (); + close_output (outfilename); } static char * @@ -995,6 +1050,7 @@ $(LDLIBS) \n\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); } /* -- cgit 1.4.1