Bug 469954 - FileSystem readlink returns trailing garbage
diff --git a/agent/tcf/services/filesystem.c b/agent/tcf/services/filesystem.c
index 119e9d4..4796225 100644
--- a/agent/tcf/services/filesystem.c
+++ b/agent/tcf/services/filesystem.c
@@ -1440,23 +1440,27 @@
 static void command_readlink(char * token, Channel * c) {
     char path[FILE_PATH_SIZE];
     char link[FILE_PATH_SIZE];
-    int err;
+    ssize_t len = 0;
+    int err = 0;
 
     read_path(&c->inp, path, sizeof(path));
     json_test_char(&c->inp, MARKER_EOA);
     json_test_char(&c->inp, MARKER_EOM);
 
-    link[0] = 0;
 #if defined(_WIN32) || defined(_WRS_KERNEL)
     err = ENOSYS;
 #else
-    err = (readlink(path, link, sizeof(link)) < 0) ? errno : 0;
+    len = readlink(path, link, sizeof(link));
+    if (len < 0) {
+        err = errno;
+        len = 0;
+    }
 #endif
 
     write_stringz(&c->out, "R");
     write_stringz(&c->out, token);
     write_fs_errno(&c->out, err);
-    json_write_string(&c->out, link);
+    json_write_string_len(&c->out, link, (size_t)len);
     write_stream(&c->out, 0);
     write_stream(&c->out, MARKER_EOM);
 }