]> git.ozlabs.org Git - ccan/blobdiff - ccan/crcsync/_info
Rename _info.c to _info: this means we can simple compile *.c.
[ccan] / ccan / crcsync / _info
diff --git a/ccan/crcsync/_info b/ccan/crcsync/_info
new file mode 100644 (file)
index 0000000..52e2ebe
--- /dev/null
@@ -0,0 +1,83 @@
+#include <stdio.h>
+#include <string.h>
+#include "config.h"
+
+/**
+ * crcsync - routines to use crc for an rsync-like protocol.
+ *
+ * This is a complete library for synchronization using a variant of the
+ * rsync protocol.
+ *
+ * Example:
+ *     // Calculate checksums of file (3-arg mode)
+ *     // Or print differences between file and checksums (4+ arg mode)
+ *     #include <ccan/crcsync/crcsync.h>
+ *     #include <ccan/grab_file/grab_file.h>
+ *     #include <stdio.h>
+ *     #include <stdlib.h>
+ *     #include <err.h>
+ *     
+ *     static void print_result(long result)
+ *     {
+ *             if (result < 0)
+ *                     printf("MATCHED CRC %lu\n", -result - 1);
+ *             else if (result > 0)
+ *                     printf("%lu literal bytes\n", result);
+ *     }
+ *     
+ *     int main(int argc, char *argv[])
+ *     {
+ *             size_t len, used, blocksize;
+ *             char *file;
+ *             struct crc_context *ctx;
+ *             uint32_t *crcs;
+ *             long res, i;
+ *     
+ *             if (argc < 3 || (blocksize = atoi(argv[1])) == 0)
+ *                     errx(1, "Usage: %s <blocksize> <file> <crc>...\n"
+ *                          "OR: %s <blocksize> <file>", argv[0], argv[0]);
+ *     
+ *             file = grab_file(NULL, argv[2], &len);
+ *             if (!file)
+ *                     err(1, "Opening file %s", argv[2]);
+ *     
+ *             if (argc == 3) {
+ *                     // Short form prints CRCs of file for use in long form.
+ *                     used = (len + blocksize - 1) / blocksize;
+ *                     crcs = malloc(used * sizeof(uint32_t));
+ *                     crc_of_blocks(file, len, blocksize, 32, crcs);
+ *                     for (i = 0; i < used; i++)
+ *                             printf("%i ", crcs[i]);
+ *                     printf("\n");
+ *                     return 0;
+ *             }
+ *     
+ *             crcs = malloc((argc - 3) * sizeof(uint32_t));
+ *             for (i = 0; i < argc-3; i++)
+ *                     crcs[i] = atoi(argv[3+i]);
+ *     
+ *             ctx = crc_context_new(blocksize, 32, crcs, argc-3);
+ *             for (used = 0; used < len; ) {
+ *                     used += crc_read_block(ctx, &res, file+used, len-used);
+ *                     print_result(res);
+ *             }
+ *             while ((res = crc_read_flush(ctx)) != 0)
+ *                     print_result(res);
+ *     
+ *             return 0;
+ *     }
+ *
+ * Licence: LGPL (v2 or any later version)
+ */
+int main(int argc, char *argv[])
+{
+       if (argc != 2)
+               return 1;
+
+       if (strcmp(argv[1], "depends") == 0) {
+               printf("ccan/crc\n");
+               return 0;
+       }
+
+       return 1;
+}