use a vector instead of a char buffer. variable size arrays are
technically possible, but not allowed in the C++ spec.

alternatively the error can be suppressed

diff --git a/lib/fd.cc b/lib/fd.cc
index d147eeb..b9570eb 100644
--- a/lib/fd.cc
+++ b/lib/fd.cc
@@ -540,14 +540,14 @@ namespace crucible {
 		// Start with a reasonable guess since it will usually work
 		off_t size = 4096;
 		while (size < 1048576) {
-			char buf[size + 1];
+			vector<char> buf(size + 1);
 			int rv;
-			DIE_IF_MINUS_ONE(rv = readlink(path.c_str(), buf, size + 1));
+			DIE_IF_MINUS_ONE(rv = readlink(path.c_str(), buf.data(), buf.size()));
 			// No negative values allowed except -1
 			THROW_CHECK1(runtime_error, rv, rv >= 0);
 			if (rv <= size) {
 				buf[rv] = 0;
-				return buf;
+				return string(buf.begin(), buf.begin() + rv);
 			}
 			// cerr << "Retrying readlink(" << path << ", buf, " << size + 1 << ")" << endl;
 			// This is from the Linux readlink(2) man page (release 3.44).
