rpcgen - fall back to looking for cpp in system path
authorAllan McRae <allan@archlinux.org>
Sat, 4 Aug 2012 02:19:09 +0000 (12:19 +1000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 7 Aug 2012 23:17:02 +0000 (19:17 -0400)
Fall back to the system cpp when /lib/cpp is not present. Removes
searching for /usr/ccs/lib/cpp which is not supported on any system that
uses glibc.

ChangeLog
sunrpc/rpc_main.c

index b2c8cdf..8078f8a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-08-07     Allan McRae     <allan@archlinux.org>
+
+       [BZ #14303]
+       * sunrpc/rpc_main.c (SVR4_CPP): Remove.
+       (SUNOS_CPP): Likewise.
+       (find_cpp): Fall back to selecting system cpp when /lib/cpp is
+       not found.
+       (open_input): Call CPP using execvp.
+
 2012-08-07  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/kernel-features.h
index 06d951a..2103b10 100644 (file)
@@ -75,12 +75,9 @@ struct commandline
 
 static const char *cmdname;
 
-#define SVR4_CPP "/usr/ccs/lib/cpp"
-#define SUNOS_CPP "/lib/cpp"
-
 static const char *svcclosetime = "120";
 static int cppDefined; /* explicit path for C preprocessor */
-static const char *CPP = SUNOS_CPP;
+static const char *CPP = "/lib/cpp";
 static const char CPPFLAGS[] = "-C";
 static char *pathbuf;
 static int cpp_pid;
@@ -327,23 +324,17 @@ find_cpp (void)
 {
   struct stat buf;
 
-  if (stat (CPP, &buf) < 0)
-    {                          /* /lib/cpp or explicit cpp does not exist */
-      if (cppDefined)
-       {
-         fprintf (stderr, _ ("cannot find C preprocessor: %s \n"), CPP);
-         crash ();
-       }
-      else
-       {                       /* try the other one */
-         CPP = SVR4_CPP;
-         if (stat (CPP, &buf) < 0)
-           {                   /* can't find any cpp */
-             fputs (_ ("cannot find any C preprocessor (cpp)\n"), stdout);
-             crash ();
-           }
-       }
+  if (stat (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";
 }
 
 /*
@@ -374,8 +365,13 @@ open_input (const char *infile, const char *define)
       close (1);
       dup2 (pd[1], 1);
       close (pd[0]);
-      execv (arglist[0], (char **) arglist);
-      perror ("execv");
+      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");