Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 183926d

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 line termination, the output of pg_current_logfile() included a trailing \r on Windows. To fix, force the file descriptor it uses into text mode. While here, move a couple of local variable declarations to make the function's logic clearer. In v12 and v13, also back-patch the test added by 1c4e88e so that this function has some test coverage. However, the 004_logrotate.pl test script doesn't exist before v12, and it didn't seem worth adding to older branches just for this. Per report from Thomas Kellerer. Back-patch to v10 where this function was added. Discussion: https://postgr.es/m/412ae8da-76bb-640f-039a-f3513499e53d@gmx.net
1 parent ffb4cee commit 183926d

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
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
char lbuffer[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+
#ifdef WIN32
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
{

0 commit comments

Comments
 (0)