diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index a3e1c59a82..d4b3350912 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -82,6 +82,7 @@ #include "utils/guc.h" #include "utils/memutils.h" #include "utils/ps_status.h" +#include "common/string.h" /* In this module, access gettext() via err_gettext() */ @@ -177,7 +178,6 @@ static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *st static void write_console(const char *line, int len); static void setup_formatted_log_time(void); static void setup_formatted_start_time(void); -static const char *process_log_prefix_padding(const char *p, int *padding); static void log_line_prefix(StringInfo buf, ErrorData *edata); static void write_csvlog(ErrorData *edata); static void send_message_to_server_log(ErrorData *edata); @@ -2338,41 +2338,6 @@ setup_formatted_start_time(void) pg_localtime(&stamp_time, log_timezone)); } -/* - * process_log_prefix_padding --- helper function for processing the format - * string in log_line_prefix - * - * Note: This function returns NULL if it finds something which - * it deems invalid in the format string. - */ -static const char * -process_log_prefix_padding(const char *p, int *ppadding) -{ - int paddingsign = 1; - int padding = 0; - - if (*p == '-') - { - p++; - - if (*p == '\0') /* Did the buf end in %- ? */ - return NULL; - paddingsign = -1; - } - - /* generate an int version of the numerical string */ - while (*p >= '0' && *p <= '9') - padding = padding * 10 + (*p++ - '0'); - - /* format is invalid if it ends with the padding number */ - if (*p == '\0') - return NULL; - - padding *= paddingsign; - *ppadding = padding; - return p; -} - /* * Format tag info for log lines; append to the provided buffer. */ @@ -2427,7 +2392,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata) /* * Process any formatting which may exist after the '%'. Note that - * process_log_prefix_padding moves p past the padding number if it + * process_padding moves p past the padding number if it * exists. * * Note: Since only '-', '0' to '9' are valid formatting characters we @@ -2441,7 +2406,7 @@ log_line_prefix(StringInfo buf, ErrorData *edata) */ if (*p > '9') padding = 0; - else if ((p = process_log_prefix_padding(p, &padding)) == NULL) + else if ((p = process_padding(p, &padding)) == NULL) break; /* process the option */ diff --git a/src/common/string.c b/src/common/string.c index 3aa378c051..ea5d4e87bc 100644 --- a/src/common/string.c +++ b/src/common/string.c @@ -107,6 +107,40 @@ pg_is_ascii(const char *str) return true; } +/* + * process_padding --- helper function for processing the format + * string + * + * Note: This function returns NULL if it finds something which + * it deems invalid in the format string. + */ +const char * +process_padding(const char *p, int *ppadding) +{ + int paddingsign = 1; + int padding = 0; + + if (*p == '-') + { + p++; + + if (*p == '\0') /* Did the buf end in %- ? */ + return NULL; + paddingsign = -1; + } + + /* generate an int version of the numerical string */ + while (*p >= '0' && *p <= '9') + padding = padding * 10 + (*p++ - '0'); + + /* format is invalid if it ends with the padding number */ + if (*p == '\0') + return NULL; + + padding *= paddingsign; + *ppadding = padding; + return p; +} /* * pg_strip_crlf -- Remove any trailing newline and carriage return diff --git a/src/include/common/string.h b/src/include/common/string.h index 686c158efe..1f14e3124f 100644 --- a/src/include/common/string.h +++ b/src/include/common/string.h @@ -19,6 +19,7 @@ extern int strtoint(const char *pg_restrict str, char **pg_restrict endptr, extern void pg_clean_ascii(char *str); extern int pg_strip_crlf(char *str); extern bool pg_is_ascii(const char *str); +extern const char* process_padding(const char *p, int *ppadding); /* functions in src/common/pg_get_line.c */ extern char *pg_get_line(FILE *stream);