#include #include #include /* g++ -I amd64/include snappy.c amd64/lib/libsnappy.a -o snappy zcat snappy-1.0.5.tar.gz|tee snappy-1.0.5.tar|./snappy>snappy-1.0.5.tar.sn ./snappy -dsnappy.c.sn ./snappy -d= 2 && 0==strcmp(argv[1], "-d")) { decompress(); } else { compress(); } return 0; } void decompress() { int count=0; size_t isz, osz; char ibuf[BUFSZ]; char obuf[BUFSZ]; while (1) { osz = fread(&isz, 8, 1, stdin); if (osz < 1 || isz == 0) { break; } fread(ibuf, 1, isz, stdin); osz = BUFSZ; if (SNAPPY_OK != snappy_uncompress(ibuf, isz, obuf, &osz)) { fprintf(stderr, "fail block %i\n", count); } fwrite(obuf, 1, osz, stdout); count++; } } const short OVERHEAD = 4; void compress() { int count; size_t isz, osz; char ibuf[BUFSZ+1]; char obuf[BUFSZ+BUFSZ/OVERHEAD]; while (!feof(stdin)) { isz = fread(ibuf, 1, BUFSZ, stdin); osz = BUFSZ+BUFSZ/OVERHEAD; if (SNAPPY_OK != snappy_compress(ibuf, isz, obuf, &osz)) { fprintf(stderr, "bad block %i\n", count); } fwrite(&osz, 8, 1, stdout); fwrite(obuf, 1, osz, stdout); if (isz < BUFSZ) { break; } count++; } }