URI: 
       tNew function to generate a stream's hash - synk - synchronize files between hosts
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e107f99cfc32c18f5c8902f461b70336973de2d5
   DIR parent fcee4829b1e08b2e87a49f3c64a15108eceeba3a
  HTML Author: Willy <willyatmailoodotorg>
       Date:   Mon, 22 Aug 2016 08:24:00 +0200
       
       New function to generate a stream's hash
       
       Diffstat:
         M synk.c                              |      27 +++++++++++++++++++++++++++
       
       1 file changed, 27 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/synk.c b/synk.c
       t@@ -10,6 +10,7 @@
        #include <sys/types.h>
        
        #include "arg.h"
       +#include "sha512.h"
        
        #define SERVER_HOST    "127.0.0.1"
        #define SERVER_PORT    9723
       t@@ -34,6 +35,7 @@ long gettimestamp(const char *path);
        int handleclient(int cfd, struct in_addr inet);
        int server(in_addr_t host, in_port_t port);
        int client(in_addr_t host, in_port_t port, const char *path);
       +int sha512(FILE *stream, unsigned char *hash);
        
        void
        usage(char *name)
       t@@ -43,6 +45,31 @@ usage(char *name)
        }
        
        /*
       + * Generate sha512 hash from stream, and store it in hash, which must
       + * be able to store 64 bytes.
       + */
       +int
       +sha512(FILE *stream, unsigned char *hash)
       +{
       +        sha512_state md;
       +        size_t len = 0;
       +        unsigned char buf[128];
       +
       +        if (sha512_init(&md) != 0) {
       +                perror("sha512_init");
       +                return 1;
       +        }
       +
       +        while ((len = fread(buf, 128, 1, stream)) > 0) {
       +                if (sha512_process(&md, buf, len) != 0) {
       +                        return 1;
       +                }
       +        }
       +
       +        return sha512_done(&md, hash);
       +}
       +
       +/*
         * Returns the UNIX timestamp for the given file, or -1 in case stat(2)
         * is in error.
         */