RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   12-Sep-2010 22:22:46
  Branch: HEAD                             Handle: 2010091220224600

  Modified files:
    rpm/js                  ngsr.c

  Log:
    - gpsee: WIP.

  Summary:
    Revision    Changes     Path
    1.7         +41 -71     rpm/js/ngsr.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/ngsr.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 ngsr.c
  --- rpm/js/ngsr.c     12 Sep 2010 19:37:01 -0000      1.6
  +++ rpm/js/ngsr.c     12 Sep 2010 20:22:46 -0000      1.7
  @@ -37,7 +37,7 @@
    * @file     gsr.c           GPSEE Script Runner ("scripting host")
    * @author   Wes Garland
    * @date     Aug 27 2007
  - * @version  $Id: ngsr.c,v 1.6 2010/09/12 19:37:01 jbj Exp $
  + * @version  $Id: ngsr.c,v 1.7 2010/09/12 20:22:46 jbj Exp $
    *
    * This program is designed to interpret a JavaScript program as much like
    * a shell script as possible.
  @@ -55,12 +55,13 @@
    */
   
   static __attribute__ ((unused))
  -const char rcsid[] = "$Id: ngsr.c,v 1.6 2010/09/12 19:37:01 jbj Exp $";
  +const char rcsid[] = "$Id: ngsr.c,v 1.7 2010/09/12 20:22:46 jbj Exp $";
   
   #include "system.h"
   
   #include <rpmiotypes.h>
   #include <rpmio.h>
  +#include <rpmlog.h>
   #include <poptIO.h>
   
   #define      _RPMJS_INTERNAL
  @@ -134,7 +135,7 @@
        fprintf(stderr, "\007Fatal Error in " PRODUCT_SHORTNAME ": %s\n",
                message);
       } else
  -     gpsee_log(NULL, SLOG_EMERG, "Fatal Error: %s", message);
  +     rpmlog(RPMLOG_EMERG, "Fatal Error: %s\n", message);
   
       exit(1);
   }
  @@ -230,9 +231,8 @@
       poptContext optCon;
       rpmjs js;
       char *const * Iargv = NULL;      /* Becomes arguments array in JS 
program */
  -    char *const * Ienviron = NULL;   /* Environment to pass to script */
       int ac = 0;
  -    int ec = 1;
  +    int ec = 1;              /* assume failure */
   
       void *stackBasePtr = NULL;
       gpsee_interpreter_t * I = NULL;
  @@ -246,8 +246,10 @@
   
       gpsee_setVerbosity(isatty(STDERR_FILENO) ? GSR_PREPROGRAM_TTY_VERBOSITY
                       : GSR_PREPROGRAM_NOTTY_VERBOSITY);
  -    gpsee_openlog(gpsee_basename(argv[0]));
   
  +#ifdef       NOTYET  /* XXX original gsr is solaris -> *BSDish */
  +    _rpmio_popt_context_flags = POPT_CONTEXT_POSIXMEHARDER;
  +#endif
       optCon = rpmioInit(argc, argv, optionsTable);
   
       /* Add files from CLI. */
  @@ -303,35 +305,35 @@
       if (argv[0][0] == '/' && strcmp(argv[0], SYSTEM_GSR)
        && rc_bool_value(rc, "no_gsr_preload_script") != rc_true)
       {
  -     char preloadScriptFilename[FILENAME_MAX];
  -     char mydir[FILENAME_MAX];
  -     int i;
  -
  -     i = snprintf(preloadScriptFilename, sizeof(preloadScriptFilename),
  -                  "%s/.%s_preload", gpsee_dirname(argv[0], mydir,
  -                                                  sizeof(mydir)),
  -                  gpsee_basename(argv[0]));
  -     if (i == 0 || i == (sizeof(preloadScriptFilename) - 1))
  -         gpsee_log(cx, SLOG_EMERG,
  +     const char * preloadfn = rpmGetPath(dirname(argv[0]),
  +                             "/.", basename(argv[0]), "_preload", NULL);
  +
  +     /* XXX assert? */
  +     if (!(preloadfn && *preloadfn)) {
  +         rpmlog(RPMLOG_EMERG,
                      PRODUCT_SHORTNAME
  -                   ": Unable to create preload script filename!");
  -     else
  -         errno = 0;
  +                   ": Unable to create preload script filename!\n");
  +         preloadfn = _free(preloadfn);
  +         goto finish;
  +     }
   
  -     if (access(preloadScriptFilename, F_OK) == 0) {
  +     errno = 0;
  +     if (Access(preloadfn, F_OK) == 0) {
            jsval v;
            JSScript *script;
            JSObject *scrobj;
   
  -         if (!gpsee_compileScript(cx, preloadScriptFilename,
  +         if (!gpsee_compileScript(I->cx, preloadfn,
                        NULL, NULL, &script, realm->globalObject, &scrobj))
            {
  -             gpsee_log(cx, SLOG_EMERG,
  +             rpmlog(RPMLOG_EMERG,
                          PRODUCT_SHORTNAME
  -                       ": Unable to compile preload script '%s'",
  -                       preloadScriptFilename);
  +                       ": Unable to compile preload script '%s'\n",
  +                       preloadfn);
  +             preloadfn = _free(preloadfn);
                goto finish;
            }
  +         preloadfn = _free(preloadfn);
   
            if (!script || !scrobj)
                goto finish;
  @@ -362,56 +364,24 @@
   
       if (Ifn == NULL) {
        ec = Icode ? 0 : 1;
  -    } else {
  -     FILE *fp = rpmjsOpenFile(js, Ifn, NULL);
  -
  -     if (fp == NULL) {
  -         gpsee_log(cx, SLOG_NOTICE,
  -                   PRODUCT_SHORTNAME
  -                   ": Unable to open' script '%s'! (%m)",
  -                   Ifn);
  -         ec = 1;
  -         goto finish;
  -     }
  -
  -     /* Just compile and exit? */
  -     if (F_ISSET(js->flags, NOEXEC)) {
  -         JSScript *script;
  -         JSObject *scrobj;
  +     goto finish;
  +    }
   
  -         if (!gpsee_compileScript(cx, Ifn,
  -                     fp, NULL, &script, realm->globalObject, &scrobj))
  -         {
  -             gpsee_reportUncaughtException(cx, JSVAL_NULL,
  -                     (gpsee_verbosity(0) >= GSR_FORCE_STACK_DUMP_VERBOSITY)
  -                     ||
  -                     ((gpsee_verbosity(0) >= GPSEE_ERROR_OUTPUT_VERBOSITY)
  -                             && isatty(STDERR_FILENO)));
  -             ec = 1;
  -         } else {
  -             ec = 0;
  -         }
  -     } else {                /* noRunScript is false; run the program */
  +    {        const char * msg = NULL;
  +     rpmRC xx = rpmjsRunFile(js, Ifn, Iargv, &msg);
   
  -         if (!gpsee_runProgramModule(cx, Ifn,
  -                     NULL, fp, (char * const*)Iargv, Ienviron))
  -         {
  -             int code = gpsee_getExceptionExitCode(cx);
  -             if (code >= 0) {
  -                 ec = code;
  -             } else {
  -                 gpsee_reportUncaughtException(cx, JSVAL_NULL,
  -                     (gpsee_verbosity(0) >= GSR_FORCE_STACK_DUMP_VERBOSITY)
  -                     ||
  -                     ((gpsee_verbosity(0) >= GPSEE_ERROR_OUTPUT_VERBOSITY)
  -                             && isatty(STDERR_FILENO)));
  -                 ec = 1;
  -             }
  -         } else {
  -             ec = 0;
  -         }
  +     switch (xx) {
  +     default:
  +         rpmlog(RPMLOG_NOTICE,
  +                   PRODUCT_SHORTNAME ": Unable to open' script '%s'! (%s)\n",
  +                   Ifn, msg);
  +         msg = _free(msg);
  +         ec = ((int)xx < 0 ? -xx : xx);
  +         break;
  +     case RPMRC_OK:
  +         ec = xx;
  +         break;
        }
  -     fclose(fp);
        goto finish;
       }
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to