v1-0012-Clean-up-write-return-type.patch

text/plain

Filename: v1-0012-Clean-up-write-return-type.patch
Type: text/plain
Part: 11
Message: clean up size_t/ssize_t use with POSIX file system APIs

Patch

Format: format-patch
Series: patch v1-0012
Subject: Clean up write() return type
File+
src/backend/access/transam/timeline.c 2 2
src/backend/access/transam/twophase.c 5 5
src/backend/access/transam/xlog.c 1 1
src/backend/commands/dbcommands.c 2 2
src/backend/libpq/be-fsstubs.c 3 2
src/backend/postmaster/fork_process.c 1 1
src/backend/replication/libpqwalreceiver/libpqwalreceiver.c 2 2
src/backend/replication/walreceiver.c 1 1
src/backend/storage/ipc/waiteventset.c 1 1
src/backend/utils/error/elog.c 2 2
src/bin/pg_basebackup/pg_recvlogical.c 7 7
src/bin/pg_basebackup/receivelog.c 2 2
src/bin/pg_checksums/pg_checksums.c 3 3
src/bin/pg_combinebackup/backup_label.c 6 5
src/bin/pg_combinebackup/copy_file.c 3 3
src/bin/pg_combinebackup/reconstruct.c 3 3
src/bin/pg_combinebackup/write_manifest.c 2 2
src/bin/pg_dump/parallel.c 3 3
src/bin/pg_test_fsync/pg_test_fsync.c 1 1
src/fe_utils/cancel.c 1 1
src/include/access/timeline.h 1 1
src/include/replication/walreceiver.h 1 1
src/interfaces/libpq/fe-lobj.c 3 2
src/test/examples/testlo64.c 3 2
src/test/examples/testlo.c 3 2
From 76c1f38c84d4bc1e944ea6cc606221ea8a192c0d Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Mon, 29 Jun 2026 13:37:54 +0200
Subject: [PATCH v1 12/15] Clean up write() return type

Be sure to store the return value in a variable of type ssize_t, not
int.
---
 src/backend/access/transam/timeline.c              |  4 ++--
 src/backend/access/transam/twophase.c              | 10 +++++-----
 src/backend/access/transam/xlog.c                  |  2 +-
 src/backend/commands/dbcommands.c                  |  4 ++--
 src/backend/libpq/be-fsstubs.c                     |  5 +++--
 src/backend/postmaster/fork_process.c              |  2 +-
 .../libpqwalreceiver/libpqwalreceiver.c            |  4 ++--
 src/backend/replication/walreceiver.c              |  2 +-
 src/backend/storage/ipc/waiteventset.c             |  2 +-
 src/backend/utils/error/elog.c                     |  4 ++--
 src/bin/pg_basebackup/pg_recvlogical.c             | 14 +++++++-------
 src/bin/pg_basebackup/receivelog.c                 |  4 ++--
 src/bin/pg_checksums/pg_checksums.c                |  6 +++---
 src/bin/pg_combinebackup/backup_label.c            | 11 ++++++-----
 src/bin/pg_combinebackup/copy_file.c               |  6 +++---
 src/bin/pg_combinebackup/reconstruct.c             |  6 +++---
 src/bin/pg_combinebackup/write_manifest.c          |  4 ++--
 src/bin/pg_dump/parallel.c                         |  6 +++---
 src/bin/pg_test_fsync/pg_test_fsync.c              |  2 +-
 src/fe_utils/cancel.c                              |  2 +-
 src/include/access/timeline.h                      |  2 +-
 src/include/replication/walreceiver.h              |  2 +-
 src/interfaces/libpq/fe-lobj.c                     |  5 +++--
 src/test/examples/testlo.c                         |  5 +++--
 src/test/examples/testlo64.c                       |  5 +++--
 25 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c
index db101b761ee..d80c8ffe0a7 100644
--- a/src/backend/access/transam/timeline.c
+++ b/src/backend/access/transam/timeline.c
@@ -461,7 +461,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
  * to avoid emplacing a bogus file.
  */
 void
-writeTimeLineHistoryFile(TimeLineID tli, const char *content, int size)
+writeTimeLineHistoryFile(TimeLineID tli, const char *content, size_t size)
 {
 	char		path[MAXPGPATH];
 	char		tmppath[MAXPGPATH];
@@ -483,7 +483,7 @@ writeTimeLineHistoryFile(TimeLineID tli, const char *content, int size)
 
 	errno = 0;
 	pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE);
