|
5 | 5 | * to contain some useful information. Mechanism differs wildly across |
6 | 6 | * platforms. |
7 | 7 | * |
8 | | - * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.34 2007/01/05 22:19:46 momjian Exp $ |
| 8 | + * $PostgreSQL: pgsql/src/backend/utils/misc/ps_status.c,v 1.35 2007/02/16 21:34:04 momjian Exp $ |
9 | 9 | * |
10 | 10 | * Copyright (c) 2000-2007, PostgreSQL Global Development Group |
11 | 11 | * various details abducted from various places |
@@ -91,6 +91,7 @@ static const size_t ps_buffer_size = PS_BUFFER_SIZE; |
91 | 91 | #else /* PS_USE_CLOBBER_ARGV */ |
92 | 92 | static char *ps_buffer; /* will point to argv area */ |
93 | 93 | static size_t ps_buffer_size; /* space determined at run time */ |
| 94 | +static size_t last_status_len; /* use to minimize length of clobber */ |
94 | 95 | #endif /* PS_USE_CLOBBER_ARGV */ |
95 | 96 |
|
96 | 97 | static size_t ps_buffer_fixed_size; /* size of the constant prefix */ |
@@ -153,8 +154,8 @@ save_ps_display_args(int argc, char **argv) |
153 | 154 | } |
154 | 155 |
|
155 | 156 | ps_buffer = argv[0]; |
156 | | - ps_buffer_size = end_of_area - argv[0]; |
157 | | - |
| 157 | + last_status_len = ps_buffer_size = end_of_area - argv[0]; |
| 158 | + |
158 | 159 | /* |
159 | 160 | * move the environment out of the way |
160 | 161 | */ |
@@ -329,7 +330,10 @@ set_ps_display(const char *activity, bool force) |
329 | 330 |
|
330 | 331 | /* pad unused memory */ |
331 | 332 | buflen = strlen(ps_buffer); |
332 | | - MemSet(ps_buffer + buflen, PS_PADDING, ps_buffer_size - buflen); |
| 333 | + /* clobber remainder of old status string */ |
| 334 | + if (last_status_len > buflen) |
| 335 | + MemSet(ps_buffer + buflen, PS_PADDING, last_status_len - buflen); |
| 336 | + last_status_len = buflen; |
333 | 337 | } |
334 | 338 | #endif /* PS_USE_CLOBBER_ARGV */ |
335 | 339 |
|
|
0 commit comments