[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm/ruby/ trb.c
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2009-04-30 0:28:51
Message-ID: 20090430002851.BB4BA5C6A () rpm5 ! org
[Download RAW message or body]

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

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   30-Apr-2009 02:28:51
  Branch: HEAD                             Handle: 2009043000285100

  Added files:
    rpm/ruby                trb.c

  Log:
    - ruby: orphan.

  Summary:
    Revision    Changes     Path
    1.1         +182 -0     rpm/ruby/trb.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/ruby/trb.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1 trb.c
  --- /dev/null	2009-04-30 02:28:00 +0200
  +++ trb.c	2009-04-30 02:28:51 +0200
  @@ -0,0 +1,182 @@
  +#include "system.h"
  +
  +#include <rpmio.h>
  +#include <argv.h>
  +
  +#define	_RPMRUBY_INTERNAL
  +#include <rpmruby.h>
  +
  +#ifdef	NOTYET
  +#include "rpmds-rb.h"
  +#include "rpmfi-rb.h"
  +#include "rpmhdr-rb.h"
  +#include "rpmmc-rb.h"
  +#include "rpmmi-rb.h"
  +#include "rpmps-rb.h"
  +#include "rpmte-rb.h"
  +#include "rpmts-rb.h"
  +#include "syck-rb.h"
  +#include "uuid-rb.h"
  +#endif
  +
  +#include <rpmcli.h>
  +
  +#include "debug.h"
  +
  +/*@unchecked@*/
  +static int _debug = 0;
  +
  +/*@unchecked@*/
  +static int _loglvl = 0;
  +
  +/*@unchecked@*/
  +static int _test = 1;
  +
  +typedef struct rpmrbClassTable_s {
  +/*@observer@*/
  +    const char *name;
  +    void * (*init) (void * _foocx, void * _fooglob);
  +    int ix;
  +} * rpmrbClassTable;
  +
  +/*@unchecked@*/ /*@observer@*/
  +static struct rpmrbClassTable_s classTable[] = {
  +};
  +
  +/*@unchecked@*/
  +static size_t nclassTable = sizeof(classTable) / sizeof(classTable[0]);
  +
  +/*@unchecked@*/
  +static const char tscripts[] = "./tscripts/";
  +
  +/*@unchecked@*/
  +static const char * _acknack = "\
  +";
  +
  +static rpmRC
  +rpmrbLoadFile(rpmruby rb, const char * pre, const char * fn)
  +{
  +    const char * result = NULL;
  +    char * str;
  +    rpmRC ret;
  +
  +    if (pre == NULL)
  +	pre = "";
  +    str = rpmExpand(pre, "load(\"", fn, "\");", NULL);
  +if (_debug)
  +fprintf(stderr, "\trunning:%s%s\n", (*pre ? "\n" : " "), str);
  +    result = NULL;
  +    ret = rpmrubyRun(NULL, str, &result);
  +    if (result != NULL && *result != '\0')
  +	fprintf(stdout, "%s\n", result);
  +    str = _free(str);
  +    return ret;
  +}
  +
  +static void
  +rpmrbLoadClasses(void)
  +{
  +    const char * pre = NULL;
  +    int * order = NULL;
  +    size_t norder = 64;
  +    rpmrbClassTable tbl;
  +    rpmruby rb;
  +    const char * result;
  +    int ix;
  +    size_t i;
  +
  +    i = norder * sizeof(*order);
  +    order = memset(alloca(i), 0, i);
  +
  +    /* Inject _debug and _loglvl into the interpreter context. */
  +    {	char dstr[32];
  +	char lstr[32];
  +	sprintf(dstr, "%d", _debug);
  +	sprintf(lstr, "%d", _loglvl);
  +	pre = rpmExpand("var debug = ", dstr, ";\n"
  +			"var loglvl = ", lstr, ";\n",
  +			_acknack, NULL);
  +    }
  +
  +    /* Load requested classes and initialize the test order. */
  +    /* XXX FIXME: resultp != NULL to actually execute?!? */
  +    (void) rpmrubyRun(NULL, "print(\"loading RPM classes.\");", &result);
  +    rb = _rpmrubyI;
  +    for (i = 0, tbl = classTable; i < nclassTable; i++, tbl++) {
  +	if (tbl->ix <= 0)
  +	    continue;
  +	order[tbl->ix & (norder - 1)] = i + 1;
  +#ifdef	NOTYET
  +	if (tbl->init != NULL)
  +	    (void) (*tbl->init) (rb->cx, rb->glob);
  +#endif
  +    }
  +
  +    /* Test requested classes in order. */
  +    for (i = 0; i < norder; i++) {
  +	const char * fn;
  +	struct stat sb;
  +
  +	if (order[i] <= 0)
  +	    continue;
  +	ix = order[i] - 1;
  +	tbl = &classTable[ix];
  +	fn = rpmGetPath(tscripts, "/", tbl->name, ".rb", NULL);
  +	if (Stat(fn, &sb) == 0) {
  +	    (void) rpmrbLoadFile(NULL, pre, fn);
  +	    pre = _free(pre);
  +	}
  +	fn = _free(fn);
  +    }
  +
  +    pre = _free(pre);
  +    return;
  +}
  +
  +static struct poptOption optionsTable[] = {
  + { "debug", 'd', POPT_ARG_VAL,	&_debug, -1,		NULL, NULL },
  + { "test", 'd', POPT_ARG_VAL,	&_test, -1,		NULL, NULL },
  +
  + { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
  +	N_("Common options for all rpm executables:"), NULL },
  +
  +  POPT_AUTOHELP
  +  POPT_TABLEEND
  +};
  +
  +int
  +main(int argc, char *argv[])
  +{
  +    poptContext optCon = rpmcliInit(argc, argv, optionsTable);
  +    ARGV_t av = poptGetArgs(optCon);
  +    int ac = argvCount(av);
  +    const char * fn;
  +    int rc = 1;		/* assume failure */
  +
  +    if (!_test && ac < 1) {
  +	poptPrintUsage(optCon, stderr, 0);
  +	goto exit;
  +    }
  +
  +_rpmts_debug = 0;
  +
  +_rpmruby_debug = 0;
  +    if (_debug && !_loglvl) _loglvl = 1;
  +    rpmrbLoadClasses();
  +_rpmruby_debug = 1;
  +
  +    if (av != NULL)
  +    while ((fn = *av++) != NULL) {
  +	rpmRC ret = rpmrbLoadFile(NULL, NULL, fn);
  +	if (ret != RPMRC_OK)
  +	    goto exit;
  +    }
  +
  +    rc = 0;
  +
  +exit:
  +_rpmruby_debug = 0;
  +    optCon = rpmcliFini(optCon);
  +
  +    return rc;
  +}
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic