/* Get chunk count */
ssize_t zck_get_chunk_count(zckCtx *zck)
__attribute__ ((warn_unused_result));
+/* Get chunk by number */
+zckChunk *zck_get_chunk(zckCtx *zck, size_t number)
+ __attribute__ ((warn_unused_result));
/* Get first chunk */
zckChunk *zck_get_first_chunk(zckCtx *zck)
__attribute__ ((warn_unused_result));
/* Get compressed chunk size */
ssize_t zck_get_chunk_comp_size(zckChunk *idx)
__attribute__ ((warn_unused_result));
+/* Get chunk number */
+ssize_t zck_get_chunk_number(zckChunk *idx)
+ __attribute__ ((warn_unused_result));
/* Get validity of current chunk - 1 = valid, 0 = missing, -1 = invalid */
int zck_get_chunk_valid(zckChunk *idx)
__attribute__ ((warn_unused_result));
return zck->index.count;
}
+zckChunk PUBLIC *zck_get_chunk(zckCtx *zck, size_t number) {
+ VALIDATE_PTR(zck);
+
+ for(zckChunk *idx=zck->index.first; idx!=NULL; idx=idx->next) {
+ if(idx->number == number)
+ return idx;
+ }
+ zck_log(ZCK_LOG_WARNING, "Chunk %lu not found", number);
+ return NULL;
+}
+
zckChunk PUBLIC *zck_get_first_chunk(zckCtx *zck) {
VALIDATE_PTR(zck);
return idx->comp_length;
}
+ssize_t PUBLIC zck_get_chunk_number(zckChunk *idx) {
+ if(idx && idx->zck) {
+ VALIDATE_INT(idx->zck);
+ ALLOCD_INT(idx->zck, idx);
+ } else {
+ ALLOCD_INT(NULL, idx);
+ }
+
+ return idx->number;
+}
+
int PUBLIC zck_get_chunk_valid(zckChunk *idx) {
if(idx && idx->zck) {
VALIDATE_INT(idx->zck);
if(arguments.show_chunks) {
printf(" Chunk Checksum %*c Start Comp size Size\n",
(((int)zck_get_chunk_digest_size(zck)*2)-9), ' ');
- ssize_t count=0;
- for(zckChunk *chk = zck_get_first_chunk(zck); chk;
- chk=zck_get_next_chunk(chk), count++) {
+ for(zckChunk *chk=zck_get_first_chunk(zck); chk;
+ chk=zck_get_next_chunk(chk)) {
char *digest = zck_get_chunk_digest(chk);
if(digest == NULL) {
dprintf(STDERR_FILENO, "%s", zck_get_error(zck));
exit(1);
}
- printf("%12lu %s %12lu %12lu %12lu", count, digest,
+ printf("%12lu %s %12lu %12lu %12lu",
+ (long unsigned)zck_get_chunk_number(chk),
+ digest,
(long unsigned)zck_get_chunk_start(chk),
(long unsigned)zck_get_chunk_comp_size(chk),
(long unsigned)zck_get_chunk_size(chk));
zck_free(&zck);
exit(1);
}
+ zckChunk *chunk1 = zck_get_chunk(zck, 1);
+ if(chunk == NULL) {
+ printf("%s", zck_get_error(zck));
+ zck_free(&zck);
+ exit(1);
+ }
+ if(chunk != chunk1) {
+ printf("Chunk first->next != chunk 1\n");
+ zck_free(&zck);
+ exit(1);
+ }
ssize_t chunk_size = zck_get_chunk_size(chunk);
if(chunk_size < 0) {
printf("%s", zck_get_error(zck));