X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Frecords.c;h=797ffa5ca3a7afcc785e9f7ce5ec6c5456649c60;hb=4e6078e4660869b9d83223c8ce842ed8dda211ab;hp=f4a9cf9ce35c46e5c92c3650ec7e6a040969301e;hpb=e43cf25b9705f8428249a707b68f0e148c51e511;p=idzebra-moved-to-github.git diff --git a/index/records.c b/index/records.c index f4a9cf9..797ffa5 100644 --- a/index/records.c +++ b/index/records.c @@ -280,6 +280,28 @@ static ZEBRA_RES rec_write_tmp_buf(Records p, int size, zint *sysnos) return ZEBRA_OK; } +int rec_check_compression_method(int compression_method) +{ + switch(compression_method) + { + case REC_COMPRESS_ZLIB: +#if HAVE_ZLIB_H + return 1; +#else + return 0; +#endif + case REC_COMPRESS_BZIP2: +#if HAVE_BZLIB_H + return 1; +#else + return 0; +#endif + case REC_COMPRESS_NONE: + return 1; + } + return 0; +} + Records rec_open(BFiles bfs, int rw, int compression_method) { Records p; @@ -735,9 +757,6 @@ static Record rec_get_int(Records p, zint sysno) char *nptr, *cptr; char *in_buf = 0; char *bz_buf = 0; -#if HAVE_BZLIB_H - unsigned int bz_size; -#endif char compression_method; assert(sysno > 0); @@ -790,49 +809,55 @@ static Record rec_get_int(Records p, zint sysno) { case REC_COMPRESS_ZLIB: #if HAVE_ZLIB_H - bz_size = entry.size * 20 + 100; - while (1) - { - uLongf destLen = bz_size; - bz_buf = (char *) xmalloc(bz_size); - i = uncompress((Bytef *) bz_buf, &destLen, - (const Bytef *) in_buf, in_size); - if (i == Z_OK) + if (1) + { + unsigned int bz_size = entry.size * 20 + 100; + while (1) { - bz_size = destLen; - break; + uLongf destLen = bz_size; + bz_buf = (char *) xmalloc(bz_size); + i = uncompress((Bytef *) bz_buf, &destLen, + (const Bytef *) in_buf, in_size); + if (i == Z_OK) + { + bz_size = destLen; + break; + } + yaz_log(YLOG_LOG, "failed"); + xfree(bz_buf); + bz_size *= 2; } - yaz_log(YLOG_LOG, "failed"); - xfree(bz_buf); - bz_size *= 2; - } - in_buf = bz_buf; - in_size = bz_size; + in_buf = bz_buf; + in_size = bz_size; + } #else - yaz_log(YLOG_FATAL, "cannot decompress record(s) in ZLIB format"); - return 0; + yaz_log(YLOG_FATAL, "cannot decompress record(s) in ZLIB format"); + return 0; #endif break; case REC_COMPRESS_BZIP2: #if HAVE_BZLIB_H - bz_size = entry.size * 20 + 100; - while (1) - { - bz_buf = (char *) xmalloc(bz_size); + if (1) + { + unsigned int bz_size = entry.size * 20 + 100; + while (1) + { + bz_buf = (char *) xmalloc(bz_size); #ifdef BZ_CONFIG_ERROR - i = BZ2_bzBuffToBuffDecompress + i = BZ2_bzBuffToBuffDecompress #else - i = bzBuffToBuffDecompress + i = bzBuffToBuffDecompress #endif - (bz_buf, &bz_size, in_buf, in_size, 0, 0); - if (i == BZ_OK) - break; - yaz_log(YLOG_LOG, "failed"); - xfree(bz_buf); - bz_size *= 2; - } - in_buf = bz_buf; - in_size = bz_size; + (bz_buf, &bz_size, in_buf, in_size, 0, 0); + if (i == BZ_OK) + break; + yaz_log(YLOG_LOG, "failed"); + xfree(bz_buf); + bz_size *= 2; + } + in_buf = bz_buf; + in_size = bz_size; + } #else yaz_log(YLOG_FATAL, "cannot decompress record(s) in BZIP2 format"); return 0;