summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_process.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-01-31 12:02:07 +0000
committerCorinna Vinschen <corinna@vinschen.de>2005-01-31 12:02:07 +0000
commit6d336c0e5a511e8e827ea9c0f75a7f231b571eaf (patch)
treec37d96b2474cf31e5e4e957c319c73f43d9e989f /winsup/cygwin/fhandler_process.cc
parent4f27e288c55cd54a2759a59d06a52ed44dac494b (diff)
downloadcygnal-6d336c0e5a511e8e827ea9c0f75a7f231b571eaf.tar.gz
cygnal-6d336c0e5a511e8e827ea9c0f75a7f231b571eaf.tar.bz2
cygnal-6d336c0e5a511e8e827ea9c0f75a7f231b571eaf.zip
* fhandler_process.cc (format_process_maps): Get destbuf argument by
reference. Allow resizing of destbuf as necessary. Fix string handling.
Diffstat (limited to 'winsup/cygwin/fhandler_process.cc')
-rw-r--r--winsup/cygwin/fhandler_process.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc
index fda7e52a1..fee65076f 100644
--- a/winsup/cygwin/fhandler_process.cc
+++ b/winsup/cygwin/fhandler_process.cc
@@ -81,7 +81,7 @@ static const char * const process_listing[] =
static const int PROCESS_LINK_COUNT =
(sizeof (process_listing) / sizeof (const char *)) - 1;
-static _off64_t format_process_maps (_pinfo *p, char *destbuf, size_t maxsize);
+static _off64_t format_process_maps (_pinfo *p, char *&destbuf, size_t maxsize);
static _off64_t format_process_stat (_pinfo *p, char *destbuf, size_t maxsize);
static _off64_t format_process_status (_pinfo *p, char *destbuf, size_t maxsize);
static _off64_t format_process_statm (_pinfo *p, char *destbuf, size_t maxsize);
@@ -474,7 +474,7 @@ fhandler_process::fill_filebuf ()
}
static _off64_t
-format_process_maps (_pinfo *p, char *destbuf, size_t maxsize)
+format_process_maps (_pinfo *p, char *&destbuf, size_t maxsize)
{
if (!wincap.is_winnt ())
return 0;
@@ -529,8 +529,8 @@ format_process_maps (_pinfo *p, char *destbuf, size_t maxsize)
st.st_dev = 0;
st.st_ino = 0;
}
- if (len + strlen (posix_modname) + 50 > maxsize - 1)
- break;
+ if (len + strlen (posix_modname) + 62 > maxsize - 1)
+ destbuf = (char *) realloc (destbuf, maxsize += 2048);
if (workingset)
for (unsigned i = 1; i <= wset_size; ++i)
{
@@ -554,9 +554,9 @@ format_process_maps (_pinfo *p, char *destbuf, size_t maxsize)
st.st_dev >> 16,
st.st_dev & 0xffff,
st.st_ino);
- while (written++ < 61)
- destbuf[len + written] = ' ';
- len += written - 1;
+ while (written < 62)
+ destbuf[len + written++] = ' ';
+ len += written;
len += __small_sprintf (destbuf + len, "%s\n", posix_modname);
}
out: