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:   16-Jun-2017 08:14:09
  Branch: rpm-5_4                          Handle: 2017061606140900

  Modified files:           (Branch: rpm-5_4)
    rpm/rpmio               librpmio.vers rpmeio.c rpmeio.h

  Log:
    - rpmeio: switch to the low-levl API.

  Summary:
    Revision    Changes     Path
    2.199.2.93  +3  -2      rpm/rpmio/librpmio.vers
    1.1.2.3     +577 -125   rpm/rpmio/rpmeio.c
    1.1.2.3     +4  -5      rpm/rpmio/rpmeio.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.199.2.92 -r2.199.2.93 librpmio.vers
  --- rpm/rpmio/librpmio.vers   15 Jun 2017 07:16:18 -0000      2.199.2.92
  +++ rpm/rpmio/librpmio.vers   16 Jun 2017 06:14:09 -0000      2.199.2.93
  @@ -474,7 +474,6 @@
       rpmMCExpand;
       rpmMCExpandNumeric;
       _rpmeio_debug;
  -    rpmeioCancel;
       rpmeioDumpREQ;
       rpmeioLoop;
       rpmeioNew;
  @@ -483,7 +482,9 @@
       rpmeioPollWant;
       rpmeioPollDone;
       rpmeioStart;
  -    rpmeioSubmit;
  +    Eio_cancel;
  +    Eio_destroy;
  +    Eio_submit;
       rpmeioCB;
       rpmeioCB_readdir;
       rpmeioCB_stat;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmeio.c
  ============================================================================
  $ cvs diff -u -r1.1.2.2 -r1.1.2.3 rpmeio.c
  --- rpm/rpmio/rpmeio.c        15 Jun 2017 07:16:18 -0000      1.1.2.2
  +++ rpm/rpmio/rpmeio.c        16 Jun 2017 06:14:09 -0000      1.1.2.3
  @@ -121,14 +121,21 @@
        fprintf(fp, "%25s: %d %s data %s\n", "type", req->type, REQ_TYPE(req), 
(char *)REQ_DATA(req));
   #endif
   
  -#ifdef       NOTYET
  -     PRINT(hhx, cancelled);
  -     PRINT(hhx, flags);
  +     if (req->cancelled)
  +         PRINT(hhx, cancelled);
  +     if (req->flags)
  +         PRINT(hhx, flags);
  +     if (req->pri)
        PRINT(hhx, pri);
   
  -     PRINT(p, data);
  -     PRINT(p, finish);
  -     PRINT(p, destroy);
  +#ifdef       NOTYET
  +     if (req->data)
  +         PRINT(p, data);
  +#endif
  +     if (req->finish)
  +         PRINT(p, finish);
  +     if (req->destroy)
  +         PRINT(p, destroy);
        if (req->feed)
            PRINT(p, feed);
   
  @@ -140,7 +147,6 @@
            PRINT(p, grp_next);
        if (req->grp_first)
            PRINT(p, grp_first);
  -#endif       /* NOTYET */
   #undef       PRINT
   
       }
  @@ -259,22 +265,41 @@
   SPEW("<== %s() polled %d\n", __FUNCTION__, polled);
   }
   
  -void rpmeioSubmot(eio_req * req)
  +void Eio_cancel(eio_req * req)
   {
  -SPEW("--> %s(%p)\n", __FUNCTION__, req);
  -    eio_submit(req);
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
  +SPEW("--> %s(%p) eio %p\n", __FUNCTION__, req, eio);
  +    eio_cancel(req);
   }
   
  -void rpmeioCancel(eio_req * req)
  +void Eio_destroy(eio_req * req)
   {
  -SPEW("--> %s(%p)\n", __FUNCTION__, req);
  -    eio_cancel(req);
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
  +SPEW("--> %s(%p) eio %p\n", __FUNCTION__, req, eio);
  +rpmeioDumpREQ(__FUNCTION__, req, NULL);
  +
  +    do {
  +     eio = rpmeioFree(eio);
  +    } while (0);
  +
  +}
  +
  +void Eio_submit(eio_req * req)
  +{
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
  +SPEW("--> %s(%p) eio %p\n", __FUNCTION__, req, eio);
  +#ifdef       NOTYET
  +    eio = rpmeioLink(eio);
  +#endif
  +    eio_submit(&eio->req);
   }
   
   /*==============================================================*/
   int rpmeioCB(eio_req * req)
   {
  -SPEW("--> %s(%s|%p) res %ld\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
EIO_RESULT(req));
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
  +SPEW("--> %s(%s|%p) res %ld eio %p\n", __FUNCTION__, REQ_TYPE(req), 
REQ_DATA(req), EIO_RESULT(req), eio);
  +
   rpmeioDumpREQ(__FUNCTION__, req, NULL);
   
       if (EIO_RESULT(req) < 0) {
  @@ -282,14 +307,19 @@
        perror(REQ_TYPE(req));
       }
   
  +#ifdef       NOTYET
  +    eio = rpmeioFree(eio);
  +#endif
  +
       return 0;
   }
   
   int rpmeioCB_readdir(eio_req * req)
   {
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
       char *buf = (char *) EIO_BUF(req);
   
  -SPEW("--> %s(%s|%p) res %ld\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
EIO_RESULT(req));
  +SPEW("--> %s(%s|%p) res %ld eio %p\n", __FUNCTION__, REQ_TYPE(req), 
REQ_DATA(req), EIO_RESULT(req), eio);
   rpmeioDumpREQ(__FUNCTION__, req, NULL);
   
       if (EIO_RESULT(req) < 0)
  @@ -300,14 +330,19 @@
        buf += strlen(buf) + 1;
       }
   
  +#ifdef       NOTYET
  +    eio = rpmeioFree(eio);
  +#endif
  +
       return 0;
   }
   
   int rpmeioCB_stat(eio_req * req)
   {
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
       struct stat *buf = EIO_STAT_BUF(req);
   
  -SPEW("--> %s(%s|%p) res %ld\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
EIO_RESULT(req));
  +SPEW("--> %s(%s|%p) res %ld eio %p\n", __FUNCTION__, REQ_TYPE(req), 
REQ_DATA(req), EIO_RESULT(req), eio);
   rpmeioDumpREQ(__FUNCTION__, req, NULL);
       if (req->type == EIO_FSTAT) {
        SPEW("\tfstat = %ld\n", EIO_RESULT(req));
  @@ -319,18 +354,27 @@
        SPEW("\tstat size %ld perm 0%o\n", buf->st_size,
               buf->st_mode & 0777);
   
  +#ifdef       NOTYET
  +    eio = rpmeioFree(eio);
  +#endif
  +
       return 0;
   }
   
   int rpmeioCB_read(eio_req * req)
   {
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
       unsigned char *buf = (unsigned char *) EIO_BUF(req);
   
  -SPEW("--> %s(%s|%p) res %ld (%02x%02x%02x%02x %02x%02x%02x%02x)\n",
  -             __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), EIO_RESULT(req),
  -             buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
  +SPEW("--> %s(%s|%p) res %ld eio %p (%02x%02x%02x%02x %02x%02x%02x%02x)\n",
  +     __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), EIO_RESULT(req), eio,
  +     buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
   rpmeioDumpREQ(__FUNCTION__, req, NULL);
   
  +#ifdef       NOTYET
  +    eio = rpmeioFree(eio);
  +#endif
  +
       return 0;
   }
   
  @@ -338,19 +382,26 @@
   
   int rpmeioCB_open(eio_req * req)
   {
  -SPEW("--> %s(%s|%p) res %ld\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
EIO_RESULT(req));
  +    rpmeio eio = (rpmeio) (((rpmioItem)req) - 1);
  +SPEW("--> %s(%s|%p) res %ld eio %p\n", __FUNCTION__, REQ_TYPE(req), 
REQ_DATA(req), EIO_RESULT(req), eio);
   rpmeioDumpREQ(__FUNCTION__, req, NULL);
   
       rpmeioLastFdno = EIO_RESULT(req);
   
  +#ifdef       NOTYET
  +    eio = rpmeioFree(eio);
  +#endif
  +
       return 0;
   }
   
   /*==============================================================*/
   static eio_req * rpmeioReq(int reqtype, ...)
   {
  +    rpmeio eio = NULL;
       eio_req * req = NULL;
   
  +    eio_wd wd = NULL;
       const char * path = NULL;
       const char * npath = NULL;
       void (*execute) (eio_req *req);
  @@ -360,6 +411,7 @@
       int whence = 0;
       void *buf = NULL;
       size_t length = 0;
  +    size_t nbytes = 0;
       eio_tstamp atime = 0.0;
       eio_tstamp mtime = 0.0;
       uid_t uid = -1;
  @@ -374,13 +426,13 @@
       eio_cb cb = rpmeioCB;
       void * data = NULL;
   
  -    const char * fmt = NULL;
  -(void *)fmt;
  -    va_list ap;
  -
       if (reqtype >= EIO_REQ_TYPE_NUM)
        goto exit;
   
  +    eio = rpmeioNew(reqtype);
  +    req = &eio->req;
  +
  +    va_list ap;
       va_start(ap, reqtype);
   
       switch (reqtype) {
  @@ -388,36 +440,39 @@
        execute = va_arg(ap, void (*) (eio_req *));
        cb = rpmeioCB;          /* XXX */
        data = "custom";
  -     req = eio_custom(execute, pri, cb, data);
  +//   req = eio_custom(execute, pri, cb, data);
  +     req->feed = execute;
        break;
  -#ifdef       NOTYET
       case EIO_WD_OPEN:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;          /* XXX */
        data = "wd_open";
  -     req = eio_wd_open(path, pri, cb, data);
  +//   req = eio_wd_open(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_WD_CLOSE:
  +     wd = va_arg(ap, eio_wd);
        cb = rpmeioCB;          /* XXX */
        data = "wd_close";
  -     fmt = "%p | %d, %p, %p";
  -     req = eio_wd_close(wd, pri, cb, data);
  +//   req = eio_wd_close(wd, pri, cb, data);
  +     req->wd = wd;
        break;
  -#endif       /* NOTYET */
       case EIO_CLOSE:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;
        data = "close";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_close(fdno, pri, cb, data);
  +//   req = eio_close(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_DUP2:
        fdno = va_arg(ap, int);
        fdno2 = va_arg(ap, int);
        cb = rpmeioCB;
        data = "dup2";
  -     fmt = "%d, %d | %d, %p, %p";
  -     req = eio_dup2(fdno, fdno2, pri, cb, data);
  +//   req = eio_dup2(fdno, fdno2, pri, cb, data);
  +     req->int1 = fdno;
  +     req->int2 = fdno2;
        break;
       case EIO_SEEK:
        fdno = va_arg(ap, int);
  @@ -425,8 +480,10 @@
        whence = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "seek";
  -     fmt = "%d, %ld, %d | %d, %p, %p";
  -     req = eio_seek(fdno, offset, whence, pri, cb, data);
  +//   req = eio_seek(fdno, offset, whence, pri, cb, data);
  +     req->int1 = fdno;
  +     req->offs = offset;
  +     req->int2 = whence;
        break;
       case EIO_READ:
        fdno = va_arg(ap, int);
  @@ -435,8 +492,11 @@
        offset = va_arg(ap, off_t);
        cb = rpmeioCB_read;
        data = "read";
  -     fmt = "%d, %p, %zu | %d, %p, %p";
  -     req = eio_read(fdno, buf, length, offset, pri, cb, data);
  +//   req = eio_read(fdno, buf, length, offset, pri, cb, data);
  +     req->int1 = fdno;
  +     req->ptr2 = buf;
  +     req->size = length;
  +     req->offs = offset;
        break;
       case EIO_WRITE:
        fdno = va_arg(ap, int);
  @@ -445,8 +505,11 @@
        offset = va_arg(ap, off_t);
        cb = rpmeioCB;
        data = "write";
  -     fmt = "%d, %p, %zu | %d, %p, %p";
  -     req = eio_write(fdno, buf, length, offset, pri, cb, data);
  +//   req = eio_write(fdno, buf, length, offset, pri, cb, data);
  +     req->int1 = fdno;
  +     req->ptr2 = buf;
  +     req->size = length;
  +     req->offs = offset;
        break;
       case EIO_READAHEAD:
        fdno = va_arg(ap, int);
  @@ -454,40 +517,46 @@
        length = va_arg(ap, size_t);
        cb = rpmeioCB;
        data = "readahead";
  -     fmt = "%d, %lld, %zu | %d, %p, %p";
  -     req = eio_readahead(fdno, offset, length, pri, cb, data);
  +//   req = eio_readahead(fdno, offset, length, pri, cb, data);
  +     req->int1 = fdno;
  +     req->offs = offset;
  +     req->size = length;
        break;
       case EIO_SENDFILE:
  -     fdno2 = va_arg(ap, int);
        fdno = va_arg(ap, int);
  +     fdno2 = va_arg(ap, int);
        offset = va_arg(ap, off_t);
        length = va_arg(ap, size_t);
        cb = rpmeioCB;
        data = "sendfile";
  -     fmt = "%d, %d, %p, %zu | %d, %p, %p";
  -     req = eio_sendfile(fdno2, fdno, offset, length, pri, cb, data);
  +//   req = eio_sendfile(fdno, fdno2, offset, length, pri, cb, data);
  +     req->int1 = fdno;
  +     req->int2 = fdno2;
  +     req->offs = offset;
  +     req->size = length;
        break;
       case EIO_FSTAT:
        fdno = va_arg(ap, int);
        cb = rpmeioCB_stat;
        data = "fstat";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_fstat(fdno, pri, cb, data);
  +//   req = eio_fstat(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_FSTATVFS:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "statvfs";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_fstatvfs(fdno, pri, cb, data);
  +//   req = eio_fstatvfs(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_FTRUNCATE:
        fdno = va_arg(ap, int);
        offset = va_arg(ap, off_t);
        cb = rpmeioCB;
        data = "ftruncate";
  -     fmt = "%d, %ld | %d, %p, %p";
  -     req = eio_ftruncate(fdno, offset, pri, cb, data);
  +//   req = eio_ftruncate(fdno, offset, pri, cb, data);
  +     req->int1 = fdno;
  +     req->offs = offset;
        break;
       case EIO_FUTIME:
        fdno = va_arg(ap, int);
  @@ -495,16 +564,17 @@
        mtime = va_arg(ap, eio_tstamp);
        cb = rpmeioCB;
        data = "futime";
  -     fmt = "%d, %f, %f | %d, %p, %p";
  -     req = eio_futime(fdno, atime, mtime, pri, cb, data);
  +//   req = eio_futime(fdno, atime, mtime, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_FCHMOD:
        fdno = va_arg(ap, int);
        mode = va_arg(ap, mode_t);
        cb = rpmeioCB;
        data = "fchmod";
  -     fmt = "%d, %hd | %d, %p, %p";
  -     req = eio_fchmod(fdno, mode, pri, cb, data);
  +//   req = eio_fchmod(fdno, mode, pri, cb, data);
  +     req->int1 = fdno;
  +     req->int2 = (long)mode;
        break;
       case EIO_FCHOWN:
        fdno = va_arg(ap, int);
  @@ -512,35 +582,34 @@
        gid = va_arg(ap, gid_t);
        cb = rpmeioCB;
        data = "fchown";
  -     fmt = "%d, %d, %d | %d, %p, %p";
  -     req = eio_fchown(fdno, uid, gid, pri, cb, data);
  +//   req = eio_fchown(fdno, uid, gid, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_SYNC:
        cb = rpmeioCB;
        data = "sync";
  -     fmt = "| %d, %p, %p";
  -     req = eio_sync(pri, cb, data);
  +//   req = eio_sync(pri, cb, data);
        break;
       case EIO_FSYNC:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;
        data = "fsync";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_fsync(fdno, pri, cb, data);
  +//   req = eio_fsync(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_FDATASYNC:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;
        data = "fdatasync";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_fdatasync(fdno, pri, cb, data);
  +//   req = eio_fdatasync(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_SYNCFS:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "syncfs";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_syncfs(fdno, pri, cb, data);
  +//   req = eio_syncfs(fdno, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_MSYNC:
        addr = va_arg(ap, void *);
  @@ -548,8 +617,10 @@
        flags = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "msync";
  -     fmt = "%p, %zu, %d | %d, %p, %p";
  -     req = eio_msync(addr, length, flags, pri, cb, data);
  +//   req = eio_msync(addr, length, flags, pri, cb, data);
  +     req->ptr2 = addr;
  +     req->size = length;
  +     req->int1 = flags;
        break;
       case EIO_MTOUCH:
        addr = va_arg(ap, void *);
  @@ -557,18 +628,23 @@
        flags = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "mtouch";
  -     fmt = "%p, %zu, %d | %d, %p, %p";
  -     req = eio_mtouch(addr, length, flags, pri, cb, data);
  +//   req = eio_mtouch(addr, length, flags, pri, cb, data);
  +     req->ptr2 = addr;
  +     req->size = length;
  +     req->int1 = flags;
        break;
       case EIO_SYNC_FILE_RANGE:
        fdno = va_arg(ap, int);
        offset = va_arg(ap, off_t);
  -     length = va_arg(ap, size_t);
  +     nbytes = va_arg(ap, size_t);
        flags = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "sync_file_range";
  -     fmt = "%p, %lld, %lld, %u | %d, %p, %p";
  -     req = eio_sync_file_range(fdno, offset, length, flags, pri, cb, data);
  +//   req = eio_sync_file_range(fdno, offset, nbytes, flags, pri, cb, data);
  +     req->int1 = fdno;
  +     req->offs = offset;
  +     req->size = nbytes;
  +     req->int2 = flags;
        break;
       case EIO_FALLOCATE:
        fdno = va_arg(ap, int);
  @@ -577,58 +653,63 @@
        length = va_arg(ap, size_t);
        cb = rpmeioCB;          /* XXX */
        data = "fallocate";
  -     fmt = "%p, %d, %ld, %ld | %d, %p, %p";
  -     req = eio_fallocate (fdno, mode, offset, length, pri, cb, data);
  +//   req = eio_fallocate (fdno, mode, offset, length, pri, cb, data);
  +     req->int1 = fdno;
  +     req->int2 = (long)mode;
  +     req->offs = offset;
  +     req->size = length;
        break;
       case EIO_MLOCK:
        addr = va_arg(ap, void *);
        length = va_arg(ap, size_t);
        cb = rpmeioCB;          /* XXX */
        data = "mlock";
  -     fmt = "%p, %zu | %d, %p, %p";
  -     req = eio_mlock(addr, length, pri, cb, data);
  +//   req = eio_mlock(addr, length, pri, cb, data);
  +     req->ptr2 = addr;
  +     req->size = length;
        break;
       case EIO_MLOCKALL:
        fdno = va_arg(ap, int);
        cb = rpmeioCB;          /* XXX */
        data = "mlockall";
  -     fmt = "%d | %d, %p, %p";
  -     req = eio_mlockall(flags, pri, cb, data);
  +//   req = eio_mlockall(flags, pri, cb, data);
  +     req->int1 = fdno;
        break;
       case EIO_GROUP:
        cb = rpmeioCB;          /* XXX */
        data = "group";
        pri = EIO_PRI_MAX;      /* XXX */
  -     fmt = "| %p, %p";
  -     req = eio_grp(cb, data);
  +//   req = eio_grp(cb, data);
        break;
       case EIO_NOP:
        cb = rpmeioCB;
        data = "nop";
  -     fmt = "| %d, %p, %p";
  -     req = eio_nop(pri,cb, data);
  +//   req = eio_nop(pri,cb, data);
        break;
       case EIO_BUSY:
        delay = va_arg(ap, eio_tstamp);
        cb = rpmeioCB;
        data = "busy";
  -     fmt = "%f | %d, %p, %p";
  -     req = eio_busy(delay, pri, cb, data);
  +//   req = eio_busy(delay, pri, cb, data);
  +     req->nv1 = delay;
        break;
       case EIO_REALPATH:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;          /* XXX */
        data = "realpath";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_realpath(path, pri, cb, data);
  +//   req = eio_realpath(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_READDIR:
        path = va_arg(ap, const char *);
        flags = va_arg(ap, int);
        cb = rpmeioCB_open;
        data = "readdir";
  -     fmt = "%s, %d | %d, %p, %p";
  -     req = eio_readdir(path, flags, pri, cb, data);
  +//   req = eio_readdir(path, flags, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int1 = flags;
        break;
       case EIO_OPEN:
        path = va_arg(ap, const char *);
  @@ -636,37 +717,45 @@
        mode = va_arg(ap, mode_t);
        cb = rpmeioCB_open;
        data = "open";
  -     fmt = "%s, %d, %d | %d, %p, %p";
  -     req = eio_open(path, flags, mode, pri, cb, data);
  +//   req = eio_open(path, flags, mode, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int1 = flags;
  +     req->int2 = (long)mode;;
        break;
       case EIO_STAT:
        path = va_arg(ap, const char *);
        cb = rpmeioCB_stat;
        data = "stat";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_stat(path, pri, cb, data);
  +//   req = eio_stat(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_LSTAT:
        path = va_arg(ap, const char *);
        cb = rpmeioCB_stat;
        data = "lstat";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_lstat(path, pri, cb, data);
  +//   req = eio_lstat(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_STATVFS:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;          /* XXX */
        data = "statvfs";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_statvfs(path, pri, cb, data);
  +//   req = eio_statvfs(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_TRUNCATE:
        path = va_arg(ap, const char *);
        offset = va_arg(ap, off_t);
        cb = rpmeioCB;
        data = "truncate";
  -     fmt = "%s, %ld | %d, %p, %p";
  -     req = eio_truncate(path, offset, pri, cb, data);
  +//   req = eio_truncate(path, offset, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->offs = offset;
        break;
       case EIO_UTIME:
        path = va_arg(ap, const char *);
  @@ -674,16 +763,21 @@
        mtime = va_arg(ap, eio_tstamp);
        cb = rpmeioCB;
        data = "utime";
  -     fmt = "%s, %p, %p | %d, %p, %p";
  -     req = eio_utime(path, atime, mtime, pri, cb, data);
  +//   req = eio_utime(path, atime, mtime, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->nv1 = atime;
  +     req->nv2 = mtime;
        break;
       case EIO_CHMOD:
        path = va_arg(ap, const char *);
        mode = va_arg(ap, mode_t);
        cb = rpmeioCB;          /* XXX */
        data = "chmod";
  -     fmt = "%s, %d | %d, %p, %p";
  -     req = eio_chmod(path, mode, pri, cb, data);
  +//   req = eio_chmod(path, mode, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int2 = (long)mode;
        break;
       case EIO_CHOWN:
        path = va_arg(ap, const char *);
  @@ -691,37 +785,47 @@
        gid = va_arg(ap, gid_t);
        cb = rpmeioCB;
        data = "chown";
  -     fmt = "%s, %d, %d | %d, %p, %p";
  -     req = eio_chown(path, uid, gid, pri, cb, data);
  +//   req = eio_chown(path, uid, gid, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int2 = (long)uid;
  +     req->int3 = (long)gid;
        break;
       case EIO_UNLINK:
  -     cb = rpmeioCB;
        path = va_arg(ap, const char *);
  +     cb = rpmeioCB;
        data = "unlink";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_unlink(path, pri, cb, data);
  +//   req = eio_unlink(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_RMDIR:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "rmdir";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_rmdir(path, pri, cb, data);
  +//   req = eio_rmdir(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       case EIO_MKDIR:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "mkdir";
  -     fmt = "%s, %d | %d, %p, %p";
  -     req = eio_mkdir(path, mode, pri, cb, data);
  +//   req = eio_mkdir(path, mode, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int2 = (long)mode;
        break;
       case EIO_RENAME:
        path = va_arg(ap, const char *);
        npath = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "rename";
  -     fmt = "%s, %s | %d, %p, %p";
  -     req = eio_rename(path, npath, pri, cb, data);
  +//   req = eio_rename(path, npath, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->flags |= EIO_FLAG_PTR2_FREE;
  +     req->ptr2 = xstrdup(npath);
        break;
       case EIO_MKNOD:
        path = va_arg(ap, const char *);
  @@ -729,31 +833,41 @@
        dev = va_arg(ap, dev_t);
        cb = rpmeioCB;
        data = "mknod";
  -     fmt = "%s, %d, %ld | %d, %p, %p";
  -     req = eio_mknod(path, mode, dev, pri, cb, data);
  +//   req = eio_mknod(path, mode, dev, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->int2 = (long)mode;
  +     req->offs = (off_t)dev;
        break;
       case EIO_LINK:
        path = va_arg(ap, const char *);
        npath = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "link";
  -     fmt = "%s, %s | %d, %p, %p";
  -     req = eio_link(path, npath, pri, cb, data);
  +//   req = eio_link(path, npath, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->flags |= EIO_FLAG_PTR2_FREE;
  +     req->ptr2 = xstrdup(npath);
        break;
       case EIO_SYMLINK:
        path = va_arg(ap, const char *);
        npath = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "symlink";
  -     fmt = "%s, %s | %d, %p, %p";
  -     req = eio_symlink(path, npath, pri, cb, data);
  +//   req = eio_symlink(path, npath, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
  +     req->flags |= EIO_FLAG_PTR2_FREE;
  +     req->ptr2 = xstrdup(npath);
        break;
       case EIO_READLINK:
        path = va_arg(ap, const char *);
        cb = rpmeioCB;
        data = "readlink";
  -     fmt = "%s | %d, %p, %p";
  -     req = eio_readlink(path, pri, cb, data);
  +//   req = eio_readlink(path, pri, cb, data);
  +     req->flags |= EIO_FLAG_PTR1_FREE;
  +     req->ptr1 = xstrdup(path);
        break;
       default:
   assert(0);
  @@ -762,330 +876,603 @@
   
       va_end(ap);
   
  +//   eio->req.next = NULL;
  +//   eio->req.wd = NULL;
  +//   eio->req.result = 0;
  +//   eio->req.offs = 0;
  +//   eio->req.size = 0;
  +//   eio->req.ptr1 = NULL;
  +//   eio->req.ptr2 = NULL;
  +//   eio->req.nv1 = 0.0;
  +//   eio->req.nv2 = 0.0;
  +//   eio->req.int1 = 0;
  +//   eio->req.int2 = 0;
  +//   eio->req.int3 = 0;
  +//   eio->req.errorno = 0;
  +
  +//    eio->req.type = reqtype;
  +//   eio->req.cancelled = 0;
  +//   eio->req.flags = 0;
  +    eio->req.pri = pri;
  +
  +    eio->req.data = data;
  +    eio->req.finish = cb;
  +//    eio->req.destroy = Eio_destroy;
  +
  +//   eio->req.feed = NULL;
  +//   eio->req.grp = NULL;
  +//   eio->req.grp_prev = NULL;
  +//   eio->req.grp_next = NULL;
  +
   exit:
  +SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
  +
       return req;
   }
   
  +static int rpmeioReqCompare(eio_req * Areq, eio_req * Breq)
  +{
  +    int rc = 0;
  +#ifdef       NOTYET
  +rpmeioDumpREQ(__FUNCTION__, Areq, NULL);
  +rpmeioDumpREQ(__FUNCTION__, Breq, NULL);
  +
  +    Eio_destroy(Areq);
  +#endif
  +
  +    return rc;
  +}
   
   /*==============================================================*/
   eio_req *Eio_wd_open   (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req * req = eio_wd_open(path, pri, cb, data);
  +#else
  +    eio_req * req = rpmeioReq(EIO_WD_OPEN, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
  +    
       return req;
   }
   
   eio_req *Eio_wd_close  (eio_wd wd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_wd_close(wd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_WD_CLOSE, wd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_nop       (int pri, eio_cb cb, void *data)
   {
  -    eio_req *req = eio_nop(pri,cb, data);
  +#ifdef       DYING
  +    eio_req *req = eio_nop(pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_NOP, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_busy      (eio_tstamp delay, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_busy(delay, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_BUSY, delay, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_sync      (int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_sync(pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SYNC, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fsync     (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fsync(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FSYNC, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fdatasync (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fdatasync(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FDATASYNC, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_syncfs    (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_syncfs(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SYNC, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_msync     (void *addr, size_t length, int flags, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_msync(addr, length, flags, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MSYNC, addr, length, flags, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_mtouch    (void *addr, size_t length, int flags, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_mtouch(addr, length, flags, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MTOUCH, addr, length, flags, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_mlock     (void *addr, size_t length, int pri, eio_cb cb, void 
*data)
   {
  +#ifdef       DYING
       eio_req *req = eio_mlock(addr, length, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MLOCK, addr, length, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_mlockall  (int flags, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_mlockall(flags, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MLOCKALL, flags, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_sync_file_range (int fd, off_t offset, size_t nbytes, unsigned 
int flags, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_sync_file_range(fd, offset, nbytes, flags, pri, cb, 
data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SYNC_FILE_RANGE, fd, offset, nbytes, flags, 
pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fallocate (int fd, int mode, off_t offset, size_t len, int pri, 
eio_cb cb, void *data)
   {
  -    eio_req *req = eio_fallocate (fd, mode, offset, len, pri, cb, data);
  +#ifdef       DYING
  +    eio_req *req = eio_fallocate(fd, mode, offset, len, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FALLOCATE, fd, mode, offset, len, pri, cb, 
data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_close     (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_close(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_CLOSE, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_readahead (int fd, off_t offset, size_t length, int pri, eio_cb 
cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_readahead(fd, offset, length, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_READAHEAD, fd, offset, length, pri, cb, 
data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_seek      (int fd, off_t offset, int whence, int pri, eio_cb 
cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_seek(fd, offset, whence, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SEEK, fd, offset, whence, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_read      (int fd, void *buf, size_t length, off_t offset, int 
pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_read(fd, buf, length, offset, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_READ, fd, buf, length, offset, pri, cb, 
data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_write     (int fd, void *buf, size_t length, off_t offset, int 
pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_write(fd, buf, length, offset, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_WRITE, fd, buf, length, offset, pri, cb, 
data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fstat     (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fstat(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FSTAT, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fstatvfs  (int fd, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fstatvfs(fd, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FSTATVFS, fd, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_futime    (int fd, eio_tstamp atime, eio_tstamp mtime, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_futime(fd, atime, mtime, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FUTIME, fd, atime, mtime, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_ftruncate (int fd, off_t offset, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_ftruncate(fd, offset, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FTRUNCATE, fd, offset, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fchmod    (int fd, mode_t mode, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fchmod(fd, mode, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FCHMOD, fd, mode, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_fchown    (int fd, eio_uid_t uid, eio_gid_t gid, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_fchown(fd, uid, gid, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_FCHOWN, fd, uid, gid, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_dup2      (int fd, int fd2, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_dup2(fd, fd2, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_DUP2, fd, fd2, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_sendfile  (int out_fd, int in_fd, off_t in_offset, size_t 
length, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_sendfile(out_fd, in_fd, in_offset, length, pri, cb, 
data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SENDFILE, out_fd, in_fd, in_offset, length, 
pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_open      (const char *path, int flags, mode_t mode, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_open(path, flags, mode, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_OPEN, path, flags, mode, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_utime     (const char *path, eio_tstamp atime, eio_tstamp 
mtime, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_utime(path, atime, mtime, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_UTIME, path, atime, mtime, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_truncate  (const char *path, off_t offset, int pri, eio_cb cb, 
void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_truncate(path, offset, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_TRUNCATE, path, offset, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_chown     (const char *path, eio_uid_t uid, eio_gid_t gid, int 
pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_chown(path, uid, gid, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_CHOWN, path, uid, gid, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_chmod     (const char *path, mode_t mode, int pri, eio_cb cb, 
void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_chmod(path, mode, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_CHMOD, path, mode, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_mkdir     (const char *path, mode_t mode, int pri, eio_cb cb, 
void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_mkdir(path, mode, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MKDIR, path, mode, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_readdir   (const char *path, int flags, int pri, eio_cb cb, 
void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_readdir(path, flags, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_READDIR, path, flags, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_rmdir     (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_rmdir(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_RMDIR, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_unlink    (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_unlink(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_UNLINK, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_readlink  (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_readlink(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_READLINK, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_realpath  (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_realpath(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_REALPATH, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_stat      (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_stat(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_STAT, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_lstat     (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_lstat(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_LSTAT, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_statvfs   (const char *path, int pri, eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_statvfs(path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_STATVFS, path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_mknod     (const char *path, mode_t mode, dev_t dev, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_mknod(path, mode, dev, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_MKNOD, path, mode, dev, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_link      (const char *path, const char *new_path, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_link(path, new_path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_LINK, path, new_path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_symlink   (const char *path, const char *new_path, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_symlink(path, new_path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_SYMLINK, path, new_path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_rename    (const char *path, const char *new_path, int pri, 
eio_cb cb, void *data)
   {
  +#ifdef       DYING
       eio_req *req = eio_rename(path, new_path, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_RENAME, path, new_path, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
   
   eio_req *Eio_custom    (void (*execute)(eio_req *), int pri, eio_cb cb, void 
*data)
   {
  +#ifdef       DYING
       eio_req *req = eio_custom(execute, pri, cb, data);
  +#else
  +    eio_req *req = rpmeioReq(EIO_CUSTOM, execute, pri, cb, data);
  +    Eio_submit(req);
  +#endif       /* DYING */
   SPEW("<-- %s(%s|%p) req %p\n", __FUNCTION__, REQ_TYPE(req), REQ_DATA(req), 
req);
       return req;
   }
  @@ -1095,7 +1482,45 @@
   {
       rpmeio eio = (rpmeio) _eio;
       if (eio) {
  -     eio->reqtype = 0;
  +
  +#ifdef       NOTYET
  +     if (eio->req.flags & EIO_FLAG_PTR1_FREE)
  +         eio->req.ptr1 = _free(eio->req.ptr1);
  +     if (eio->req.flags & EIO_FLAG_PTR2_FREE)
  +         eio->req.ptr2 = _free(eio->req.ptr2);
  +#endif
  +     eio->req.ptr1 = NULL;
  +     eio->req.ptr2 = NULL;
  +
  +     eio->req.next = NULL;
  +     eio->req.wd = NULL;
  +     eio->req.result = 0;
  +     eio->req.offs = 0;
  +     eio->req.size = 0;
  +     eio->req.ptr1 = NULL;
  +     eio->req.ptr2 = NULL;
  +     eio->req.nv1 = 0.0;
  +     eio->req.nv2 = 0.0;
  +     eio->req.int1 = 0;
  +     eio->req.int2 = 0;
  +     eio->req.int3 = 0;
  +     eio->req.errorno = 0;
  +
  +     eio->req.type = 0;
  +     eio->req.cancelled = 0;
  +     eio->req.flags = 0;
  +     eio->req.pri = 0;
  +
  +     eio->req.data = NULL;
  +     eio->req.finish = NULL;
  +     eio->req.destroy = NULL;
  +
  +     eio->req.feed = NULL;
  +     eio->req.grp = NULL;
  +     eio->req.grp_prev = NULL;
  +     eio->req.grp_next = NULL;
  +     eio->req.grp_first = NULL;
  +
       }
   }
   
  @@ -1107,7 +1532,34 @@
   {
       rpmeio eio = rpmeioGetPool(_rpmeioPool);
   
  -    eio->reqtype = reqtype;
  +     eio->req.next = NULL;
  +     eio->req.wd = NULL;
  +     eio->req.result = 0;
  +     eio->req.offs = 0;
  +     eio->req.size = 0;
  +     eio->req.ptr1 = NULL;
  +     eio->req.ptr2 = NULL;
  +     eio->req.nv1 = 0.0;
  +     eio->req.nv2 = 0.0;
  +     eio->req.int1 = 0;
  +     eio->req.int2 = 0;
  +     eio->req.int3 = 0;
  +     eio->req.errorno = 0;
  +
  +    eio->req.type = reqtype;
  +     eio->req.cancelled = 0;
  +     eio->req.flags = 0;
  +    eio->req.pri = 0;
  +
  +    eio->req.data = NULL;
  +    eio->req.finish = NULL;
  +    eio->req.destroy = Eio_destroy;
  +
  +     eio->req.feed = NULL;
  +     eio->req.grp = NULL;
  +     eio->req.grp_prev = NULL;
  +     eio->req.grp_next = NULL;
  +     eio->req.grp_first = NULL;
   
       return rpmeioLink(eio);
   }
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmeio.h
  ============================================================================
  $ cvs diff -u -r1.1.2.2 -r1.1.2.3 rpmeio.h
  --- rpm/rpmio/rpmeio.h        15 Jun 2017 07:16:18 -0000      1.1.2.2
  +++ rpm/rpmio/rpmeio.h        16 Jun 2017 06:14:09 -0000      1.1.2.3
  @@ -85,9 +85,7 @@
   
   struct rpmeio_s {
       struct rpmioItem_s _item;        /*!< usage mutex and pool identifier. */
  -    eio_req *req;
  -    eio_req _req;
  -    rpmeioType reqtype;
  +    eio_req req;
   };
   
   RPM_GNUC_CONST
  @@ -104,8 +102,9 @@
   
   void rpmeioLoop(void);
   
  -void rpmeioCancel(eio_req * req);
  -void rpmeioCancel(eio_req * req);
  +void Eio_cancel(eio_req * req);
  +void Eio_destroy(eio_req * req);
  +void Eio_submit(eio_req * req);
   
   int rpmeioCB(eio_req * req);
   int rpmeioCB_readdir(eio_req * req);
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to