+++ /dev/null
-/*
- * add a file/files to an sqlite db
- * in the 'files' table.
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include <sys/mman.h>
-
-#include "lzma.h"
-
-#include "sha256.h"
-
-void *compresslzma(void *buf, size_t bufsize, size_t *len) {
- /* xz compress it */
- size_t outsize;
- void *outbuf;
- size_t outlen = 0;
-
- outsize = lzma_stream_buffer_bound(bufsize);
- outbuf = malloc(outsize);
- /* TODO adjust encoding level for size */
- lzma_easy_buffer_encode(6, LZMA_CHECK_CRC64, NULL,
- buf, bufsize,
- outbuf, &outlen, outsize
- );
- *len = outlen;
- return outbuf;
-}
-
-int main(int ac, char **av){
- int i, j;
-
- /* insert each file */
- for (i = 1; i < ac; i++) {
- int fd;
- void *content;
- struct stat sbuf;
- unsigned char tmp[32];
- char hash[65]; /* hash in hex */
- hash_state md;
-
- fd = open(av[i], O_RDONLY);
- if (fd == -1) {
- exit(1);
- }
- if (fstat(fd, &sbuf) == -1) {
- exit(1);
- }
- /* not a regular file? */
- if (!S_ISREG(sbuf.st_mode)) {
- exit(1);
- }
-
- content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0);
- if (!content) {
- exit(2);
- }
-
- sha256_init(&md);
- sha256_process(&md, content, sbuf.st_size);
- sha256_done(&md, tmp);
- for (j=0;j<32;j++) {
- sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
- }
- hash[64] = 0;
- fprintf(stderr, "file %s: %s\n", av[i], hash);
-
- /* xz compress it */
- size_t outlen = 0;
- FILE *save;
- void *outbuf;
-
- outbuf = compresslzma(content, sbuf.st_size, &outlen);
- save = fopen("foo.xz", "w");
- fwrite(outbuf, outlen, 1, save);
- fclose(save);
- free(outbuf);
-
- //Find out the maximum size of the compressed output for single-call compression:
-// zlib: compressBound()
-// liblzma: lzma_stream_buffer_bound()
-
-// Compressing:
-//zlib: compress() or compress2()
- // liblzma: lzma_easy_buffer_encode() or lzma_stream_buffer_encode()
-
- // Decompressing:
-//zlib: uncompress()
- // liblzma: lzma_stream_buffer_decode()
-
- // See container.h (src/liblzma/api/lzma/container.h in the source tree) for details how to use these functions.
-
- /* either way we're done with this now */
- munmap(content, sbuf.st_size);
- }
- return 0;
-}