Changeset 4b0cd2f for libwandio/wandio.c


Ignore:
Timestamp:
06/30/14 13:20:00 (6 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
d19ff50
Parents:
3a3b661
Message:

Integrate lzma into libwandio properly

Update configure to detect lzma properly.
Add missing get_compression_type API function to wandio code.
Add code to detect if input file is LZMA.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libwandio/wandio.c

    r10f924c r4b0cd2f  
    4646 */
    4747
    48 struct compression_type compression_type[]  = {
    49         { "GZ",         "gz",   WANDIO_COMPRESS_ZLIB    },
    50         { "BZ2",        "bz2",  WANDIO_COMPRESS_BZ2     },
    51         { "LZO",        "lzo",  WANDIO_COMPRESS_LZO     },
     48struct wandio_compression_type compression_type[]  = {
     49        { "gzip",       "gz",   WANDIO_COMPRESS_ZLIB    },
     50        { "bzip2",      "bz2",  WANDIO_COMPRESS_BZ2     },
     51        { "lzo",        "lzo",  WANDIO_COMPRESS_LZO     },
     52        { "lzma",       "xz",  WANDIO_COMPRESS_LZMA     },
    5253        { "NONE",       "",     WANDIO_COMPRESS_NONE    }
    5354};
     
    141142        DEBUG_PIPELINE("peek");
    142143        io_t *io = peek_open(stdio_open(filename));
    143         char buffer[1024];
     144        unsigned char buffer[1024];
    144145        int len;
    145146        if (!io)
     
    151152
    152153        if (autodetect) {
    153                 if (len>=3 && buffer[0] == '\037' && buffer[1] == '\213' &&
     154                if (len>=3 && buffer[0] == 0x1f && buffer[1] == 0x8b &&
    154155                                buffer[2] == 0x08) {
    155156#if HAVE_LIBZ
     
    162163                }
    163164                /* Auto detect compress(1) compressed data (gzip can read this) */
    164                 if (len>=2 && buffer[0] == '\037' && buffer[1] == '\235') {
     165                if (len>=2 && buffer[0] == 0x1f && buffer[1] == 0x9d) {
    165166#if HAVE_LIBZ
    166167                        DEBUG_PIPELINE("zlib");
     
    182183#endif
    183184                }
     185
     186                if (len >=5 && buffer[0] == 0xfd && buffer[1] == '7' &&
     187                                buffer[2] == 'z' && buffer[3] == 'X' &&
     188                                buffer[4] == 'Z') {
     189#if HAVE_LIBLZMA
     190                        DEBUG_PIPELINE("lzma");
     191                        io = lzma_open(io);
     192#else
     193                        fprintf(stderr, "File %s is lzma compressed but libtrace has not been built with lzma support!\n", filename);
     194                        return NULL;
     195#endif
     196                }
    184197        }       
    185198        /* Now open a threaded, peekable reader using the appropriate module
     
    193206        DEBUG_PIPELINE("peek");
    194207        return peek_open(io);
     208}
     209
     210DLLEXPORT struct wandio_compression_type *wandio_lookup_compression_type(
     211        const char *name) {
     212
     213        struct wandio_compression_type *wct = compression_type;
     214
     215        while (strcmp(wct->name, "NONE") != 0) {
     216                if (strcmp(wct->name, name) == 0)
     217                        return wct;
     218                wct++;
     219        }
     220
     221        return NULL;
    195222}
    196223
     
    291318        }
    292319#endif
     320#if HAVE_LIBLZMA
     321        else if (compression_level != 0 &&
     322            compress_type == WANDIO_COMPRESS_LZMA) {
     323                iow = lzma_wopen(iow,compression_level);
     324        }
     325#endif
    293326        /* Open a threaded writer */
    294327        if (use_threads)
Note: See TracChangeset for help on using the changeset viewer.