Merge pull request #178 from MisterDA/fixes

Fixes for issues reported by PVS-Studio
diff --git a/lib/zip_dirent.c b/lib/zip_dirent.c
index 91ff3c2..1691071 100644
--- a/lib/zip_dirent.c
+++ b/lib/zip_dirent.c
@@ -596,7 +596,7 @@
 
     zde->extra_fields = _zip_ef_remove_internal(zde->extra_fields);
 
-    return (zip_int64_t)(size + variable_size);
+    return (zip_int64_t)size + (zip_int64_t)variable_size;
 }
 
 
diff --git a/lib/zip_source_file_stdio_named.c b/lib/zip_source_file_stdio_named.c
index 84f57a4..36fee45 100644
--- a/lib/zip_source_file_stdio_named.c
+++ b/lib/zip_source_file_stdio_named.c
@@ -206,6 +206,7 @@
 
 	if (fstat(fileno(ctx->f), &st) < 0) {
 	    zip_error_set(&ctx->error, ZIP_ER_TMPOPEN, errno);
+	    free(temp);
 	    return -1;
 	}
 
diff --git a/lib/zip_string.c b/lib/zip_string.c
index a6edbc5..374bc3f 100644
--- a/lib/zip_string.c
+++ b/lib/zip_string.c
@@ -145,7 +145,7 @@
 	return NULL;
     }
 
-    if ((s->raw = (zip_uint8_t *)malloc((size_t)(length + 1))) == NULL) {
+    if ((s->raw = (zip_uint8_t *)malloc((size_t)length + 1)) == NULL) {
 	free(s);
 	return NULL;
     }
diff --git a/regress/ziptool_regress.c b/regress/ziptool_regress.c
index cb48471..ce51fbd 100644
--- a/regress/ziptool_regress.c
+++ b/regress/ziptool_regress.c
@@ -110,7 +110,7 @@
 
     idx = strtoull(argv[0], NULL, 10);
     if (idx >= z_in_count) {
-	fprintf(stderr, "invalid argument '%" PRIu64 "', only %d zip sources open\n", idx, z_in_count);
+	fprintf(stderr, "invalid argument '%" PRIu64 "', only %u zip sources open\n", idx, z_in_count);
 	return -1;
     }
     if (zip_close(z_in[idx]) < 0) {
diff --git a/src/zipcmp.c b/src/zipcmp.c
index a79c650..83b70fd 100644
--- a/src/zipcmp.c
+++ b/src/zipcmp.c
@@ -642,9 +642,9 @@
 		header_done = 1;
 	    }
 	    printf("---                     %s  ", e1->name);
-	    printf("comment %d\n", e1->comment_length);
+	    printf("comment %" PRIu32 "\n", e1->comment_length);
 	    printf("+++                     %s  ", e1->name);
-	    printf("comment %d\n", e2->comment_length);
+	    printf("comment %" PRIu32 "\n", e2->comment_length);
 	}
 	ret = 1;
     }
diff --git a/src/ziptool.c b/src/ziptool.c
index cb3d27f..cdcecc7 100644
--- a/src/ziptool.c
+++ b/src/ziptool.c
@@ -396,7 +396,7 @@
 
 static void
 progress_callback(zip_t *archive, double percentage, void *ud) {
-    printf("%.1lf%% done\n", percentage * 100);
+    printf("%.1f%% done\n", percentage * 100);
     progress_userdata.percentage = percentage;
 }
 
@@ -480,7 +480,7 @@
     method = get_compression_method(argv[1]);
     flags = (zip_uint32_t)strtoull(argv[2], NULL, 10);
     if (zip_set_file_compression(za, idx, method, flags) < 0) {
-	fprintf(stderr, "can't set file compression method at index '%" PRIu64 "' to '%s', flags '%d': %s\n", idx, argv[1], flags, zip_strerror(za));
+	fprintf(stderr, "can't set file compression method at index '%" PRIu64 "' to '%s', flags '%" PRIu32 "': %s\n", idx, argv[1], flags, zip_strerror(za));
 	return -1;
     }
     return 0;