Description: this patch makes boinc correctly close the open files.
 This patch allows also MFILE to correctly deallocate its pointers by calling close().
--- a/lib/crypt_prog.cpp
+++ b/lib/crypt_prog.cpp
@@ -152,6 +152,8 @@ int main(int argc, char** argv) {
         if (!fpub) die("fopen");
         print_key_hex(fpriv, (KEY*)&private_key, sizeof(private_key));
         print_key_hex(fpub, (KEY*)&public_key, sizeof(public_key));
+	fclose(fpriv);
+	fclose(fpub);
 
     } else if (!strcmp(argv[1], "-sign")) {
         if (argc < 4) {
@@ -166,6 +168,7 @@ int main(int argc, char** argv) {
         signature.len = 256;
         retval = sign_file(argv[2], private_key, signature);
         print_hex_data(stdout, signature);
+	fclose(fpriv);
     } else if (!strcmp(argv[1], "-sign_string")) {
         if (argc < 4) {
             usage();
@@ -177,6 +180,7 @@ int main(int argc, char** argv) {
         if (retval) die("scan_key_hex\n");
         generate_signature(argv[2], cbuf, private_key);
         puts(cbuf);
+	fclose(fpriv);
     } else if (!strcmp(argv[1], "-verify")) {
         if (argc < 5) {
             usage();
@@ -190,6 +194,8 @@ int main(int argc, char** argv) {
         signature.data = signature_buf;
         signature.len = 256;
         retval = scan_hex_data(f, signature);
+	fclose(f);
+	fclose(fpub);
         if (retval) die("scan_hex_data");
 
         char md5_buf[64];
@@ -219,6 +225,8 @@ int main(int argc, char** argv) {
         if (!fpub) die("fopen");
         retval = scan_key_hex(fpub, (KEY*)&public_key, sizeof(public_key));
         if (retval) die("read_public_key");
+	fclose(fpriv);
+	fclose(fpub);
         strcpy((char*)buf2, "encryption test successful");
         in.data = buf2;
         in.len = strlen((char*)in.data);
@@ -236,6 +244,7 @@ int main(int argc, char** argv) {
         signature.data = signature_buf;
         signature.len = 256;
         retval = scan_hex_data(f, signature);
+	fclose(f);
         if (retval) die("cannot scan_hex_data");
         certpath = check_validity(argv[4], argv[2], signature.data, argv[5]);
         if (certpath == NULL) {
@@ -391,6 +400,7 @@ int main(int argc, char** argv) {
                     die("fopen");
                 }
                 print_key_hex(fpub, (KEY*)&public_key, sizeof(public_key));
+		fclose(fpub);
             }
         }
     } else {
--- a/lib/mfile.cpp
+++ b/lib/mfile.cpp
@@ -38,10 +38,11 @@
 MFILE::MFILE() {
     buf = (char*)malloc(64*1024);
     len = 0;
+    f = NULL;
 }
 
 MFILE::~MFILE() {
-    if (buf) free(buf);
+    close();
 }
 
 int MFILE::open(const char* path, const char* mode) {
--- a/lib/parse_test.cpp
+++ b/lib/parse_test.cpp
@@ -57,6 +57,7 @@ int main() {
         exit(1);
     }
     parse(f);
+    fclose(f);
 }
 
 /* try it with something like:
