msm: consistency for equally ranked keys
[platform/upstream/rpm.git] / cliutils.c
index 23c6323..5edecc5 100644 (file)
@@ -2,6 +2,7 @@
 #if HAVE_MCHECK_H
 #include <mcheck.h>
 #endif
+#include <errno.h>
 #include <sys/wait.h>
 
 #include <rpm/rpmlog.h>
@@ -44,77 +45,6 @@ void printUsage(poptContext con, FILE * fp, int flags)
        poptPrintUsage(con, fp, flags);
 }
 
-poptContext initCli(const char *ctx, struct poptOption *optionsTable,
-                   int argc, char *argv[])
-{
-    const char *optArg;
-    int arg;
-    poptContext optCon;
-
-#if HAVE_MCHECK_H && HAVE_MTRACE
-    mtrace();   /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */
-#endif
-    
-#if defined(ENABLE_NLS)
-    /* set up the correct locale */
-    (void) setlocale(LC_ALL, "" );
-
-    bindtextdomain(PACKAGE, LOCALEDIR);
-    textdomain(PACKAGE);
-#endif
-
-    rpmSetVerbosity(RPMLOG_NOTICE);    /* XXX silly use by showrc */
-
-    /* Make a first pass through the arguments, looking for --rcfile */
-    /* We need to handle that before dealing with the rest of the arguments. */
-    /* XXX popt argv definition should be fixed instead of casting... */
-    optCon = poptGetContext(ctx, argc, (const char **)argv, optionsTable, 0);
-    {
-       char *poptfile = rpmGenPath(rpmConfigDir(), LIBRPMALIAS_FILENAME, NULL);
-       (void) poptReadConfigFile(optCon, poptfile);
-       free(poptfile);
-    }
-    (void) poptReadDefaultConfig(optCon, 1);
-    poptSetExecPath(optCon, rpmConfigDir(), 1);
-
-    while ((arg = poptGetNextOpt(optCon)) > 0) {
-       optArg = poptGetOptArg(optCon);
-
-       switch (arg) {
-       default:
-           fprintf(stderr, _("Internal error in argument processing (%d) :-(\n"), arg);
-           exit(EXIT_FAILURE);
-       }
-    }
-
-    if (arg < -1) {
-       fprintf(stderr, "%s: %s\n", 
-               poptBadOption(optCon, POPT_BADOPTION_NOALIAS), 
-               poptStrerror(arg));
-       exit(EXIT_FAILURE);
-    }
-
-    rpmcliConfigured();
-
-    return optCon;
-}
-
-int finishCli(poptContext optCon, int rc)
-{
-    poptFreeContext(optCon);
-    rpmFreeMacros(NULL);
-    rpmFreeMacros(rpmCLIMacroContext);
-    rpmFreeRpmrc();
-    rpmlogClose();
-
-#if HAVE_MCHECK_H && HAVE_MTRACE
-    muntrace();   /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */
-#endif
-
-    /* XXX Avoid exit status overflow. Status 255 is special to xargs(1) */
-    return (rc > 254) ? 254 : rc;
-}
-
 int initPipe(void)
 {
     int p[2];
@@ -140,11 +70,20 @@ int initPipe(void)
     return 0;
 }
 
-void finishPipe(void)
+int finishPipe(void)
 {
-    int status;
+    int rc = 0;
     if (pipeChild) {
+       int status;
+       pid_t reaped;
+
        (void) fclose(stdout);
-       (void) waitpid(pipeChild, &status, 0);
+       do {
+           reaped = waitpid(pipeChild, &status, 0);
+       } while (reaped == -1 && errno == EINTR);
+           
+       if (reaped == -1 || !WIFEXITED(status) || WEXITSTATUS(status))
+           rc = 1;
     }
+    return rc;
 }