tolerate additional IPv4 address now available for gnunet.org
[oweals/gnunet.git] / src / util / crypto_hash_file.c
index f2d49d164394c71c8f848399760210d29d891169..83afe5e91b7a157a1e199d524ddfcde1f972a1e3 100644 (file)
@@ -2,20 +2,20 @@
      This file is part of GNUnet.
      Copyright (C) 2001-2013 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 
 */
 /**
@@ -27,9 +27,9 @@
 #include "gnunet_util_lib.h"
 #include <gcrypt.h>
 
-#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+#define LOG(kind,...) GNUNET_log_from (kind, "util-crypto-hash-file", __VA_ARGS__)
 
-#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util", syscall, filename)
+#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util-crypto-hash-file", syscall, filename)
 
 
 /**
@@ -124,28 +124,40 @@ file_hash_task (void *cls)
   struct GNUNET_CRYPTO_FileHashContext *fhc = cls;
   struct GNUNET_HashCode *res;
   size_t delta;
+  ssize_t sret;
 
   fhc->task = NULL;
   GNUNET_assert (fhc->offset <= fhc->fsize);
   delta = fhc->bsize;
   if (fhc->fsize - fhc->offset < delta)
     delta = fhc->fsize - fhc->offset;
-  if (delta != GNUNET_DISK_file_read (fhc->fh, fhc->buffer, delta))
+  sret = GNUNET_DISK_file_read (fhc->fh,
+                               fhc->buffer,
+                               delta);
+  if ( (sret < 0) ||
+       (delta != (size_t) sret) )
   {
-    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "read", fhc->filename);
-    file_hash_finish (fhc, NULL);
+    LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING,
+                      "read",
+                      fhc->filename);
+    file_hash_finish (fhc,
+                     NULL);
     return;
   }
-  gcry_md_write (fhc->md, fhc->buffer, delta);
+  gcry_md_write (fhc->md,
+                fhc->buffer,
+                delta);
   fhc->offset += delta;
   if (fhc->offset == fhc->fsize)
   {
-    res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md, GCRY_MD_SHA512);
+    res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md,
+                                                  GCRY_MD_SHA512);
     file_hash_finish (fhc, res);
     return;
   }
   fhc->task = GNUNET_SCHEDULER_add_with_priority (fhc->priority,
-                                                 &file_hash_task, fhc);
+                                                 &file_hash_task,
+                                                 fhc);
 }
 
 
@@ -156,12 +168,13 @@ file_hash_task (void *cls)
  * @param filename name of file to hash
  * @param blocksize number of bytes to process in one task
  * @param callback function to call upon completion
- * @param callback_cls closure for callback
+ * @param callback_cls closure for @a callback
  * @return NULL on (immediate) errror
  */
 struct GNUNET_CRYPTO_FileHashContext *
 GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority,
-                         const char *filename, size_t blocksize,
+                         const char *filename,
+                        size_t blocksize,
                          GNUNET_CRYPTO_HashCompletedCallback callback,
                          void *callback_cls)
 {
@@ -181,24 +194,29 @@ GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority,
     return NULL;
   }
   fhc->bsize = blocksize;
-  if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO, GNUNET_YES))
+  if (GNUNET_OK !=
+      GNUNET_DISK_file_size (filename,
+                            &fhc->fsize,
+                            GNUNET_NO,
+                            GNUNET_YES))
   {
     GNUNET_free (fhc->filename);
     GNUNET_free (fhc);
     return NULL;
   }
-  fhc->fh =
-      GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ,
-                             GNUNET_DISK_PERM_NONE);
-  if (!fhc->fh)
+  fhc->fh = GNUNET_DISK_file_open (filename,
+                                  GNUNET_DISK_OPEN_READ,
+                                  GNUNET_DISK_PERM_NONE);
+  if (! fhc->fh)
   {
     GNUNET_free (fhc->filename);
     GNUNET_free (fhc);
     return NULL;
   }
   fhc->priority = priority;
-  fhc->task =
-      GNUNET_SCHEDULER_add_with_priority (priority, &file_hash_task, fhc);
+  fhc->task = GNUNET_SCHEDULER_add_with_priority (priority,
+                                                 &file_hash_task,
+                                                 fhc);
   return fhc;
 }
 
@@ -213,7 +231,8 @@ GNUNET_CRYPTO_hash_file_cancel (struct GNUNET_CRYPTO_FileHashContext *fhc)
 {
   GNUNET_SCHEDULER_cancel (fhc->task);
   GNUNET_free (fhc->filename);
-  GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh));
+  GNUNET_break (GNUNET_OK ==
+               GNUNET_DISK_file_close (fhc->fh));
   GNUNET_free (fhc);
 }