CPPFLAGS += -I../ -I$(ZSTDLIB_PATH) -I$(ZSTDLIB_PATH)/common
CFLAGS ?= -O3
-CFLAGS += -g
+CFLAGS += -g -Wall -Wextra -Wcast-qual -Wcast-align -Wconversion \
+ -Wformat=2 -Wstrict-aliasing=1
SEEKABLE_OBJS = ../zstdseek_compress.c ../zstdseek_decompress.c $(ZSTDLIB)
seekable_tests : seekable_tests.c $(SEEKABLE_OBJS)
clean:
- @rm -f core *.o tmp* result* *.zst \
+ @$(RM) core *.o tmp* result* *.zst \
seekable_tests
@echo Cleaning completed
/*===== Independent seek table management =====*/
-ZSTDLIB_API size_t ZSTD_seekable_copySeekTable(ZSTD_seekable* zs, ZSTD_seekTable** out);
+ZSTDLIB_API ZSTD_seekTable* ZSTD_seekTable_create_fromSeekable(const ZSTD_seekable* zs);
ZSTDLIB_API size_t ZSTD_seekTable_free(ZSTD_seekTable* st);
/*===== Direct seek table access functions =====*/
{
buffWrapper_t* const buff = (buffWrapper_t*) opaque;
unsigned long long newOffset;
+ assert(offset >= 0);
switch (origin) {
case SEEK_SET:
- newOffset = offset;
+ newOffset = (unsigned long long)offset;
break;
case SEEK_CUR:
- newOffset = (unsigned long long)buff->pos + offset;
+ newOffset = (unsigned long long)buff->pos + (unsigned long long)offset;
break;
case SEEK_END:
- newOffset = (unsigned long long)buff->size + offset;
+ newOffset = (unsigned long long)buff->size + (unsigned long long)offset;
break;
default:
assert(0); /* not possible */
return 0;
}
-size_t ZSTD_seekable_copySeekTable(ZSTD_seekable* zs, ZSTD_seekTable** out)
+ZSTD_seekTable* ZSTD_seekTable_create_fromSeekable(const ZSTD_seekable* zs)
{
ZSTD_seekTable* const st = malloc(sizeof(ZSTD_seekTable));
- if (st==NULL) return ERROR(memory_allocation);
+ if (st==NULL) return NULL;
st->checksumFlag = zs->seekTable.checksumFlag;
st->tableLen = zs->seekTable.tableLen;
seekEntry_t* const entries = (seekEntry_t*)malloc(entriesSize);
if (entries==NULL) {
free(st);
- return ERROR(memory_allocation);
+ return NULL;
}
memcpy(entries, zs->seekTable.entries, entriesSize);
st->entries = entries;
-
- *out = st;
- return 0;
+ return st;
}
size_t ZSTD_seekTable_free(ZSTD_seekTable* st)
zs->decompressedOffset = zs->seekTable.entries[targetFrame].dOffset;
zs->curFrame = targetFrame;
+ assert(zs->seekTable.entries[targetFrame].cOffset < LLONG_MAX);
CHECK_IO(zs->src.seek(zs->src.opaque,
- zs->seekTable.entries[targetFrame].cOffset,
+ (long long)zs->seekTable.entries[targetFrame].cOffset,
SEEK_SET));
zs->in = (ZSTD_inBuffer){zs->inBuff, 0, 0};
XXH64_reset(&zs->xxhState, 0);