Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit601d419

Browse files
committed
Fix pg_current_logfile() to not emit a carriage return on Windows.
Due to not having our signals straight about CRLF vs. LF linetermination, the output of pg_current_logfile() included a trailing\r on Windows. To fix, force the file descriptor it uses into textmode.While here, move a couple of local variable declarations to makethe function's logic clearer.In v12 and v13, also back-patch the test added by 1c4e88e2f so thatthis function has some test coverage. However, the 004_logrotate.pltest script doesn't exist before v12, and it didn't seem worth addingto older branches just for this.Per report from Thomas Kellerer. Back-patch to v10 where thisfunction was added.Discussion:https://postgr.es/m/412ae8da-76bb-640f-039a-f3513499e53d@gmx.net
1 parent331da65 commit601d419

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

‎src/backend/utils/adt/misc.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include<sys/file.h>
1818
#include<dirent.h>
19+
#include<fcntl.h>
1920
#include<math.h>
2021
#include<unistd.h>
2122

@@ -738,9 +739,6 @@ pg_current_logfile(PG_FUNCTION_ARGS)
738739
FILE*fd;
739740
charlbuffer[MAXPGPATH];
740741
char*logfmt;
741-
char*log_filepath;
742-
char*log_format=lbuffer;
743-
char*nlpos;
744742

745743
/* The log format parameter is optional */
746744
if (PG_NARGS()==0||PG_ARGISNULL(0))
@@ -767,16 +765,23 @@ pg_current_logfile(PG_FUNCTION_ARGS)
767765
PG_RETURN_NULL();
768766
}
769767

768+
#ifdefWIN32
769+
/* syslogger.c writes CRLF line endings on Windows */
770+
_setmode(_fileno(fd),_O_TEXT);
771+
#endif
772+
770773
/*
771774
* Read the file to gather current log filename(s) registered by the
772775
* syslogger.
773776
*/
774777
while (fgets(lbuffer,sizeof(lbuffer),fd)!=NULL)
775778
{
776-
/*
777-
* Extract log format and log file path from the line; lbuffer ==
778-
* log_format, they share storage.
779-
*/
779+
char*log_format;
780+
char*log_filepath;
781+
char*nlpos;
782+
783+
/* Extract log format and log file path from the line. */
784+
log_format=lbuffer;
780785
log_filepath=strchr(lbuffer,' ');
781786
if (log_filepath==NULL)
782787
{

‎src/bin/pg_ctl/t/004_logrotate.pl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
use PostgresNode;
55
use TestLib;
6-
use Test::Moretests=>4;
6+
use Test::Moretests=>5;
77
use Time::HiResqw(usleep);
88

99
# Set up node with logging collector
@@ -47,6 +47,10 @@
4747

4848
like($first_logfile,qr/division by zero/,'found expected log file content');
4949

50+
# While we're at it, test pg_current_logfile() function
51+
is($node->safe_psql('postgres',"SELECT pg_current_logfile('stderr')"),
52+
$lfname,'pg_current_logfile() gives correct answer');
53+
5054
# Sleep 2 seconds and ask for log rotation; this should result in
5155
# output into a different log file name.
5256
sleep(2);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp