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:   18-Apr-2017 13:14:42
  Branch: rpm-5_4                          Handle: 2017041811144101

  Modified files:           (Branch: rpm-5_4)
    rpm                     CHANGES
    rpm/rpmio               bzdio.c gzdio.c librpmio.vers rpmio.c rpmio.h
                            rpmio_internal.h rpmrpc.c xzdio.c

  Log:
    - rpmio: add fchdir+fchmod+fchown+fincore+flock+futimes.

  Summary:
    Revision    Changes     Path
    1.3501.2.533+1  -0      rpm/CHANGES
    2.24.4.3    +1  -1      rpm/rpmio/bzdio.c
    2.17.4.3    +1  -2      rpm/rpmio/gzdio.c
    2.199.2.67  +8  -0      rpm/rpmio/librpmio.vers
    1.230.2.41  +246 -71    rpm/rpmio/rpmio.c
    1.97.2.11   +70 -42     rpm/rpmio/rpmio.h
    2.127.2.10  +93 -33     rpm/rpmio/rpmio_internal.h
    2.99.2.8    +27 -327    rpm/rpmio/rpmrpc.c
    1.14.4.3    +2  -2      rpm/rpmio/xzdio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.3501.2.532 -r1.3501.2.533 CHANGES
  --- rpm/CHANGES       17 Apr 2017 18:19:07 -0000      1.3501.2.532
  +++ rpm/CHANGES       18 Apr 2017 11:14:41 -0000      1.3501.2.533
  @@ -1,4 +1,5 @@
   5.4.17 -> 5.4.18:
  +    - jbj: rpmio: add fchdir+fchmod+fchown+fincore+flock+futimes.
       - jbj: rpmio: add fallocate+fdatasync+fadvise+fsync.
       - jbj: install: use clock_gettime/gettimeofday/time for *.rpm timestamps.
       - jbj: build: add usecs to RPMTAG_BUILDTIME/RPMTAG_COOKIE.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/bzdio.c
  ============================================================================
  $ cvs diff -u -r2.24.4.2 -r2.24.4.3 bzdio.c
  --- rpm/rpmio/bzdio.c 24 Sep 2014 13:03:03 -0000      2.24.4.2
  +++ rpm/rpmio/bzdio.c 18 Apr 2017 11:14:41 -0000      2.24.4.3
  @@ -369,7 +369,7 @@
   #ifdef       NOTYET          /* XXX persistent URI cache prevents pop */
       fdPop(fd); fdPush(fd, bzdio, bz, fileno(bz->fp));
   #else
  -    fdSetFdno(fd, -1);               /* XXX skip the fdio close */
  +    (void) fdSetFdno(fd, -1);                /* XXX skip the fdio close */
       fdPush(fd, bzdio, bz, fdno);             /* Push bzdio onto stack */
   #endif
       return fdLink(fd, "bzdFdopen");
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/gzdio.c
  ============================================================================
  $ cvs diff -u -r2.17.4.2 -r2.17.4.3 gzdio.c
  --- rpm/rpmio/gzdio.c 24 Sep 2014 13:03:03 -0000      2.17.4.2
  +++ rpm/rpmio/gzdio.c 18 Apr 2017 11:14:42 -0000      2.17.4.3
  @@ -281,8 +281,7 @@
       rpmGZFILE rpmgz;
   
       if (fmode == NULL) return NULL;
  -    fdno = fdFileno(fd);
  -    fdSetFdno(fd, -1);               /* XXX skip the fdio close */
  +    fdno = fdSetFdno(fd, -1);                /* XXX skip the fdio close */
       if (fdno < 0) return NULL;
       rpmgz = (rpmGZFILE) xcalloc(1, sizeof(*rpmgz));
       rpmgz->gz = gzdopen(fdno, fmode);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.199.2.66 -r2.199.2.67 librpmio.vers
  --- rpm/rpmio/librpmio.vers   17 Apr 2017 18:19:08 -0000      2.199.2.66
  +++ rpm/rpmio/librpmio.vers   18 Apr 2017 11:14:42 -0000      2.199.2.67
  @@ -102,6 +102,9 @@
       _Fchown;
       Fclose;
       _Fclose;
  +    Fchdir;
  +    Fchmod;
  +    Fchown;
       Fcntl;
       _Fcntl;
       Fdatasync;
  @@ -121,6 +124,8 @@
       Fileno;
       _Fileno;
       _fini;
  +    Fincore;
  +    Flock;
       Fopen;
       _Fopen;
       fpio;
  @@ -147,6 +152,7 @@
       Fts_open;
       Fts_read;
       Fts_set;
  +    Futimes;
       Fwrite;
       _Fwrite;
       get_date;
  @@ -236,6 +242,8 @@
       Mmap;
       Mount;
       Mprotect;
  +    Mremap;
  +    Msync;
       Munmap;
       noLibio;
       _odbc_debug;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.230.2.40 -r1.230.2.41 rpmio.c
  --- rpm/rpmio/rpmio.c 17 Apr 2017 19:25:27 -0000      1.230.2.40
  +++ rpm/rpmio/rpmio.c 18 Apr 2017 11:14:42 -0000      1.230.2.41
  @@ -5,6 +5,10 @@
   #include "system.h"
   #include <stdarg.h>
   
  +#if defined(HAVE_SYS_FILE_H)
  +#include <sys/file.h>
  +#endif
  +
   #if defined(HAVE_MACHINE_TYPES_H)
   # include <machine/types.h>
   #endif
  @@ -274,7 +278,7 @@
       }
       fd = fdNew("open (fdDup)");
       fdSetOpen(fd, "fdDup", nfdno, 0);        /* XXX bogus */
  -    fdSetFdno(fd, nfdno);
  +    (void) fdSetFdno(fd, nfdno);
   DBGIO(fd, (stderr, "<-- fdDup(%d) fd %p %s\n", fdno, (fd ? fd : NULL), 
fdbg(fd)));
       return fd;
   }
  @@ -477,70 +481,14 @@
       return (int) rc;
   }
   
  -#ifdef       DEBUGGING
  -static size_t mmincore(const char * msg, void * b, size_t nb)
  -{   
  -    size_t cnt = 0; 
  -    size_t pagesize = sysconf(_SC_PAGESIZE);
  -    size_t npages = (nb + pagesize-1)/pagesize;
  -    unsigned char * vec = alloca(npages+1);
  -      
  -    if (msg)
  -     fprintf(stderr, "%s:", msg);
  -    if (Mincore(b, nb, vec) == -1) {
  -     perror("mincore");
  -     goto exit;
  -    }
  -    for (size_t i = 0; i < npages; i++) {
  -     if (!vec[i] & 0x1)
  -         continue;
  -     cnt++;
  -    }
  -  
  -exit:
  -    fprintf(stderr, " %u\n", (unsigned)cnt);
  -    return cnt;
  -}
  -
  -static size_t fmincore(const char * msg, int fdno)
  -{   
  -    size_t cnt = 0;
  -    void * mapped = MAP_FAILED;
  -    size_t nmapped = 0;
  -    struct stat sb;
  -  
  -    if (fstat(fdno, &sb) == -1) {
  -     perror("fstat failed");
  -     goto exit;
  -    }
  -    if (sb.st_size == 0)
  -     goto exit;
  -  
  -    nmapped = sb.st_size;
  -    mapped = mmap(NULL, nmapped, PROT_READ|PROT_WRITE, MAP_SHARED, fdno, 0);
  -    if (mapped == MAP_FAILED) {
  -     perror("fmincore mmap failed");
  -     goto exit;
  -    }
  -  
  -    cnt = mmincore(msg, mapped, nmapped);
  -  
  -    if (munmap(mapped, nmapped) == -1) {
  -     perror("fmincore munmap failed");
  -     goto exit;
  -    }
  -  
  -exit:
  -    return cnt;
  -}
  -#endif
  -
   static int fdSync(FD_t fd)
   {
       int rc = -2;
       int fdno = fdFileno(fd);
   
       if (fdno >= 0 && RPMFD_ISSET(fd, FSYNC)) {
  +     if (RPMFD_ISSET(fd, DEBUGIO))
  +         (void) Fincore(fd);
        if (RPMFD_ISSET(fd, FDATASYNC)) {
            rc = Fdatasync(fd);
            if (rc < 0 && errno != ENOSYS)      /* XXX best effort */
  @@ -556,6 +504,8 @@
        rc = Fsync(fd);
        if (rc < 0 && errno != ENOSYS)          /* XXX best effort */
            goto exit;
  +     if (RPMFD_ISSET(fd, DEBUGIO))
  +         (void) Fincore(fd);
       }
       rc = 0;
   
  @@ -576,8 +526,7 @@
       if (RPMFD_ISSET(fd, FSYNC))
        rc = fdSync(fd);
   
  -    fdno = fdFileno(fd);
  -    fdSetFdno(fd, -1);
  +    fdno = fdSetFdno(fd, -1);
   
       fdstat_enter(fd, FDSTAT_CLOSE);
       /* HACK: flimsy wiring for davClose */
  @@ -683,7 +632,7 @@
       }
       fd = fdNew("open (fdOpen)");
       fdSetOpen(fd, path, oflags, mode);
  -    fdSetFdno(fd, fdno);
  +    (void) fdSetFdno(fd, fdno);
   assert(fd != NULL);
       fd->flags = flags;
   DBGIO(fd, (stderr, "<--\tfdOpen(\"%s\",%x,0%o) %s\n", path, (unsigned)flags, 
(unsigned)mode, fdbg(fd)));
  @@ -1066,7 +1015,7 @@
   fprintf(stderr,"++ connect %s:%d on fdno %d\n", inet_ntoa(sin.sin_addr) 
(int)ntohs(sin.sin_port), fdno);
   #endif       /* HAVE_GETADDRINFO */
   
  -    fdSetFdno(ctrl, (fdno >= 0 ? fdno : -1));
  +    (void) fdSetFdno(ctrl, (fdno >= 0 ? fdno : -1));
       return 0;
   
   errxit:
  @@ -1511,7 +1460,7 @@
   
        for (res = res0; res != NULL; res = res->ai_next) {
            rc = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
  -         fdSetFdno(data, (rc >= 0 ? rc : -1));
  +         (void) fdSetFdno(data, (rc >= 0 ? rc : -1));
            if (rc < 0) {
                if (res->ai_next)
                    continue;
  @@ -1562,7 +1511,7 @@
       }
   
       rc = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  -    fdSetFdno(data, (rc >= 0 ? rc : -1));
  +    (void) fdSetFdno(data, (rc >= 0 ? rc : -1));
       if (rc < 0) {
        rc = FTPERR_FAILED_CONNECT;
        goto errxit;
  @@ -2997,14 +2946,14 @@
   
   int Fileno(FD_t fd)
   {
  -    int i, rc = -1;
  +    int rc = -1;
   
       if (fd == NULL)
  -        return -1;
  +        return rc;
       if (fd->req != NULL)
        rc = 123456789; /* HACK: https has no steenkin fileno. */
       else
  -    for (i = fd->nfps ; rc == -1 && i >= 0; i--) {
  +    for (int i = fd->nfps ; rc == -1 && i >= 0; i--) {
        rc = fd->fps[i].fdno;
       }
   
  @@ -3014,12 +2963,238 @@
       return rc;
   }
   
  -/* XXX this is naive */
  -int Fcntl(FD_t fd, int op, void *lip)
  +/* =============================================================== */
  +#define      fdSyscall(_syscall)     (fdno >= 0 ? (_syscall) : -2)
  +
  +int Fcntl(FD_t fd, int cmd, ...)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    va_list ap;
  +    void * arg = NULL;
  +    int rc = -2;
  +
  +    va_start(ap, cmd);
  +    arg = va_arg(ap, void *);
  +    va_end(ap);
  +
  +    fdstat_enter(fd, FDSTAT_FCNTL);
  +    rc = fdSyscall( fcntl(fdno, cmd, arg) );
  +    fdstat_exit(fd, FDSTAT_FCNTL, 0);
  +
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Flock(FD_t fd, int op)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    fdstat_enter(fd, FDSTAT_FLOCK);
  +    int rc = fdSyscall( flock(fdno, op) );
  +    fdstat_exit(fd, FDSTAT_FLOCK, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fchdir(FD_t fd)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    fdstat_enter(fd, FDSTAT_FCHDIR);
  +    int rc = fdSyscall( fchdir(fdno) );
  +    fdstat_exit(fd, FDSTAT_FCHDIR, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fchmod(FD_t fd, mode_t mode)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    fdstat_enter(fd, FDSTAT_FCHMOD);
  +    int rc = fdSyscall( fchdir(fdno) );
  +    fdstat_exit(fd, FDSTAT_FCHMOD, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fchown(FD_t fd, uid_t uid, gid_t gid)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    fdstat_enter(fd, FDSTAT_FCHOWN);
  +    int rc = fdSyscall( fchown(fdno, uid, gid) );
  +    fdstat_exit(fd, FDSTAT_FCHOWN, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Futimes(FD_t fd, const struct timeval tv[2])
   {
  -    return fcntl(Fileno(fd), op, lip);
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    fdstat_enter(fd, FDSTAT_FUTIMES);
  +    int rc = fdSyscall( futimes(fdno, tv) );
  +    fdstat_exit(fd, FDSTAT_FUTIMES, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fchflags(FD_t fd, unsigned int flags)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +    fdstat_enter(fd, FDSTAT_FCHFLAGS);
  +#if defined(HAVE_FCHFLAGS)
  +    rc = fdSyscall( fchflags(fdno, flags) );
  +#else
  +    errno = ENOSYS;
  +#endif
  +    fdstat_exit(fd, FDSTAT_FCHFLAGS, 0);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
   }
   
  +int Fadvise(FD_t fd, off_t offset, off_t len, int advice)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +    if (fdno < 0) {
  +     /* XXX remap non-local errno */
  +     if (errno == EINVAL)
  +         errno = ESPIPE;
  +    }
  +    fdstat_enter(fd, FDSTAT_FADVISE);
  +    switch (advice) {
  +#if defined(HAVE_POSIX_FADVISE)
  +    case POSIX_FADV_NORMAL:
  +    case POSIX_FADV_SEQUENTIAL:
  +    case POSIX_FADV_RANDOM:
  +    case POSIX_FADV_NOREUSE:
  +    case POSIX_FADV_WILLNEED:
  +    case POSIX_FADV_DONTNEED:
  +     rc = fdSyscall( posix_fadvise(fdno, offset, len, advice) );
  +#else
  +     errno = ENOSYS;
  +#endif
  +     break;
  +    default:
  +     errno = EINVAL;
  +     goto exit;
  +     break;
  +    }
  +    fdstat_exit(fd, FDSTAT_FADVISE, len);
  +
  +exit:
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +#undef HAVE_FALLOCATE  /* XXX hmmm, fallocate64 is AWOL in F11. */
  +int Fallocate(FD_t fd, off_t offset, off_t len)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +    fdstat_enter(fd, FDSTAT_FALLOCATE);
  +#if defined(HAVE_POSIX_FALLOCATE)
  +    rc = fdSyscall( posix_fallocate(fdno, offset, len) );
  +#elif defined(HAVE_FALLOCATE)
  +    /* XXX linux FALLOC_FL_KEEP_SIZE zeroes allocated blocks */
  +    rc = fdSyscall( fallocate(fdno, 0, (loff_t)offset, (loff_t)len) );
  +#else
  +    errno = ENOSYS;
  +#endif
  +    fdstat_exit(fd, FDSTAT_FALLOCATE, len);
  +
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Ftruncate(FD_t fd, off_t len)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +#if defined(HAVE_FTRUNCATE)
  +    rc = fdSyscall( ftruncate(fdno, len) );
  +#else
  +    errno = ENOSYS;
  +#endif
  +
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fdatasync(FD_t fd)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +    fdstat_enter(fd, FDSTAT_FDATASYNC);
  +#if defined(HAVE_FDATASYNC)
  +    rc = fdSyscall( fdatasync(fdno) );
  +#else
  +    errno = ENOSYS;
  +#endif
  +    fdstat_exit(fd, FDSTAT_FDATASYNC, 0);    /* XXX #bytes? */
  +
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fsync(FD_t fd)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    int rc = -2;
  +
  +    fdstat_enter(fd, FDSTAT_FSYNC);
  +#if defined(HAVE_FDATASYNC)
  +    rc = fdSyscall( fdatasync(fdno) );
  +#else
  +    errno = ENOSYS;
  +#endif
  +    fdstat_exit(fd, FDSTAT_FSYNC, 0);                /* XXX #bytes? */
  +
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +int Fincore(FD_t fd)
  +{
  +    int fdno = fdSyscallPre(__FUNCTION__, fd, 1, NULL);
  +    void * mapped = MAP_FAILED;
  +    size_t nmapped = 0;
  +    size_t pagesize = sysconf(_SC_PAGESIZE);
  +    struct stat sb;
  +    size_t npages;
  +    unsigned char * vec;
  +    int rc = -2;
  +  
  +    fdstat_enter(fd, FDSTAT_FINCORE);
  +    if (fdno < 0)
  +     goto exit;
  +
  +    rc = fstat(fdno, &sb);
  +    if (rc)
  +     goto exit;
  +    if (sb.st_size == 0)
  +     goto exit;
  +  
  +    nmapped = sb.st_size;
  +    mapped = Mmap(NULL, nmapped, PROT_NONE, MAP_PRIVATE, fd, 0);
  +    if (mapped == MAP_FAILED) {
  +     rc = -1;
  +     goto exit;
  +    }
  +
  +    npages = (nmapped + pagesize-1)/pagesize;
  +    vec = alloca(npages+1);
  +    rc = Mincore(mapped, nmapped, vec);
  +    if (rc)
  +     goto exit;
  +  
  +    rc = 0;
  +    for (size_t i = 0; i < npages; i++) {
  +     if (!vec[i] & 0x1)
  +         continue;
  +     rc++;
  +    }
  +  
  +exit:
  +    if (mapped != MAP_FAILED)
  +     (void) Munmap(mapped, nmapped);
  +    fdstat_exit(fd, FDSTAT_FINCORE, (rc >= 0 ? rc : 0) * pagesize);
  +    return fdSyscallPost(__FUNCTION__, fd, fdno, rc);
  +}
  +
  +#undef       fdSyscall
  +
   /* =============================================================== */
   /* Helper routines that may be generally useful.
    */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.h
  ============================================================================
  $ cvs diff -u -r1.97.2.10 -r1.97.2.11 rpmio.h
  --- rpm/rpmio/rpmio.h 17 Apr 2017 18:19:08 -0000      1.97.2.10
  +++ rpm/rpmio/rpmio.h 18 Apr 2017 11:14:42 -0000      1.97.2.11
  @@ -160,7 +160,68 @@
   /**
    * fcntl(2) clone.
    */
  -int Fcntl(FD_t fd, int op, void *lip);
  +int Fcntl(FD_t fd, int cmd, ...);
  +
  +/**
  + * flock(2) clone.
  + */
  +int Flock(FD_t fd, int op);
  +
  +/**
  + * fchdir(2) clone.
  + */
  +int Fchdir(FD_t fd);
  +
  +/**
  + * fchmod(2) clone.
  + */
  +int Fchmod(FD_t fd, mode_t mode);
  +
  +/**
  + * fchown(2) clone.
  + */
  +int Fchown(FD_t fd, uid_t uid, gid_t gid);
  +
  +/**
  + * futimes(2) clone.
  + */
  +int Futimes(FD_t fd, const struct timeval tv[2]);
  +
  +/**
  + * fchflags(2) clone.
  + */
  +int Fchflags(FD_t fd, unsigned int flags);
  +
  +/**
  + * posix_fadvise(2) clone.
  + */
  +int Fadvise(FD_t fd, off_t offset, off_t length, int advice);
  +
  +/**
  + * posix_fallocate(3)/fallocate(2) clone.
  + */
  +int Fallocate(FD_t fd, off_t offset, off_t length);
  +
  +/**
  + * ftruncate(2) clone.
  + */
  +int Ftruncate(FD_t fd, off_t len);
  +
  +/**
  + * fdatasync(2) clone.
  + */
  +int Fdatasync(FD_t fd);
  +
  +/**
  + * fsync(2) clone.
  + */
  +int Fsync(FD_t fd);
  +
  +/**
  + * Return no. of pages in cache (using mmap(2) and mincore(2)).
  + * @return           no. of pages in core, -1 on error
  + */
  +int Fincore(FD_t fd);
   
   /*@}*/
   
  @@ -230,39 +291,24 @@
   int Fstat(FD_t fd, struct stat * st);
   
   /**
  - * posix_fadvise(2) clone.
  - */
  -int Fadvise(FD_t fd, off_t offset, off_t length, int advice);
  -
  -/**
  - * posix_fallocate(3)/fallocate(2) clone.
  - */
  -int Fallocate(FD_t fd, off_t offset, off_t length);
  -
  -/**
  - * ftruncate(2) clone.
  - */
  -int Ftruncate(FD_t fd, off_t len);
  -
  -/**
  - * fdatasync(2) clone.
  + * mmap(2) clone.
    */
  -int Fdatasync(FD_t fd);
  +void *Mmap(void *addr, size_t len, int prot, int flags, FD_t fd, off_t 
offset);
   
   /**
  - * fsync(2) clone.
  + * munmap(2) clone.
    */
  -int Fsync(FD_t fd);
  +int Munmap(void * addr, size_t len);
   
   /**
  - * mmap(2) clone.
  + * msync(2) clone.
    */
  -void *Mmap(void *addr, size_t len, int prot, int flags, FD_t fd, off_t 
offset);
  +int Msync(void * addr, size_t len, int flags);
   
   /**
  - * munmap(2) clone.
  + * mremap(2) clone.
    */
  -int Munmap(void * addr, size_t len);
  +void *Mremap(void * oaddr, size_t olen, size_t nlen, int flags, ...);
   
   /**
    * mprotect(2) clone.
  @@ -309,12 +355,6 @@
   int Chown(const char * path, uid_t owner, gid_t group);
   
   /**
  - * fchown(2) clone.
  - * @todo Implement remotely.
  - */
  -int Fchown(FD_t fd, uid_t owner, gid_t group);
  -
  -/**
    * lchown(2) clone.
    * @todo Implement remotely.
    */
  @@ -333,12 +373,6 @@
   int Lchmod(const char * path, mode_t mode);
   
   /**
  - * fchmod(2) clone.
  - * @todo Implement remotely.
  - */
  -int Fchmod(FD_t fd, mode_t mode);
  -
  -/**
    * chflags(2) clone.
    * @todo Implement remotely.
    */
  @@ -351,12 +385,6 @@
   int Lchflags(const char * path, unsigned int flags);
   
   /**
  - * fchflags(2) clone.
  - * @todo Implement remotely.
  - */
  -int Fchflags(FD_t fd, unsigned int flags);
  -
  -/**
    * mkfifo(3) clone.
    * @todo Implement remotely.
    */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio_internal.h
  ============================================================================
  $ cvs diff -u -r2.127.2.9 -r2.127.2.10 rpmio_internal.h
  --- rpm/rpmio/rpmio_internal.h        17 Apr 2017 19:25:27 -0000      
2.127.2.9
  +++ rpm/rpmio/rpmio_internal.h        18 Apr 2017 11:14:42 -0000      
2.127.2.10
  @@ -27,15 +27,24 @@
    * Identify per-desciptor I/O operation statistics.
    */
   typedef enum fdOpX_e {
  -    FDSTAT_READ              = 0,    /*!< read statistics index. */
  -    FDSTAT_WRITE     = 1,    /*!< write statistics index. */
  -    FDSTAT_SEEK              = 2,    /*!< seek statistics index. */
  -    FDSTAT_CLOSE     = 3,    /*!< close statistics index */
  -    FDSTAT_DIGEST    = 4,    /*!< digest statistics index. */
  -    FDSTAT_FALLOCATE = 5,    /*!< fallocate statistics index. */
  -    FDSTAT_FDATASYNC = 6,    /*!< fdatasync statistics index. */
  -    FDSTAT_FADVISE   = 7,    /*!< fadvise statistics index. */
  -    FDSTAT_FSYNC     = 8,    /*!< fsync statistics index. */
  +    FDSTAT_READ              =  0,   /*!< read statistics index. */
  +    FDSTAT_WRITE     =  1,   /*!< write statistics index. */
  +    FDSTAT_SEEK              =  2,   /*!< seek statistics index. */
  +    FDSTAT_CLOSE     =  3,   /*!< close statistics index */
  +    FDSTAT_DIGEST    =  4,   /*!< digest statistics index. */
  +    FDSTAT_OPEN              =  5,   /*!< open statistics index. */
  +    FDSTAT_FCNTL     =  6,   /*!< fcntl statistics index. */
  +    FDSTAT_FLOCK     =  7,   /*!< flock statistics index. */
  +    FDSTAT_FCHDIR    =  8,   /*!< fchdir statistics index. */
  +    FDSTAT_FCHMOD    =  9,   /*!< fchmod statistics index. */
  +    FDSTAT_FCHOWN    = 10,   /*!< fchown statistics index. */
  +    FDSTAT_FUTIMES   = 11,   /*!< futimes statistics index. */
  +    FDSTAT_FCHFLAGS  = 12,   /*!< fchflags statistics index. */
  +    FDSTAT_FALLOCATE = 13,   /*!< fallocate statistics index. */
  +    FDSTAT_FDATASYNC = 14,   /*!< fdatasync statistics index. */
  +    FDSTAT_FADVISE   = 15,   /*!< fadvise statistics index. */
  +    FDSTAT_FSYNC     = 16,   /*!< fsync statistics index. */
  +    FDSTAT_FINCORE   = 17,   /*!< fincore statistics index. */
       FDSTAT_MAX
   } fdOpX;
   
  @@ -305,10 +314,13 @@
   /** \ingroup rpmio
    */
   static inline
  -void fdSetFdno(FD_t fd, int fdno)
  +int fdSetFdno(FD_t fd, int fdno)
   {
  +    int ofdno;
       FDSANE(fd);
  +    ofdno = fd->fps[fd->nfps].fdno;
       fd->fps[fd->nfps].fdno = fdno;
  +    return ofdno;
   }
   
   /** \ingroup rpmio
  @@ -355,7 +367,7 @@
       rpmop op = NULL;
   
       if (fd != NULL && fd->stats != NULL && (int)opx >= 0 && opx < FDSTAT_MAX)
  -        op = fd->stats->ops + opx;
  +     op = fd->stats->ops + opx;
       return op;
   }
   
  @@ -413,38 +425,34 @@
       if (fd == NULL || fd->stats == NULL) return;
       for (int opx = 0; opx < FDSTAT_MAX; opx++) {
        static const char *const names[] = {
  -         [FDSTAT_READ]       = "  read",
  -         [FDSTAT_WRITE]      = " write",
  -         [FDSTAT_SEEK]       = "  seek",
  +         [FDSTAT_READ]       = "    read",
  +         [FDSTAT_WRITE]      = "   write",
  +         [FDSTAT_SEEK]       = "    seek",
   #ifdef       NOISY
  -         [FDSTAT_CLOSE]      = " close",
  +         [FDSTAT_CLOSE]      = "   close",
   #endif
  -         [FDSTAT_DIGEST]     = "digest",
  -         [FDSTAT_FALLOCATE]  = " alloc",
  -         [FDSTAT_FDATASYNC]  = " dsync",
  +         [FDSTAT_DIGEST]     = "  digest",
  +         [FDSTAT_OPEN]       = "    open",
  +         [FDSTAT_FCNTL]      = "    cntl",
  +         [FDSTAT_FLOCK]      = "    lock",
  +         [FDSTAT_FCHDIR]     = "   chdir",
  +         [FDSTAT_FCHMOD]     = "   chmod",
  +         [FDSTAT_FCHOWN]     = "   chown",
  +         [FDSTAT_FUTIMES]    = "  utimes",
  +         [FDSTAT_FCHFLAGS]   = " chflags",
  +         [FDSTAT_FALLOCATE]  = "   alloc",
   #ifdef       NOISY
  -         [FDSTAT_FADVISE]    = "advise",
  +         [FDSTAT_FADVISE]    = "  advise",
   #endif
  -         [FDSTAT_FSYNC]      = "  sync",
  +         [FDSTAT_FDATASYNC]  = "datasync",
  +         [FDSTAT_FSYNC]      = "    sync",
  +         [FDSTAT_FINCORE]    = "  incore",
        };
        rpmop op = &fd->stats->ops[opx];
   
        if (names[opx] == NULL || *names[opx] == '\0') continue;
        if (op->count <= 0) continue;
   
  -     switch (opx) {
  -     case FDSTAT_READ:
  -     case FDSTAT_WRITE:
  -     case FDSTAT_SEEK:
  -     case FDSTAT_CLOSE:
  -     case FDSTAT_FALLOCATE:
  -     case FDSTAT_FDATASYNC:
  -     case FDSTAT_FADVISE:
  -     case FDSTAT_FSYNC:
  -     default:
  -         break;
  -     }
  -
        if (msg != NULL) fprintf(fp, "%s:", msg);
        fprintf(fp, "%8d %s(s), %8lu total bytes in %d.%06d secs\n",
                op->count, names[opx], (unsigned long)op->bytes,
  @@ -620,6 +628,58 @@
       return fd->fps[0].fdno;
   }
   
  +/** \ingroup rpmio
  + * Common prologue for checking wrapped system functions.
  + * @return           file descriptor
  + */
  +static inline
  +int fdSyscallPre(const char * sysname, FD_t fd, int local, const char ** 
lpathp)
  +{
  +    int fdno = Fileno(fd);
  +    const char * path = fdGetOPath(fd);
  +    const char * lpath;
  +    int ut = urlPath(path, &lpath);
  +    
  +    FDSANE(fd);
  +DBGIO(fd, (stderr, "--> %s(%p) fdno %d path %s\n", sysname, fd, fdno, path));
  +
  +    if (fdno < 0) {
  +     errno = EBADF;
  +     goto exit;
  +    }
  +
  +    if (local)                       /* XXX Restrict to local file paths? */
  +    switch (ut) {
  +    case URL_IS_PATH:
  +    case URL_IS_UNKNOWN:
  +     break;
  +    default:
  +     fdno = -1;
  +     errno = EINVAL;
  +     goto exit;
  +     break;
  +    }
  +
  +exit:
  +    if (lpathp)
  +     *lpathp = lpath;
  +    return fdno;
  +}
  +
  +/** \ingroup rpmio
  + * Common epilogue for checking wrapped system functions.
  + * @return           exit code
  + */
  +static inline
  +int fdSyscallPost(const char * sysname, FD_t fd, int fdno, int rc)
  +{
  +    if (rc < 0)
  +     rpmlog(RPMLOG_DEBUG, _("%s(%d) failed: rc %d %m\n"),
  +             __FUNCTION__, fdno, rc);
  +DBGIO(fd, (stderr, "<-- %s(%p) fdno %d rc %d\n", sysname, fd, fdno, rc));
  +    return rc;
  +}
  +
   #ifdef __cplusplus
   }
   #endif
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmrpc.c
  ============================================================================
  $ cvs diff -u -r2.99.2.7 -r2.99.2.8 rpmrpc.c
  --- rpm/rpmio/rpmrpc.c        17 Apr 2017 19:53:09 -0000      2.99.2.7
  +++ rpm/rpmio/rpmrpc.c        18 Apr 2017 11:14:42 -0000      2.99.2.8
  @@ -1430,242 +1430,12 @@
       return rc;
   }
   
  -int Fadvise(FD_t fd, off_t offset, off_t len, int advice)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -    int fdno = Fileno(fd);
  -
  -    FDSANE(fd);
  -DBGIO(fd, (stderr, "--> %s(%p,0x%x,0x%x,0x%x) fdno %d path %s\n", 
__FUNCTION__, fd, (unsigned)offset, (unsigned)len, advice, fdno, path));
  -
  -    /* XXX errno is not set by fallocate/posix_fallocate */
  -    if (fd == NULL || fdno < 0) {
  -     errno = EBADF;
  -     goto exit;
  -    }
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -    case URL_IS_UNKNOWN:
  -     break;
  -    default:
  -     errno = ESPIPE; 
  -     goto exit;
  -     break;
  -    }
  -
  -    switch (advice) {
  -#if defined(HAVE_POSIX_FADVISE)
  -    case POSIX_FADV_NORMAL:
  -    case POSIX_FADV_SEQUENTIAL:
  -    case POSIX_FADV_RANDOM:
  -    case POSIX_FADV_NOREUSE:
  -    case POSIX_FADV_WILLNEED:
  -    case POSIX_FADV_DONTNEED:
  -     fdstat_enter(fd, FDSTAT_FADVISE);
  -     rc = posix_fadvise(fdno, offset, len, advice);
  -     fdstat_exit(fd, FDSTAT_FADVISE, len);
  -#else
  -     errno = ENOSYS;
  -     goto exit;
  -#endif
  -     break;
  -    default:
  -     errno = EINVAL;
  -     goto exit;
  -     break;
  -    }
  -
  -exit:
  -    if (rc != 0)
  -     rpmlog(RPMLOG_DEBUG, _("%s(%d,0x%x,0x%x) failed: rc %d %m\n"),
  -             __FUNCTION__, fdno, (unsigned)offset, (unsigned)len, rc);
  -
  -    return rc;
  -}
  -
  -#undef HAVE_FALLOCATE  /* XXX hmmm, fallocate64 is AWOL in F11. */
  -int Fallocate(FD_t fd, off_t offset, off_t len)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -    int fdno = Fileno(fd);
  -
  -    FDSANE(fd);
  -DBGIO(fd, (stderr, "--> %s(%p,0x%x,0x%x) fdno %d path %s\n", __FUNCTION__, 
fd, (unsigned)offset, (unsigned)len, fdno, path));
  -
  -    /* XXX errno is not set by fallocate/posix_fallocate */
  -    if (fd == NULL || fdno < 0) {
  -     errno = EBADF;
  -     goto exit;
  -    }
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -    case URL_IS_UNKNOWN:
  -     break;
  -    default:
  -     errno = ENODEV; 
  -     goto exit;
  -     break;
  -    }
  -
  -#if defined(HAVE_POSIX_FALLOCATE)
  -    fdstat_enter(fd, FDSTAT_FALLOCATE);
  -    rc = posix_fallocate(fdno, offset, len);
  -    fdstat_exit(fd, FDSTAT_FALLOCATE, len);
  -#elif defined(HAVE_FALLOCATE)
  -    /* XXX linux FALLOC_FL_KEEP_SIZE zeroes allocated blocks */
  -    fdstat_enter(fd, FDSTAT_FALLOCATE);
  -    rc = (int) fallocate(fdno, 0, (loff_t)offset, (loff_t)len);
  -    fdstat_exit(fd, FDSTAT_FALLOCATE, len);
  -#else
  -    errno = ENOSYS;
  -#endif
  -
  -exit:
  -    if (rc != 0)
  -     rpmlog(RPMLOG_DEBUG, _("%s(%d,0x%x,0x%x) failed: rc %d %m\n"),
  -             __FUNCTION__, fdno, (unsigned)offset, (unsigned)len, rc);
  -
  -    return rc;
  -}
  -
  -int Ftruncate(FD_t fd, off_t len)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -    int fdno = Fileno(fd);
  -
  -    FDSANE(fd);
  -DBGIO(fd, (stderr, "--> %s(%p,0x%x) fdno %d path %s\n", __FUNCTION__, fd, 
(unsigned)len, fdno, path));
  -
  -    if (fd == NULL || fdno < 0) {
  -     errno = EBADF;
  -     goto exit;
  -    }
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -    case URL_IS_UNKNOWN:
  -     break;
  -    default:
  -     errno = EINVAL; 
  -     goto exit;
  -     break;
  -    }
  -
  -#if defined(HAVE_FTRUNCATE)
  -    rc = ftruncate(fdno, len);
  -#else
  -    errno = ENOSYS;
  -#endif
  -
  -exit:
  -    if (rc != 0)
  -     rpmlog(RPMLOG_DEBUG, _("%s(%d,0x%x) failed: rc %d %m\n"),
  -             __FUNCTION__, fdno, (unsigned)len, rc);
  -
  -    return rc;
  -}
  -
  -int Fdatasync(FD_t fd)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -    int fdno = Fileno(fd);
  -
  -    FDSANE(fd);
  -DBGIO(fd, (stderr, "--> %s(%p) fdno %d path %s\n", __FUNCTION__, fd, fdno, 
path));
  -
  -    if (fd == NULL || fdno < 0) {
  -     errno = EBADF;
  -     goto exit;
  -    }
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -    case URL_IS_UNKNOWN:
  -     break;
  -    default:
  -     errno = EINVAL; 
  -     goto exit;
  -     break;
  -    }
  -
  -#if defined(HAVE_FDATASYNC)
  -    fdstat_enter(fd, FDSTAT_FDATASYNC);
  -    rc = fdatasync(fdno);
  -    fdstat_exit(fd, FDSTAT_FDATASYNC, 0);    /* XXX #bytes? */
  -#else
  -    errno = ENOSYS;
  -#endif
  -
  -exit:
  -    if (rc != 0)
  -     rpmlog(RPMLOG_DEBUG, _("%s(%d) failed: rc %d %m\n"),
  -             __FUNCTION__, fdno, rc);
  -
  -    return rc;
  -}
  -
  -int Fsync(FD_t fd)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -    int fdno = Fileno(fd);
  -
  -    FDSANE(fd);
  -DBGIO(fd, (stderr, "--> %s(%p) fdno %d path %s\n", __FUNCTION__, fd, fdno, 
path));
  -
  -    if (fd == NULL || fdno < 0) {
  -     errno = EBADF;
  -     goto exit;
  -    }
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -    case URL_IS_UNKNOWN:
  -     break;
  -    default:
  -     errno = EINVAL; 
  -     goto exit;
  -     break;
  -    }
  -
  -#if defined(HAVE_FDATASYNC)
  -    fdstat_enter(fd, FDSTAT_FSYNC);
  -    rc = fdatasync(fdno);
  -    fdstat_exit(fd, FDSTAT_FSYNC, 0);        /* XXX #bytes? */
  -#else
  -    errno = ENOSYS;
  -#endif
  -
  -exit:
  -    if (rc != 0)
  -     rpmlog(RPMLOG_DEBUG, _("%s(%d) failed: rc %d %m\n"),
  -             __FUNCTION__, fdno, rc);
  -
  -    return rc;
  -}
  -
   void *Mmap(void *addr, size_t len, int prot, int flags,
                     FD_t fd, off_t offset)
   {
       int fdno = (fd ? Fileno(fd) : -1);
       void * ret = mmap(addr, len, prot, flags, fdno, offset);
  -    if (ret == NULL || ret == (void *)-1)
  +    if (ret == NULL || ret == MAP_FAILED)
        rpmlog(RPMLOG_ERR, _("%s(%p[%u],0x%x,0x%x,%p,0x%x) failed: %m\n"),
                __FUNCTION__, addr, (unsigned)len, prot, flags, fd,
                (unsigned)offset);
  @@ -1685,6 +1455,32 @@
       return rc;
   }
   
  +int Msync(void * addr, size_t len, int flags)
  +{
  +    int rc = msync(addr, len, flags);
  +    if (rc < 0)
  +     rpmlog(RPMLOG_ERR, _("%s(%p[%u],%d) failed: %m\n"),
  +             __FUNCTION__, addr, (unsigned)len, flags);
  +if (_rpmio_debug)
  +fprintf(stderr, "<-- %s(%p[%u],%d) rc %d\n", __FUNCTION__, addr, 
(unsigned)len, flags, rc);
  +    return rc;
  +}
  +
  +void * Mremap(void * oaddr, size_t olen, size_t nlen, int flags, ...)
  +{
  +    va_list ap;
  +    va_start(ap, flags);
  +    void * naddr = va_arg(ap, void *);
  +    va_end(ap);
  +    void * ret = mremap(oaddr, olen, nlen, flags, naddr);
  +    if (ret == NULL || ret == MAP_FAILED)
  +     rpmlog(RPMLOG_ERR, _("%s(%p[%u => %u],%d,%p) failed: %m\n"),
  +             __FUNCTION__, oaddr, (unsigned)olen, (unsigned)nlen, flags, 
naddr);
  +if (_rpmio_debug)
  +fprintf(stderr, "<-- %s(%p[%u => %u],%d,%p) ret %p\n", __FUNCTION__, oaddr, 
(unsigned)olen, (unsigned)nlen, flags, naddr, ret);
  +    return ret;
  +}
  +
   int Mprotect(void * addr, size_t len, int prot)
   {
       int rc = mprotect(addr, len, prot);
  @@ -1859,37 +1655,6 @@
       return rc;
   }
   
  -int Fchown(FD_t fd, uid_t owner, gid_t group)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -     path = lpath;
  -     /*@fallthrough@*/
  -    case URL_IS_UNKNOWN:
  -     break;
  -    case URL_IS_DASH:
  -    case URL_IS_HKP:
  -    case URL_IS_FTP:         /* XXX TODO: implement. */
  -    case URL_IS_HTTP:                /* XXX TODO: implement. */
  -    case URL_IS_HTTPS:               /* XXX TODO: implement. */
  -    case URL_IS_MONGO:       /* XXX FIXME */
  -    default:
  -     errno = EINVAL;         /* XXX W2DO? */
  -     goto exit;
  -     break;
  -    }
  -    rc = fchown(Fileno(fd), owner, group);
  -exit:
  -if (_rpmio_debug)
  -fprintf(stderr, "<-- %s(%p,%u,%u) path %s rc %d\n", __FUNCTION__, fd, 
(unsigned)owner, (unsigned)group, path, rc);
  -    return rc;
  -}
  -
   int Lchown(const char * path, uid_t owner, gid_t group)
   {
       int rc = -2;
  @@ -1984,37 +1749,6 @@
       return rc;
   }
   
  -int Fchmod(FD_t fd, mode_t mode)
  -{
  -    int rc = -2;
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -
  -    switch (ut) {
  -    case URL_IS_PATH:
  -     path = lpath;
  -     /*@fallthrough@*/
  -    case URL_IS_UNKNOWN:
  -     break;
  -    case URL_IS_DASH:
  -    case URL_IS_HKP:
  -    case URL_IS_FTP:         /* XXX TODO: implement. */
  -    case URL_IS_HTTP:                /* XXX TODO: implement. */
  -    case URL_IS_HTTPS:               /* XXX TODO: implement. */
  -    case URL_IS_MONGO:       /* XXX FIXME */
  -    default:
  -     errno = EINVAL;         /* XXX W2DO? */
  -     goto exit;
  -     break;
  -    }
  -    rc = fchmod(Fileno(fd), mode);
  -exit:
  -if (_rpmio_debug)
  -fprintf(stderr, "<-- %s(%p,%0o) path %s rc %d\n", __FUNCTION__, fd, 
(int)mode, path, rc);
  -    return rc;
  -}
  -
   int Chflags(const char * path, unsigned int flags)
   {
       int rc = -2;
  @@ -2083,40 +1817,6 @@
       return rc;
   }
   
  -int Fchflags(FD_t fd, unsigned int flags)
  -{
  -    int rc = -2;
  -#if defined(HAVE_FCHFLAGS)
  -    const char * path = fdGetOPath(fd);
  -    const char * lpath;
  -    int ut = urlPath(path, &lpath);
  -
  -if (_rpmio_debug)
  -fprintf(stderr, "*** Fchflags(%p,0x%x) path %s\n", fd, flags, path);
  -    switch (ut) {
  -    case URL_IS_PATH:
  -     path = lpath;
  -     /*@fallthrough@*/
  -    case URL_IS_UNKNOWN:
  -     break;
  -    case URL_IS_DASH:
  -    case URL_IS_HKP:
  -    case URL_IS_FTP:         /* XXX TODO: implement. */
  -    case URL_IS_HTTP:                /* XXX TODO: implement. */
  -    case URL_IS_HTTPS:               /* XXX TODO: implement. */
  -    case URL_IS_MONGO:       /* XXX FIXME */
  -    default:
  -     errno = EINVAL;         /* XXX W2DO? */
  -     goto exit;
  -     break;
  -    }
  -    rc = fchflags(Fileno(fd), flags);
  -exit:
  -#else
  -    errno = ENOSYS;
  -#endif
  -    return rc;
  -}
   int Mkfifo(const char * path, mode_t mode)
   {
       const char * lpath;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/xzdio.c
  ============================================================================
  $ cvs diff -u -r1.14.4.2 -r1.14.4.3 xzdio.c
  --- rpm/rpmio/xzdio.c 24 Sep 2014 13:03:04 -0000      1.14.4.2
  +++ rpm/rpmio/xzdio.c 18 Apr 2017 11:14:42 -0000      1.14.4.3
  @@ -311,7 +311,7 @@
       XZFILE *xzfile;
   
   assert(fmode != NULL);
  -    fdSetFdno(fd, -1);          /* XXX skip the fdio close */
  +    (void) fdSetFdno(fd, -1);          /* XXX skip the fdio close */
       if (fdno < 0) return NULL;
       xzfile = lzdopen(fdno, fmode);
       if (xzfile == NULL) return NULL;
  @@ -348,7 +348,7 @@
       XZFILE *xzfile;
   
   assert(fmode != NULL);
  -    fdSetFdno(fd, -1);          /* XXX skip the fdio close */
  +    (void) fdSetFdno(fd, -1);          /* XXX skip the fdio close */
       if (fdno < 0) return NULL;
       xzfile = xzdopen(fdno, fmode);
       if (xzfile == NULL) return NULL;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to