-	if ((int) write(fd, content, size) != size)
+	if (write(fd, content, size) != size)
 	{
 		int			save_errno = errno;
 
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 69c12226b7b..439e28c9987 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -232,7 +232,7 @@ static void ProcessRecords(char *bufptr, FullTransactionId fxid,
 						   const TwoPhaseCallback callbacks[]);
 static void RemoveGXact(GlobalTransaction gxact);
 
-static void XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len);
+static void XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, size_t *len);
 static char *ProcessTwoPhaseBuffer(FullTransactionId fxid,
 								   XLogRecPtr prepare_start_lsn,
 								   bool fromdisk, bool setParent, bool setNextXid);
@@ -240,7 +240,7 @@ static void MarkAsPreparingGuts(GlobalTransaction gxact, FullTransactionId fxid,
 								const char *gid, TimestampTz prepared_at, Oid owner,
 								Oid databaseid);
 static void RemoveTwoPhaseFile(FullTransactionId fxid, bool giveWarning);
-static void RecreateTwoPhaseFile(FullTransactionId fxid, const void *content, int len);
+static void RecreateTwoPhaseFile(FullTransactionId fxid, const void *content, size_t len);
 
 /*
  * Register shared memory for two-phase state.
@@ -1417,7 +1417,7 @@ ReadTwoPhaseFile(FullTransactionId fxid, bool missing_ok)
  * similarly to the way WALSender or Logical Decoding would do.
  */
 static void
-XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
+XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, size_t *len)
 {
 	XLogRecord *record;
 	XLogReaderState *xlogreader;
@@ -1747,7 +1747,7 @@ RemoveTwoPhaseFile(FullTransactionId fxid, bool giveWarning)
  * Note: content and len don't include CRC.
  */
 static void
-RecreateTwoPhaseFile(FullTransactionId fxid, const void *content, int len)
+RecreateTwoPhaseFile(FullTransactionId fxid, const void *content, size_t len)
 {
 	char		path[MAXPGPATH];
 	pg_crc32c	statefile_crc;
@@ -1867,7 +1867,7 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon)
 			gxact->prepare_end_lsn <= redo_horizon)
 		{
 			char	   *buf;
-			int			len;
+			size_t		len;
 
 			XlogReadTwoPhaseData(gxact->prepare_start_lsn, &buf, &len);
 			RecreateTwoPhaseFile(gxact->fxid, buf, len);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index d76f77ac3f2..17288a5383b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -3542,7 +3542,7 @@ XLogFileCopy(TimeLineID destTLI, XLogSegNo destsegno,
 		}
 		errno = 0;
 		pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_WRITE);
