diff options
Diffstat (limited to 'src/backend/utils/error')
-rw-r--r-- | src/backend/utils/error/assert.c | 6 | ||||
-rw-r--r-- | src/backend/utils/error/elog.c | 36 |
2 files changed, 38 insertions, 4 deletions
diff --git a/src/backend/utils/error/assert.c b/src/backend/utils/error/assert.c index f35636e9fec..f740c1baa57 100644 --- a/src/backend/utils/error/assert.c +++ b/src/backend/utils/error/assert.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.26 2004/04/19 17:42:58 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.27 2004/06/24 21:03:13 tgl Exp $ * * NOTE * This should eventually work with elog() @@ -31,10 +31,10 @@ ExceptionalCondition(char *conditionName, if (!PointerIsValid(conditionName) || !PointerIsValid(fileName) || !PointerIsValid(errorType)) - fprintf(stderr, "TRAP: ExceptionalCondition: bad arguments\n"); + write_stderr("TRAP: ExceptionalCondition: bad arguments\n"); else { - fprintf(stderr, "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n", + write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n", errorType, conditionName, fileName, lineNumber); } diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index e47740ededa..c70958a9de1 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.141 2004/06/21 14:12:38 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.142 2004/06/24 21:03:13 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1765,3 +1765,37 @@ append_with_tabs(StringInfo buf, const char *str) appendStringInfoCharMacro(buf, '\t'); } } + + +/* + * Write errors to stderr (or by equal means when stderr is + * not available). Used before ereport/elog can be used + * safely (memory context, GUC load etc) + */ +void +write_stderr(const char *fmt,...) +{ + va_list ap; + + fmt = gettext(fmt); + + va_start(ap, fmt); +#ifndef WIN32 + /* On Unix, we just fprintf to stderr */ + vfprintf(stderr, fmt, ap); +#else + /* On Win32, we print to stderr if running on a console, or write to + * eventlog if running as a service */ + if (pgwin32_is_service()) /* Running as a service */ + { + char errbuf[2048]; /* Arbitrary size? */ + + vsnprintf(errbuf, sizeof(errbuf), fmt, ap); + + write_eventlog(EVENTLOG_ERROR_TYPE, errbuf); + } + else /* Not running as service, write to stderr */ + vfprintf(stderr, fmt, ap); +#endif + va_end(ap); +} |