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:   03-Jun-2009 04:05:45
  Branch: HEAD                             Handle: 2009060302054401

  Modified files:
    rpm                     CHANGES
    rpm/rpmio               rpmsquirrel.c rpmsquirrel.h

  Log:
    - squirrel: capture stdout in an iob.

  Summary:
    Revision    Changes     Path
    1.3014      +1  -0      rpm/CHANGES
    2.2         +21 -3      rpm/rpmio/rpmsquirrel.c
    2.2         +2  -0      rpm/rpmio/rpmsquirrel.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3013 -r1.3014 CHANGES
  --- rpm/CHANGES       2 Jun 2009 20:53:05 -0000       1.3013
  +++ rpm/CHANGES       3 Jun 2009 02:05:44 -0000       1.3014
  @@ -1,5 +1,6 @@
   
   5.2b1 -> 5.3a1
  +    - jbj: squirrel: capture stdout in an iob.
       - jbj: squirrel: add --with-squirrel for embedding squirrel.
       - jbj: rpmgi: remove duplicated code.
       - jbj: header: add getter/setter for header parent.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmsquirrel.c
  ============================================================================
  $ cvs diff -u -r2.1 -r2.2 rpmsquirrel.c
  --- rpm/rpmio/rpmsquirrel.c   2 Jun 2009 20:53:07 -0000       2.1
  +++ rpm/rpmio/rpmsquirrel.c   3 Jun 2009 02:05:45 -0000       2.2
  @@ -26,6 +26,8 @@
       sq_close((HSQUIRRELVM)squirrel->I);
   #endif
       squirrel->I = NULL;
  +    (void)rpmiobFree(squirrel->iob);
  +    squirrel->iob = NULL;
   }
   
   /*...@unchecked@*/ /*...@only@*/ /*...@null@*/
  @@ -48,10 +50,26 @@
   #if defined(WITH_SQUIRREL)
   static void rpmsquirrelPrint(HSQUIRRELVM v, const SQChar *s, ...)
   {
  +    rpmsquirrel squirrel = sq_getforeignptr(v);
  +    size_t nb = 1024;
  +    char * b = xmalloc(nb);
       va_list va;
  +
       va_start(va, s);
  -    (void) vfprintf(stdout, s, va);
  +    while(1) {
  +     int nw = vsnprintf(b, nb, s, va);
  +     if (nw > -1 && (size_t)nw < nb)
  +         break;
  +     if (nb > -1)            /* glibc 2.1 (and later) */
  +         nb = nw+1;
  +     else                    /* glibc 2.0 */
  +         nb *= 2;
  +     b = xrealloc(b, nb);
  +    }
       va_end(va);
  +
  +    (void) rpmiobAppend(squirrel->iob, b, 0);
  +    b = _free(b);
   }
   #endif
   
  @@ -69,6 +87,7 @@
       ac = argvCount(av);
   
       squirrel->I = v;
  +    sq_setforeignptr(v, squirrel);
       sq_setprintfunc(v, rpmsquirrelPrint);
   
   #ifdef       NOTYET
  @@ -85,6 +104,7 @@
       }
   #endif
   #endif
  +    squirrel->iob = rpmiobNew(0);
   
       return rpmsquirrelLink(squirrel);
   }
  @@ -144,10 +164,8 @@
            sq_settop(v, oldtop);
        }
        rc = RPMRC_OK;
  -#ifdef       NOTYET
        if (resultp)
            *resultp = rpmiobStr(squirrel->iob);
  -#endif
       }
   #endif
       return rc;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmsquirrel.h
  ============================================================================
  $ cvs diff -u -r2.1 -r2.2 rpmsquirrel.h
  --- rpm/rpmio/rpmsquirrel.h   2 Jun 2009 20:53:07 -0000       2.1
  +++ rpm/rpmio/rpmsquirrel.h   3 Jun 2009 02:05:45 -0000       2.2
  @@ -20,6 +20,8 @@
   struct rpmsquirrel_s {
       struct rpmioItem_s _item;        /*!< usage mutex and pool identifier. */
       void * I;                        /* HSQUIRRELVM */
  +    rpmiob iob;
  +
   };
   #endif /* _RPMSQUIRREL_INTERNAL */
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to