X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=tools%2Frpcgen%2Frpc_main.c;h=28aa60c9eb97a583bd8c92cfa3b472ea0b85e22c;hp=9b600f3b134fe4268c88d8b2da289dbf72c3c0a3;hb=a8715bec8bd671135f20fc0422d2a9fc0993758a;hpb=c790e97b504b04aacb914cc8c434977eed218952 diff --git a/tools/rpcgen/rpc_main.c b/tools/rpcgen/rpc_main.c index 9b600f3..28aa60c 100644 --- a/tools/rpcgen/rpc_main.c +++ b/tools/rpcgen/rpc_main.c @@ -1,34 +1,32 @@ /* - * Sun RPC is a product of Sun Microsystems, Inc. and is provided for - * unrestricted use provided that this legend is included on all tape - * media and as a part of the software program in whole or part. Users - * may copy or modify Sun RPC without charge, but are not authorized - * to license or distribute it to anyone else except as part of a product or - * program developed by the user or with the express written consent of - * Sun Microsystems, Inc. + * Copyright (c) 2009, Sun Microsystems, Inc. + * All rights reserved. * - * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE - * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * - Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * Sun RPC is provided with no support and without any obligation on the - * part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 + * 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. */ -#ifndef lint +#if 0 static char sccsid[] = "@(#)rpc_main.c 1.30 89/03/30 (C) 1987 SMI"; #endif @@ -45,6 +43,7 @@ static char sccsid[] = "@(#)rpc_main.c 1.30 89/03/30 (C) 1987 SMI"; #include #include #include +#include #include "rpc_parse.h" #include "rpc_util.h" #include "rpc_scan.h" @@ -67,7 +66,6 @@ static char * extendfile(char *file, char *ext); static void open_output(char *infile, char *outfile); static void add_warning(void); static void clear_args(void); -static void find_cpp(void); static void open_input(char *infile, char *define); static int check_nettype(char *name, char **list_to_check); static void c_output(char *infile, char *define, int extend, char *outfile); @@ -293,26 +291,6 @@ clear_args(void) argcount = FIXEDARGS; } -/* make sure that a CPP exists */ -static void -find_cpp(void) -{ - struct stat buf; - - if (stat(CPP, &buf) < 0) { /* SVR4 or explicit cpp does not exist */ - if (cppDefined) { - fprintf(stderr, "cannot find C preprocessor: %s \n", CPP); - crash(); - } else { /* try the other one */ - CPP = SUNOS_CPP; - if (stat(CPP, &buf) < 0) { /* can't find any cpp */ - fprintf(stderr, "cannot find any C preprocessor (cpp)\n"); - crash(); - } - } - } -} - /* * Open input file with given define for C-preprocessor */ @@ -325,8 +303,7 @@ open_input(char *infile, char *define) (void) pipe(pd); switch (fork()) { case 0: - find_cpp(); - putarg(0, CPP); + putarg(0, "cpp"); putarg(1, CPPFLAGS); addarg(define); addarg(infile); @@ -334,7 +311,15 @@ open_input(char *infile, char *define) (void) close(1); (void) dup2(pd[1], 1); (void) close(pd[0]); - execv(arglist[0], arglist); + if (cppDefined) + execv(CPP, arglist); + else { + execvp("cpp", arglist); + if (errno == ENOENT) + execvp(SVR4_CPP, arglist); + if (errno == ENOENT) + execvp(SUNOS_CPP, arglist); + } perror("execv"); exit(1); case -1: @@ -488,6 +473,19 @@ h_output(char *infile, char *define, int extend, char *outfile) f_print(fout, "#include \n\n"); + f_print(fout, "#ifndef IXDR_GET_INT32\n"); + f_print(fout, "#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf))\n"); + f_print(fout, "#endif\n"); + f_print(fout, "#ifndef IXDR_PUT_INT32\n"); + f_print(fout, "#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v))\n"); + f_print(fout, "#endif\n"); + f_print(fout, "#ifndef IXDR_GET_U_INT32\n"); + f_print(fout, "#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf))\n"); + f_print(fout, "#endif\n"); + f_print(fout, "#ifndef IXDR_PUT_U_INT32\n"); + f_print(fout, "#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v))\n"); + f_print(fout, "#endif\n"); + tell = ftell(fout); /* print data definitions */ while ((def = get_definition()) != NULL) { @@ -548,6 +546,9 @@ s_output(int argc, char **argv, char *infile, char *define, int extend, #ifndef linux if( !tirpcflag && inetdflag ) f_print(fout, "#include /* TIOCNOTTY */\n"); +#else + if( !tirpcflag ) + f_print(fout, "#include /* TIOCNOTTY */\n"); #endif if( Cflag && (inetdflag || pmflag ) ) { f_print(fout, "#ifdef __cplusplus\n");