]>
git.proxmox.com Git - ceph.git/blob - ceph/src/zstd/examples/simple_decompression.c
2 * Copyright 2016-present, Yann Collet, Facebook, Inc.
5 * This source code is licensed under the license found in the
6 * LICENSE-examples file in the root directory of this source tree.
11 #include <stdlib.h> // malloc, exit
12 #include <stdio.h> // printf
13 #include <string.h> // strerror
14 #include <errno.h> // errno
15 #include <sys/stat.h> // stat
16 #include <zstd.h> // presumes zstd library is installed
19 static off_t
fsize_X(const char *filename
)
22 if (stat(filename
, &st
) == 0) return st
.st_size
;
24 printf("stat: %s : %s \n", filename
, strerror(errno
));
28 static FILE* fopen_X(const char *filename
, const char *instruction
)
30 FILE* const inFile
= fopen(filename
, instruction
);
31 if (inFile
) return inFile
;
33 printf("fopen: %s : %s \n", filename
, strerror(errno
));
37 static void* malloc_X(size_t size
)
39 void* const buff
= malloc(size
);
40 if (buff
) return buff
;
42 printf("malloc: %s \n", strerror(errno
));
46 static void* loadFile_X(const char* fileName
, size_t* size
)
48 off_t
const buffSize
= fsize_X(fileName
);
49 FILE* const inFile
= fopen_X(fileName
, "rb");
50 void* const buffer
= malloc_X(buffSize
);
51 size_t const readSize
= fread(buffer
, 1, buffSize
, inFile
);
52 if (readSize
!= (size_t)buffSize
) {
53 printf("fread: %s : %s \n", fileName
, strerror(errno
));
56 fclose(inFile
); /* can't fail (read only) */
62 static void decompress(const char* fname
)
65 void* const cBuff
= loadFile_X(fname
, &cSize
);
66 unsigned long long const rSize
= ZSTD_getDecompressedSize(cBuff
, cSize
);
68 printf("%s : original size unknown. Use streaming decompression instead. \n", fname
);
71 void* const rBuff
= malloc_X((size_t)rSize
);
73 size_t const dSize
= ZSTD_decompress(rBuff
, rSize
, cBuff
, cSize
);
76 printf("error decoding %s : %s \n", fname
, ZSTD_getErrorName(dSize
));
81 printf("%25s : %6u -> %7u \n", fname
, (unsigned)cSize
, (unsigned)rSize
);
88 int main(int argc
, const char** argv
)
90 const char* const exeName
= argv
[0];
93 printf("wrong arguments\n");
95 printf("%s FILE\n", exeName
);
101 printf("%s correctly decoded (in memory). \n", argv
[1]);