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-Mar-2009 01:37:52
  Branch: rpm-5_1                          Handle: 200812152333587779834

  Added files:              (Branch: rpm-5_1)
    rpm/rpmio               xzdio.c
  Modified files:           (Branch: rpm-5_1)
    rpm                     CHANGES
    rpm/rpmio               Makefile.am
  Removed files:            (Branch: rpm-5_1)
    rpm/rpmio               lzdio.c

  Log:
    - jbj: rename lzdio.c -> xzdio.c.

  Summary:
    Revision    Changes     Path
    1.2288.2.192+1  -0      rpm/CHANGES
    1.162.2.13  +1  -1      rpm/rpmio/Makefile.am
    1.20        +0  -436    rpm/rpmio/lzdio.c
    1.11.2.2    +436 -0     rpm/rpmio/xzdio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2288.2.191 -r1.2288.2.192 CHANGES
  --- rpm/CHANGES       7 Mar 2009 12:54:47 -0000       1.2288.2.191
  +++ rpm/CHANGES       16 Mar 2009 00:37:51 -0000      1.2288.2.192
  @@ -1,4 +1,5 @@
   5.1.7 -> 5.1.8:
  +    - jbj: rename lzdio.c -> xzdio.c.
   
   5.1.6 -> 5.1.7:
       - jbj: update po files (Translation Project).
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/Makefile.am
  ============================================================================
  $ cvs diff -u -r1.162.2.12 -r1.162.2.13 Makefile.am
  --- rpm/rpmio/Makefile.am     17 Jan 2009 14:31:27 -0000      1.162.2.12
  +++ rpm/rpmio/Makefile.am     16 Mar 2009 00:37:52 -0000      1.162.2.13
  @@ -69,7 +69,7 @@
   usrlib_LTLIBRARIES = librpmio.la
   librpmio_la_SOURCES = \
        ar.c argv.c bzdio.c cpio.c crc.c digest.c fnmatch.c fts.c \
  -     getdate.c glob.c gzdio.c iosm.c lzdio.c \
  +     getdate.c glob.c gzdio.c iosm.c xzdio.c \
        macro.c mire.c mount.c poptIO.c \
        md2.c md4.c rmd128.c rmd160.c rmd256.c rmd320.c sha224.c \
        salsa10.c salsa20.c tiger.c \
  @@ .
  rm -f rpm/rpmio/lzdio.c <<'@@ .'
  Index: rpm/rpmio/lzdio.c
  ============================================================================
  [NO CHANGE SUMMARY BECAUSE FILE AS A WHOLE IS JUST REMOVED]
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/xzdio.c
  ============================================================================
  $ cvs diff -u -r0 -r1.11.2.2 xzdio.c
  --- /dev/null 2009-03-16 01:35:03 +0100
  +++ xzdio.c   2009-03-16 01:37:52 +0100
  @@ -0,0 +1,436 @@
  +/** \ingroup rpmio
  + * \file rpmio/lzdio.c
  + * Support for LZMA compression library.
  + */
  +
  +#include "system.h"
  +#include "rpmio_internal.h"
  +#include <rpmmacro.h>
  +#include <rpmcb.h>
  +
  +#if defined(HAVE_LZMA_H)
  +
  +/* provide necessary defines for inclusion of <lzma.h>
  +   similar to LZMAUtils's internal <common.h> and as
  +   explicitly stated in the top-level comment of <lzma.h> */
  +#ifndef UINT32_C
  +#    define UINT32_C(n) n ## U
  +#endif
  +#ifndef UINT32_MAX
  +#    define UINT32_MAX UINT32_C(4294967295)
  +#endif
  +#if SIZEOF_UNSIGNED_LONG == 4
  +#    ifndef UINT64_C
  +#            define UINT64_C(n) n ## ULL
  +#    endif
  +#else
  +#    ifndef UINT64_C
  +#            define UINT64_C(n) n ## UL
  +#    endif
  +#endif
  +#ifndef UINT64_MAX
  +#    define UINT64_MAX UINT64_C(18446744073709551615)
  +#endif
  +
  +#include "lzma.h"
  +
  +#include "debug.h"
  +
  +/*...@access FD_t @*/
  +
  +#define      LZDONLY(fd)     assert(fdGetIo(fd) == lzdio)
  +
  +#define kBufferSize (1 << 15)
  +
  +typedef struct lzfile {
  +/*...@only@*/
  +    uint8_t buf[kBufferSize];        /*!< IO buffer */
  +    lzma_stream strm;                /*!< LZMA stream */
  +/*...@dependent@*/
  +    FILE * fp;
  +    int encoding;
  +    int eof;
  +} LZFILE;
  +
  +/*...@-globstate@*/
  +/*...@null@*/
  +static LZFILE *lzopen_internal(const char *path, const char *mode, int fd)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies fileSystem @*/
  +{
  +    int level = 5;
  +    int encoding = 0;
  +    FILE *fp;
  +    LZFILE *lzfile;
  +    lzma_ret ret;
  +
  +    for (; *mode != '\0'; mode++) {
  +     if (*mode == 'w')
  +         encoding = 1;
  +     else if (*mode == 'r')
  +         encoding = 0;
  +     else if (*mode >= '1' && *mode <= '9')
  +         level = (int)(*mode - '0');
  +    }
  +    if (fd != -1)
  +     fp = fdopen(fd, encoding ? "w" : "r");
  +    else
  +     fp = fopen(path, encoding ? "w" : "r");
  +    if (!fp)
  +     return NULL;
  +    lzfile = calloc(1, sizeof(*lzfile));
  +    if (!lzfile) {
  +     (void) fclose(fp);
  +     return NULL;
  +    }
  +    lzfile->fp = fp;
  +    lzfile->encoding = encoding;
  +    lzfile->eof = 0;
  +    lzma_stream tmp =
  +#if LZMA_VERSION == 49990030
  +         LZMA_STREAM_INIT_VAR;
  +#else
  +         LZMA_STREAM_INIT;
  +#endif
  +    lzfile->strm = tmp;
  +    if (encoding) {
  +#if LZMA_VERSION == 49990030
  +     lzma_options_alone options;
  +/*...@-unrecog@*/
  +     options.uncompressed_size = LZMA_VLI_VALUE_UNKNOWN;
  +/*...@=unrecog@*/
  +     memcpy(&options.lzma, &lzma_preset_lzma[level - 1], 
sizeof(options.lzma));
  +#else
  +     lzma_options_lzma options;
  +     lzma_lzma_preset(&options, level);
  +#endif
  +     ret = lzma_alone_encoder(&lzfile->strm, &options);
  +    } else {
  +#if LZMA_VERSION == 49990030
  +     ret = lzma_auto_decoder(&lzfile->strm, NULL, 0);
  +#else
  +     /* FIXME: second argument now sets memory limit, setting it to
  +      * '-1' means unlimited and isn't really recommended. A sane
  +      * default value when setting it to '0' will probably be
  +      * implemented in liblzma soon, so then we should switch
  +      * back to '0'.
  +      */
  +     ret = lzma_auto_decoder(&lzfile->strm, -1, 0);
  +#endif
  +    }
  +    if (ret != LZMA_OK) {
  +     (void) fclose(fp);
  +     memset(lzfile, 0, sizeof(*lzfile));
  +     free(lzfile);
  +     return NULL;
  +    }
  +    return lzfile;
  +}
  +/*...@=globstate@*/
  +
  +/*...@null@*/
  +static LZFILE *lzopen(const char *path, const char *mode)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies fileSystem @*/
  +{
  +    return lzopen_internal(path, mode, -1);
  +}
  +
  +/*...@null@*/
  +static LZFILE *lzdopen(int fd, const char *mode)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies fileSystem @*/
  +{
  +    if (fd < 0)
  +     return NULL;
  +    return lzopen_internal(0, mode, fd);
  +}
  +
  +static int lzflush(LZFILE *lzfile)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies lzfile, fileSystem @*/
  +{
  +    return fflush(lzfile->fp);
  +}
  +
  +static int lzclose(/*...@only@*/ LZFILE *lzfile)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies *lzfile, fileSystem @*/
  +{
  +    lzma_ret ret;
  +    size_t n;
  +    int rc;
  +
  +    if (!lzfile)
  +     return -1;
  +    if (lzfile->encoding) {
  +     for (;;) {
  +         lzfile->strm.avail_out = kBufferSize;
  +         lzfile->strm.next_out = (uint8_t *)lzfile->buf;
  +         ret = lzma_code(&lzfile->strm, LZMA_FINISH);
  +         if (ret != LZMA_OK && ret != LZMA_STREAM_END)
  +             return -1;
  +         n = kBufferSize - lzfile->strm.avail_out;
  +         if (n && fwrite(lzfile->buf, 1, n, lzfile->fp) != n)
  +             return -1;
  +         if (ret == LZMA_STREAM_END)
  +             break;
  +     }
  +    }
  +    lzma_end(&lzfile->strm);
  +    rc = fclose(lzfile->fp);
  +    memset(lzfile, 0, sizeof(*lzfile));
  +    free(lzfile);
  +    return rc;
  +}
  +
  +/*...@-mustmod@*/
  +static ssize_t lzread(LZFILE *lzfile, void *buf, size_t len)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies lzfile, *buf, fileSystem @*/
  +{
  +    lzma_ret ret;
  +    int eof = 0;
  +
  +    if (!lzfile || lzfile->encoding)
  +      return -1;
  +    if (lzfile->eof)
  +      return 0;
  +/*...@-temptrans@*/
  +    lzfile->strm.next_out = buf;
  +/*...@=temptrans@*/
  +    lzfile->strm.avail_out = len;
  +    for (;;) {
  +     if (!lzfile->strm.avail_in) {
  +         lzfile->strm.next_in = (uint8_t *)lzfile->buf;
  +         lzfile->strm.avail_in = fread(lzfile->buf, 1, kBufferSize, 
lzfile->fp);
  +         if (!lzfile->strm.avail_in)
  +             eof = 1;
  +     }
  +     ret = lzma_code(&lzfile->strm, LZMA_RUN);
  +     if (ret == LZMA_STREAM_END) {
  +         lzfile->eof = 1;
  +         return len - lzfile->strm.avail_out;
  +     }
  +     if (ret != LZMA_OK)
  +         return -1;
  +     if (!lzfile->strm.avail_out)
  +         return len;
  +     if (eof)
  +         return -1;
  +      }
  +    /*...@notreached@*/
  +}
  +/*...@=mustmod@*/
  +
  +static ssize_t lzwrite(LZFILE *lzfile, void *buf, size_t len)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies lzfile, fileSystem @*/
  +{
  +    lzma_ret ret;
  +    size_t n;
  +
  +    if (!lzfile || !lzfile->encoding)
  +     return -1;
  +    if (!len)
  +     return 0;
  +/*...@-temptrans@*/
  +    lzfile->strm.next_in = buf;
  +/*...@=temptrans@*/
  +    lzfile->strm.avail_in = len;
  +    for (;;) {
  +     lzfile->strm.next_out = (uint8_t *)lzfile->buf;
  +     lzfile->strm.avail_out = kBufferSize;
  +     ret = lzma_code(&lzfile->strm, LZMA_RUN);
  +     if (ret != LZMA_OK)
  +         return -1;
  +     n = kBufferSize - lzfile->strm.avail_out;
  +     if (n && fwrite(lzfile->buf, 1, n, lzfile->fp) != n)
  +         return -1;
  +     if (!lzfile->strm.avail_in)
  +         return len;
  +    }
  +    /*...@notreached@*/
  +}
  +
  +/* =============================================================== */
  +
  +static inline /*...@dependent@*/ void * lzdFileno(FD_t fd)
  +     /*...@*/
  +{
  +    void * rc = NULL;
  +    int i;
  +
  +    FDSANE(fd);
  +    for (i = fd->nfps; i >= 0; i--) {
  +/*...@-boundsread@*/
  +         FDSTACK_t * fps = &fd->fps[i];
  +/*...@=boundsread@*/
  +         if (fps->io != lzdio)
  +             continue;
  +         rc = fps->fp;
  +     break;
  +    }
  +    
  +    return rc;
  +}
  +
  +/*...@-globuse@*/
  +static /*...@null@*/ FD_t lzdOpen(const char * path, const char * fmode)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies fileSystem @*/
  +{
  +    FD_t fd;
  +    mode_t mode = (fmode && fmode[0] == 'w' ? O_WRONLY : O_RDONLY);
  +    LZFILE * lzfile = lzopen(path, fmode);
  +
  +    if (lzfile == NULL)
  +     return NULL;
  +    fd = fdNew("open (lzdOpen)");
  +    fdPop(fd); fdPush(fd, lzdio, lzfile, -1);
  +    fdSetOpen(fd, path, fileno(lzfile->fp), mode);
  +    return fdLink(fd, "lzdOpen");
  +}
  +/*...@=globuse@*/
  +
  +/*...@-globuse@*/
  +static /*...@null@*/ FD_t lzdFdopen(void * cookie, const char * fmode)
  +     /*...@globals fileSystem, internalState @*/
  +     /*...@modifies fileSystem, internalState @*/
  +{
  +    FD_t fd = c2f(cookie);
  +    int fdno = fdFileno(fd);
  +    LZFILE *lzfile;
  +
  +assert(fmode != NULL);
  +    fdSetFdno(fd, -1);          /* XXX skip the fdio close */
  +    if (fdno < 0) return NULL;
  +    lzfile = lzdopen(fdno, fmode);
  +    if (lzfile == NULL) return NULL;
  +    fdPush(fd, lzdio, lzfile, fdno);
  +    return fdLink(fd, "lzdFdopen");
  +}
  +/*...@=globuse@*/
  +
  +/*...@-globuse@*/
  +static int lzdFlush(void * cookie)
  +     /*...@globals fileSystem @*/
  +     /*...@modifies fileSystem @*/
  +{
  +    FD_t fd = c2f(cookie);
  +    return lzflush(lzdFileno(fd));
  +}
  +/*...@=globuse@*/
  +
  +/* =============================================================== */
  +/*...@-globuse@*/
  +/*...@-mustmod@*/          /* LCL: *buf is modified */
  +static ssize_t lzdRead(void * cookie, /*...@out@*/ char * buf, size_t count)
  +     /*...@globals fileSystem, internalState @*/
  +     /*...@modifies *buf, fileSystem, internalState @*/
  +{
  +    FD_t fd = c2f(cookie);
  +    LZFILE *lzfile;
  +    ssize_t rc = -1;
  +
  +assert(fd != NULL);
  +    if (fd->bytesRemain == 0) return 0; /* XXX simulate EOF */
  +    lzfile = lzdFileno(fd);
  +assert(lzfile != NULL);
  +    fdstat_enter(fd, FDSTAT_READ);
  +/*...@-compdef@*/
  +    rc = lzread(lzfile, buf, count);
  +/*...@=compdef@*/
  +DBGIO(fd, (stderr, "==>\tlzdRead(%p,%p,%u) rc %lx %s\n", cookie, buf, 
(unsigned)count, (unsigned long)rc, fdbg(fd)));
  +    if (rc == -1) {
  +     fd->errcookie = "Lzma: decoding error";
  +    } else if (rc >= 0) {
  +     fdstat_exit(fd, FDSTAT_READ, rc);
  +     /*...@-compdef@*/
  +     if (fd->ndigests && rc > 0) fdUpdateDigests(fd, (void *)buf, rc);
  +     /*...@=compdef@*/
  +    }
  +    return rc;
  +}
  +/*...@=mustmod@*/
  +/*...@=globuse@*/
  +
  +/*...@-globuse@*/
  +static ssize_t lzdWrite(void * cookie, const char * buf, size_t count)
  +     /*...@globals fileSystem, internalState @*/
  +     /*...@modifies fileSystem, internalState @*/
  +{
  +    FD_t fd = c2f(cookie);
  +    LZFILE *lzfile;
  +    ssize_t rc = 0;
  +
  +    if (fd == NULL || fd->bytesRemain == 0) return 0;   /* XXX simulate EOF 
*/
  +
  +    if (fd->ndigests && count > 0) fdUpdateDigests(fd, (void *)buf, count);
  +
  +    lzfile = lzdFileno(fd);
  +
  +    fdstat_enter(fd, FDSTAT_WRITE);
  +    rc = lzwrite(lzfile, (void *)buf, count);
  +DBGIO(fd, (stderr, "==>\tlzdWrite(%p,%p,%u) rc %lx %s\n", cookie, buf, 
(unsigned)count, (unsigned long)rc, fdbg(fd)));
  +    if (rc < 0) {
  +     fd->errcookie = "Lzma: encoding error";
  +    } else if (rc > 0) {
  +     fdstat_exit(fd, FDSTAT_WRITE, rc);
  +    }
  +    return rc;
  +}
  +
  +static inline int lzdSeek(void * cookie, /*...@unused@*/ _libio_pos_t pos,
  +                     /*...@unused@*/ int whence)
  +     /*...@*/
  +{
  +    FD_t fd = c2f(cookie);
  +
  +    LZDONLY(fd);
  +    return -2;
  +}
  +
  +static int lzdClose( /*...@only@*/ void * cookie)
  +     /*...@globals fileSystem, internalState @*/
  +     /*...@modifies fileSystem, internalState @*/
  +{
  +    FD_t fd = c2f(cookie);
  +    LZFILE *lzfile;
  +    const char * errcookie;
  +    int rc;
  +
  +    lzfile = lzdFileno(fd);
  +
  +    if (lzfile == NULL) return -2;
  +    errcookie = strerror(ferror(lzfile->fp));
  +
  +    fdstat_enter(fd, FDSTAT_CLOSE);
  +    /*...@-dependenttrans@*/
  +    rc = lzclose(lzfile);
  +    /*...@=dependenttrans@*/
  +    fdstat_exit(fd, FDSTAT_CLOSE, rc);
  +
  +    if (fd && rc == -1)
  +     fd->errcookie = errcookie;
  +
  +DBGIO(fd, (stderr, "==>\tlzdClose(%p) rc %lx %s\n", cookie, (unsigned 
long)rc, fdbg(fd)));
  +
  +    if (_rpmio_debug || rpmIsDebug()) fdstat_print(fd, "LZDIO", stderr);
  +    /*...@-branchstate@*/
  +    if (rc == 0)
  +     fd = fdFree(fd, "open (lzdClose)");
  +    /*...@=branchstate@*/
  +    return rc;
  +}
  +
  +/*...@-type@*/ /* LCL: function typedefs */
  +static struct FDIO_s lzdio_s = {
  +  lzdRead, lzdWrite, lzdSeek, lzdClose, lzdOpen, lzdFdopen, lzdFlush,
  +};
  +/*...@=type@*/
  +
  +FDIO_t lzdio = /*...@-compmempass@*/ &lzdio_s /*...@=compmempass@*/ ;
  +
  +#endif
  +
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to