mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Code review for pgstat_get_crashed_backend_activity patch.
Avoid possibly dumping core when pgstat_track_activity_query_size has a less-than-default value; avoid uselessly searching for the query string of a successfully-exited backend; don't bother putting out an ERRDETAIL if we don't have a query to show; some other minor stylistic improvements.
This commit is contained in:
@@ -160,35 +160,38 @@ to_ascii_default(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* "Escape" a string in unknown encoding to a valid ASCII string.
|
||||
* Replace non-ASCII bytes with '?'
|
||||
* This must not trigger ereport(ERROR), as it is called from postmaster.
|
||||
* Copy a string in an arbitrary backend-safe encoding, converting it to a
|
||||
* valid ASCII string by replacing non-ASCII bytes with '?'. Otherwise the
|
||||
* behavior is identical to strlcpy(), except that we don't bother with a
|
||||
* return value.
|
||||
*
|
||||
* Unlike C strncpy(), the result is always terminated with exactly one null
|
||||
* byte.
|
||||
* This must not trigger ereport(ERROR), as it is called in postmaster.
|
||||
* ----------
|
||||
*/
|
||||
void
|
||||
ascii_safe_strncpy(char *dest, const char *src, int len)
|
||||
ascii_safe_strlcpy(char *dest, const char *src, size_t destsiz)
|
||||
{
|
||||
int i;
|
||||
if (destsiz == 0) /* corner case: no room for trailing nul */
|
||||
return;
|
||||
|
||||
for (i = 0; i < (len - 1); i++)
|
||||
while (--destsiz > 0)
|
||||
{
|
||||
unsigned char ch = src[i]; /* use unsigned char here to avoid compiler warning */
|
||||
/* use unsigned char here to avoid compiler warning */
|
||||
unsigned char ch = *src++;
|
||||
|
||||
if (ch == '\0')
|
||||
break;
|
||||
/* Keep printable ASCII characters */
|
||||
if (32 <= ch && ch <= 127)
|
||||
dest[i] = ch;
|
||||
*dest = ch;
|
||||
/* White-space is also OK */
|
||||
else if (ch == '\n' || ch == '\r' || ch == '\t')
|
||||
dest[i] = ch;
|
||||
*dest = ch;
|
||||
/* Everything else is replaced with '?' */
|
||||
else
|
||||
dest[i] = '?';
|
||||
*dest = '?';
|
||||
dest++;
|
||||
}
|
||||
|
||||
dest[i] = '\0';
|
||||
*dest = '\0';
|
||||
}
|
||||
|
Reference in New Issue
Block a user