-		if ((int) write(fd, buffer.data, sizeof(buffer)) != (int) sizeof(buffer))
+		if (write(fd, buffer.data, sizeof(buffer)) != sizeof(buffer))
 		{
 			int			save_errno = errno;
 
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index f0819d15ab7..51dcbd9cace 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -460,7 +460,7 @@ static void
 CreateDirAndVersionFile(char *dbpath, Oid dbid, Oid tsid, bool isRedo)
 {
 	int			fd;
-	int			nbytes;
+	size_t		nbytes;
 	char		versionfile[MAXPGPATH];
 	char		buf[16];
 
@@ -500,7 +500,7 @@ CreateDirAndVersionFile(char *dbpath, Oid dbid, Oid tsid, bool isRedo)
 	/* Write PG_MAJORVERSION in the PG_VERSION file. */
 	pgstat_report_wait_start(WAIT_EVENT_VERSION_FILE_WRITE);
 	errno = 0;
-	if ((int) write(fd, buf, nbytes) != nbytes)
+	if (write(fd, buf, nbytes) != nbytes)
 	{
 		/* If write didn't set errno, assume problem is no disk space. */
 		if (errno == 0)
diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index 1aa4a3080f5..10cc05d5e4b 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -488,8 +488,7 @@ be_lo_export(PG_FUNCTION_ARGS)
 	Oid			lobjId = PG_GETARG_OID(0);
 	text	   *filename = PG_GETARG_TEXT_PP(1);
 	int			fd;
-	int			nbytes,
-				tmp;
+	int			nbytes;
 	char		buf[BUFSIZE];
 	char		fnamebuf[MAXPGPATH];
 	LargeObjectDesc *lobj;
@@ -531,6 +530,8 @@ be_lo_export(PG_FUNCTION_ARGS)
 	 */
 	while ((nbytes = inv_read(lobj, buf, BUFSIZE)) > 0)
 	{
+		ssize_t		tmp;
+
 		tmp = write(fd, buf, nbytes);
 		if (tmp != nbytes)
 			ereport(ERROR,
diff --git a/src/backend/postmaster/fork_process.c b/src/backend/postmaster/fork_process.c
index 855c1a9abda..c6b0c41c6d4 100644
--- a/src/backend/postmaster/fork_process.c
+++ b/src/backend/postmaster/fork_process.c
@@ -102,7 +102,7 @@ fork_process(void)
 			if (fd >= 0)
 			{
 				const char *oomvalue = getenv("PG_OOM_ADJUST_VALUE");
-				int			rc;
+				ssize_t		rc;
 
 				if (oomvalue == NULL)	/* supply a useful default */
 					oomvalue = "0";
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 5376519fea5..ff76469bcf2 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -70,7 +70,7 @@ static char *libpqrcv_get_option_from_conninfo(const char *connInfo,
 static int	libpqrcv_server_version(WalReceiverConn *conn);
 static void libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn,
 											 TimeLineID tli, char **filename,
-											 char **content, int *len);
+											 char **content, size_t *len);
 static bool libpqrcv_startstreaming(WalReceiverConn *conn,
 									const WalRcvStreamOptions *options);
 static void libpqrcv_endstreaming(WalReceiverConn *conn,
@@ -738,7 +738,7 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli)
 static void
 libpqrcv_readtimelinehistoryfile(WalReceiverConn *conn,
 								 TimeLineID tli, char **filename,
-								 char **content, int *len)
+								 char **content, size_t *len)
 {
 	PGresult   *res;
 	char		cmd[64];
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 05e2f690fa7..bb4c2ae0a12 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -755,7 +755,7 @@ WalRcvFetchTimeLineHistoryFiles(TimeLineID first, TimeLineID last)
 		{
 			char	   *fname;
 			char	   *content;
-			int			len;
+			size_t		len;
 			char		expectedfname[MAXFNAMELEN];
 
 			ereport(LOG,
diff --git a/src/backend/storage/ipc/waiteventset.c b/src/backend/storage/ipc/waiteventset.c
index 880c05dd647..5c807c3b274 100644
--- a/src/backend/storage/ipc/waiteventset.c
+++ b/src/backend/storage/ipc/waiteventset.c
@@ -1905,7 +1905,7 @@ latch_sigurg_handler(SIGNAL_ARGS)
 static void
 sendSelfPipeByte(void)
 {
-	int			rc;
+	ssize_t		rc;
 	char		dummy = 0;
 
 retry:
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index a6936a0c664..b9d2c96b97a 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -3027,7 +3027,7 @@ write_eventlog(int level, const char *line, int len)
 static void
 write_console(const char *line, int len)
 {
-	int			rc;
+	ssize_t		rc;
 
 #ifdef WIN32
 
@@ -3917,7 +3917,7 @@ write_pipe_chunks(char *data, int len, int dest)
 {
 	PipeProtoChunk p;
 	int			fd = fileno(stderr);
-	int			rc;
+	ssize_t		rc;
 
 	Assert(len > 0);
 
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index 0f7d7fe9429..b15b3531d8c 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -293,10 +293,10 @@ StreamLogicalLog(void)
 	while (!time_to_abort)
 	{
 		int			r;
-		int			bytes_left;
-		int			bytes_written;
+		size_t		bytes_left;
+		size_t		bytes_written;
 		TimestampTz now;
-		int			hdr_len;
+		size_t		hdr_len;
 
 		cur_record_lsn = InvalidXLogRecPtr;
 
@@ -561,7 +561,7 @@ StreamLogicalLog(void)
 
 		while (bytes_left)
 		{
-			int			ret;
+			ssize_t		ret;
 
 			ret = write(outfd,
 						copybuf + hdr_len + bytes_written,
@@ -569,7 +569,7 @@ StreamLogicalLog(void)
 
 			if (ret < 0)
 			{
-				pg_log_error("could not write %d bytes to log file \"%s\": %m",
+				pg_log_error("could not write %zu bytes to log file \"%s\": %m",
 							 bytes_left, outfile);
 				goto error;
 			}
@@ -581,8 +581,8 @@ StreamLogicalLog(void)
 
 		if (write(outfd, "\n", 1) != 1)
 		{
-			pg_log_error("could not write %d bytes to log file \"%s\": %m",
-						 1, outfile);
+			pg_log_error("could not write %zu bytes to log file \"%s\": %m",
+						 (size_t) 1, outfile);
 			goto error;
 		}
 
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 4925e992741..faa60711b1b 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -274,7 +274,7 @@ existsTimeLineHistoryFile(StreamCtl *stream)
 static bool
 writeTimeLineHistoryFile(StreamCtl *stream, const char *filename, const char *content)
 {
-	int			size = strlen(content);
+	size_t		size = strlen(content);
 	char		histfname[MAXFNAMELEN];
 	Walfile    *f;
 
@@ -299,7 +299,7 @@ writeTimeLineHistoryFile(StreamCtl *stream, const char *filename, const char *co
 		return false;
 	}
 
-	if ((int) stream->walmethod->ops->write(f, content, size) != size)
+	if (stream->walmethod->ops->write(f, content, size) != size)
 	{
 		pg_log_error("could not write timeline history file \"%s\": %s",
 					 histfname, GetLastWalMethodError(stream->walmethod));
diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
index 412c9a18f95..3b3ae23f1a6 100644
--- a/src/bin/pg_checksums/pg_checksums.c
+++ b/src/bin/pg_checksums/pg_checksums.c
@@ -237,7 +237,7 @@ scan_file(const char *fn, int segmentno)
 		}
 		else if (mode == PG_MODE_ENABLE)
 		{
-			int			w;
+			ssize_t		w;
 
 			/*
 			 * Do not rewrite if the checksum is already set to the expected
@@ -263,8 +263,8 @@ scan_file(const char *fn, int segmentno)
 					pg_fatal("could not write block %u in file \"%s\": %m",
 							 blockno, fn);
 				else
-					pg_fatal("could not write block %u in file \"%s\": wrote %d of %d",
-							 blockno, fn, w, BLCKSZ);
+					pg_fatal("could not write block %u in file \"%s\": wrote %zd of %zu",
+							 blockno, fn, w, (size_t) BLCKSZ);
 			}
 		}
 
diff --git a/src/bin/pg_combinebackup/backup_label.c b/src/bin/pg_combinebackup/backup_label.c
index c7f51f0f8c7..b757e772b92 100644
--- a/src/bin/pg_combinebackup/backup_label.c
+++ b/src/bin/pg_combinebackup/backup_label.c
@@ -151,18 +151,19 @@ write_backup_label(char *output_directory, StringInfo buf,
 		if (!line_starts_with(s, e, "INCREMENTAL FROM LSN: ", NULL) &&
 			!line_starts_with(s, e, "INCREMENTAL FROM TLI: ", NULL))
 		{
+			const size_t bytes_left = e - s;
 			ssize_t		wb;
 
-			wb = write(output_fd, s, e - s);
-			if (wb != e - s)
+			wb = write(output_fd, s, bytes_left);
+			if (wb != bytes_left)
 			{
 				if (wb < 0)
 					pg_fatal("could not write file \"%s\": %m", output_filename);
 				else
-					pg_fatal("could not write file \"%s\": wrote %d of %d",
-							 output_filename, (int) wb, (int) (e - s));
+					pg_fatal("could not write file \"%s\": wrote %zd of %zu",
+							 output_filename, wb, bytes_left);
 			}
-			if (pg_checksum_update(&checksum_ctx, (uint8 *) s, e - s) < 0)
+			if (pg_checksum_update(&checksum_ctx, (uint8 *) s, bytes_left) < 0)
 				pg_fatal("could not update checksum of file \"%s\"",
 						 output_filename);
 		}
diff --git a/src/bin/pg_combinebackup/copy_file.c b/src/bin/pg_combinebackup/copy_file.c
index 0287d6e87df..740b63be559 100644
--- a/src/bin/pg_combinebackup/copy_file.c
+++ b/src/bin/pg_combinebackup/copy_file.c
@@ -179,7 +179,7 @@ copy_file_blocks(const char *src, const char *dst,
 	uint8	   *buffer;
 	const int	buffer_size = 50 * BLCKSZ;
 	ssize_t		rb;
-	unsigned	offset = 0;
+	size_t		offset = 0;
 
 	if ((src_fd = open(src, O_RDONLY | PG_BINARY, 0)) < 0)
 		pg_fatal("could not open file \"%s\": %m", src);
@@ -199,8 +199,8 @@ copy_file_blocks(const char *src, const char *dst,
 			if (wb < 0)
 				pg_fatal("could not write to file \"%s\": %m", dst);
 			else
-				pg_fatal("could not write to file \"%s\", offset %u: wrote %d of %d",
-						 dst, offset, (int) wb, (int) rb);
+				pg_fatal("could not write to file \"%s\", offset %zu: wrote %zd of %zu",
+						 dst, offset, wb, (size_t) rb);
 		}
 
 		if (pg_checksum_update(checksum_ctx, buffer, rb) < 0)
diff --git a/src/bin/pg_combinebackup/reconstruct.c b/src/bin/pg_combinebackup/reconstruct.c
index 1448c62c775..be271b3b01c 100644
--- a/src/bin/pg_combinebackup/reconstruct.c
+++ b/src/bin/pg_combinebackup/reconstruct.c
@@ -755,15 +755,15 @@ static void
 write_block(int fd, const char *output_filename,
 			const uint8 *buffer, pg_checksum_context *checksum_ctx)
 {
-	int			wb;
+	ssize_t		wb;
 
 	if ((wb = write(fd, buffer, BLCKSZ)) != BLCKSZ)
 	{
 		if (wb < 0)
 			pg_fatal("could not write file \"%s\": %m", output_filename);
 		else
-			pg_fatal("could not write file \"%s\": wrote %d of %d",
-					 output_filename, wb, BLCKSZ);
+			pg_fatal("could not write file \"%s\": wrote %zd of %zu",
+					 output_filename, wb, (size_t) BLCKSZ);
 	}
 
 	/* Update the checksum computation. */
diff --git a/src/bin/pg_combinebackup/write_manifest.c b/src/bin/pg_combinebackup/write_manifest.c
index 715286043b5..c2ab7281266 100644
--- a/src/bin/pg_combinebackup/write_manifest.c
+++ b/src/bin/pg_combinebackup/write_manifest.c
@@ -259,8 +259,8 @@ flush_manifest(manifest_writer *mwriter)
 			if (wb < 0)
 				pg_fatal("could not write file \"%s\": %m", mwriter->pathname);
 			else
-				pg_fatal("could not write file \"%s\": wrote %zd of %d",
-						 mwriter->pathname, wb, mwriter->buf.len);
+				pg_fatal("could not write file \"%s\": wrote %zd of %zu",
+						 mwriter->pathname, wb, (size_t) mwriter->buf.len);
 		}
 
 		if (mwriter->still_checksumming &&
diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c
index 7e2e9f958ea..f2399b15bbf 100644
--- a/src/bin/pg_dump/parallel.c
+++ b/src/bin/pg_dump/parallel.c
@@ -186,7 +186,7 @@ static CRITICAL_SECTION signal_info_lock;
 #define write_stderr(str) \
 	do { \
 		const char *str_ = (str); \
-		int		rc_; \
+		ssize_t	rc_; \
 		rc_ = write(fileno(stderr), str_, strlen(str_)); \
 		(void) rc_; \
 	} while (0)
@@ -1528,7 +1528,7 @@ getMessageFromLeader(int pipefd[2])
 static void
 sendMessageToLeader(int pipefd[2], const char *str)
 {
-	int			len = strlen(str) + 1;
+	size_t		len = strlen(str) + 1;
 
 	if (pipewrite(pipefd[PIPE_WRITE], str, len) != len)
 		pg_fatal("could not write to the communication channel: %m");
@@ -1645,7 +1645,7 @@ getMessageFromWorker(ParallelState *pstate, bool do_wait, int *worker)
 static void
 sendMessageToWorker(ParallelState *pstate, int worker, const char *str)
 {
-	int			len = strlen(str) + 1;
+	size_t		len = strlen(str) + 1;
 
 	if (pipewrite(pstate->parallelSlot[worker].pipeWrite, str, len) != len)
 	{
diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
index 4b84f86e7d7..c51b1271f1f 100644
--- a/src/bin/pg_test_fsync/pg_test_fsync.c
+++ b/src/bin/pg_test_fsync/pg_test_fsync.c
@@ -593,7 +593,7 @@ test_non_sync(void)
 static void
 signal_cleanup(SIGNAL_ARGS)
 {
-	int			rc;
+	ssize_t		rc;
 
 	/* Delete the file if it exists. Ignore errors */
 	if (needs_unlink)
diff --git a/src/fe_utils/cancel.c b/src/fe_utils/cancel.c
index e6b75439f56..55ff2f56c3b 100644
--- a/src/fe_utils/cancel.c
+++ b/src/fe_utils/cancel.c
@@ -31,7 +31,7 @@
 #define write_stderr(str) \
 	do { \
 		const char *str_ = (str); \
-		int		rc_; \
+		ssize_t	rc_; \
 		rc_ = write(fileno(stderr), str_, strlen(str_)); \
 		(void) rc_; \
 	} while (0)
diff --git a/src/include/access/timeline.h b/src/include/access/timeline.h
index 76b852d07ab..3aee3419a5c 100644
--- a/src/include/access/timeline.h
+++ b/src/include/access/timeline.h
@@ -34,7 +34,7 @@ extern bool existsTimeLineHistory(TimeLineID probeTLI);
 extern TimeLineID findNewestTimeLine(TimeLineID startTLI);
 extern void writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
 								 XLogRecPtr switchpoint, const char *reason);
-extern void writeTimeLineHistoryFile(TimeLineID tli, const char *content, int size);
+extern void writeTimeLineHistoryFile(TimeLineID tli, const char *content, size_t size);
 extern void restoreTimeLineHistoryFiles(TimeLineID begin, TimeLineID end);
 extern bool tliInHistory(TimeLineID tli, List *expectedTLEs);
 extern TimeLineID tliOfPointInHistory(XLogRecPtr ptr, List *history);
diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h
index 47c07574d4d..760364e3587 100644
--- a/src/include/replication/walreceiver.h
+++ b/src/include/replication/walreceiver.h
@@ -309,7 +309,7 @@ typedef void (*walrcv_readtimelinehistoryfile_fn) (WalReceiverConn *conn,
 												   TimeLineID tli,
 												   char **filename,
 												   char **content,
-												   int *size);
+												   size_t *size);
 
 /*
  * walrcv_startstreaming_fn
diff --git a/src/interfaces/libpq/fe-lobj.c b/src/interfaces/libpq/fe-lobj.c
index 3014cae33ac..19ebab22ba3 100644
--- a/src/interfaces/libpq/fe-lobj.c
+++ b/src/interfaces/libpq/fe-lobj.c
@@ -749,8 +749,7 @@ lo_export(PGconn *conn, Oid lobjId, const char *filename)
 {
 	int			result = 1;
 	int			fd;
-	int			nbytes,
-				tmp;
+	int			nbytes;
 	char		buf[LO_BUFSIZE];
 	int			lobj;
 	char		sebuf[PG_STRERROR_R_BUFLEN];
@@ -788,6 +787,8 @@ lo_export(PGconn *conn, Oid lobjId, const char *filename)
 	 */
 	while ((nbytes = lo_read(conn, lobj, buf, LO_BUFSIZE)) > 0)
 	{
+		ssize_t		tmp;
+
 		tmp = write(fd, buf, nbytes);
 		if (tmp != nbytes)
 		{
diff --git a/src/test/examples/testlo.c b/src/test/examples/testlo.c
index f73a0fcb100..0b1d097edff 100644
--- a/src/test/examples/testlo.c
+++ b/src/test/examples/testlo.c
@@ -151,8 +151,7 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
 {
 	int			lobj_fd;
 	char		buf[BUFSIZE];
-	int			nbytes,
-				tmp;
+	int			nbytes;
 	int			fd;
 
 	/*
@@ -177,6 +176,8 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
 	 */
 	while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0)
 	{
+		ssize_t		tmp;
+
 		tmp = write(fd, buf, nbytes);
 		if (tmp < nbytes)
 		{
diff --git a/src/test/examples/testlo64.c b/src/test/examples/testlo64.c
index cecfa683698..3698d7f256e 100644
--- a/src/test/examples/testlo64.c
+++ b/src/test/examples/testlo64.c
@@ -174,8 +174,7 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
 {
 	int			lobj_fd;
 	char		buf[BUFSIZE];
-	int			nbytes,
-				tmp;
+	int			nbytes;
 	int			fd;
 
 	/*
@@ -200,6 +199,8 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
 	 */
 	while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0)
 	{
+		ssize_t		tmp;
+
 		tmp = write(fd, buf, nbytes);
 		if (tmp < nbytes)
 		{
-- 
2.54.0