Use smart pointers instead of gotos in digest.cc.

Change-Id: Ifa32c5c6e501a394e6947ed1420b6a4852de8b36
Reviewed-on: https://boringssl-review.googlesource.com/4150
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/tool/digest.cc b/tool/digest.cc
index bed591c..7cd8827 100644
--- a/tool/digest.cc
+++ b/tool/digest.cc
@@ -87,29 +87,25 @@
             strerror(errno));
     return false;
   }
+  std::unique_ptr<int, close_delete> scoped_fd(&fd);
 
 #if !defined(OPENSSL_WINDOWS)
   struct stat st;
   if (fstat(fd, &st)) {
     fprintf(stderr, "Failed to stat input file '%s': %s\n", filename.c_str(),
             strerror(errno));
-    goto err;
+    return false;
   }
 
   if (!S_ISREG(st.st_mode)) {
     fprintf(stderr, "%s: not a regular file\n", filename.c_str());
-    goto err;
+    return false;
   }
 #endif
 
   *out_fd = fd;
+  scoped_fd.release();
   return true;
-
-#if !defined(OPENSSL_WINDOWS)
-err:
-  close(fd);
-  return false;
-#endif
 }
 
 // SumFile hashes the contents of |source| with |md| and sets |*out_hex| to the