Merge r14251 from BUF_REMOVAL branch to trunk.
This change eliminates the fixed size buffer when reading /proc/version.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14582 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_main.c b/coregrind/m_main.c
index 1499c8a..336a9b3 100644
--- a/coregrind/m_main.c
+++ b/coregrind/m_main.c
@@ -1380,18 +1380,21 @@
if (sr_isError(fd)) {
VG_(message)(Vg_DebugMsg, " can't open /proc/version\n");
} else {
-# define BUF_LEN 256
- HChar version_buf[BUF_LEN];
- Int n = VG_(read) ( sr_Res(fd), version_buf, BUF_LEN );
- vg_assert(n <= BUF_LEN);
- if (n > 0) {
- version_buf[n-1] = '\0';
- VG_(message)(Vg_DebugMsg, " %s\n", version_buf);
- } else {
- VG_(message)(Vg_DebugMsg, " (empty?)\n");
- }
- VG_(close)(sr_Res(fd));
-# undef BUF_LEN
+ const SizeT bufsiz = 255;
+ HChar version_buf[bufsiz+1];
+ VG_(message)(Vg_DebugMsg, " ");
+ Int n, fdno = sr_Res(fd);
+ do {
+ n = VG_(read)(fdno, version_buf, bufsiz);
+ if (n < 0) {
+ VG_(message)(Vg_DebugMsg, " error reading /proc/version\n");
+ break;
+ }
+ version_buf[n] = '\0';
+ VG_(message)(Vg_DebugMsg, "%s", version_buf);
+ } while (n == bufsiz);
+ VG_(message)(Vg_DebugMsg, "\n");
+ VG_(close)(fdno);
}
VG_(machine_get_VexArchInfo)( &vex_arch, &vex_archinfo );