mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	Remove dead pread and pwrite replacement code.
pread() and pwrite() are in SUSv2, and all targeted Unix systems have
them.
Previously, we defined pg_pread and pg_pwrite to emulate these function
with lseek() on old Unixen.  The names with a pg_ prefix were a reminder
of a portability hazard: they might change the current file position.
That hazard is gone, so we can drop the prefixes.
Since the remaining replacement code is Windows-only, move it into
src/port/win32p{read,write}.c, and move the declarations into
src/include/port/win32_port.h.
No need for vestigial HAVE_PREAD, HAVE_PWRITE macros as they were only
used for declarations in port.h which have now moved into win32_port.h.
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Greg Stark <stark@mit.edu>
Reviewed-by: Robert Haas <robertmhaas@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com
			
			
This commit is contained in:
		
							
								
								
									
										38
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -16728,32 +16728,6 @@ esac | |||||||
|  |  | ||||||
| fi | fi | ||||||
|  |  | ||||||
| ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" |  | ||||||
| if test "x$ac_cv_func_pread" = xyes; then : |  | ||||||
|   $as_echo "#define HAVE_PREAD 1" >>confdefs.h |  | ||||||
|  |  | ||||||
| else |  | ||||||
|   case " $LIBOBJS " in |  | ||||||
|   *" pread.$ac_objext "* ) ;; |  | ||||||
|   *) LIBOBJS="$LIBOBJS pread.$ac_objext" |  | ||||||
|  ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" |  | ||||||
| if test "x$ac_cv_func_pwrite" = xyes; then : |  | ||||||
|   $as_echo "#define HAVE_PWRITE 1" >>confdefs.h |  | ||||||
|  |  | ||||||
| else |  | ||||||
|   case " $LIBOBJS " in |  | ||||||
|   *" pwrite.$ac_objext "* ) ;; |  | ||||||
|   *) LIBOBJS="$LIBOBJS pwrite.$ac_objext" |  | ||||||
|  ;; |  | ||||||
| esac |  | ||||||
|  |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" | ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" | ||||||
| if test "x$ac_cv_func_strlcat" = xyes; then : | if test "x$ac_cv_func_strlcat" = xyes; then : | ||||||
|   $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h |   $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h | ||||||
| @@ -17015,6 +16989,18 @@ esac | |||||||
|  ;; |  ;; | ||||||
| esac | esac | ||||||
|  |  | ||||||
|  |   case " $LIBOBJS " in | ||||||
|  |   *" win32pread.$ac_objext "* ) ;; | ||||||
|  |   *) LIBOBJS="$LIBOBJS win32pread.$ac_objext" | ||||||
|  |  ;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|  |   case " $LIBOBJS " in | ||||||
|  |   *" win32pwrite.$ac_objext "* ) ;; | ||||||
|  |   *) LIBOBJS="$LIBOBJS win32pwrite.$ac_objext" | ||||||
|  |  ;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|   case " $LIBOBJS " in |   case " $LIBOBJS " in | ||||||
|   *" win32security.$ac_objext "* ) ;; |   *" win32security.$ac_objext "* ) ;; | ||||||
|   *) LIBOBJS="$LIBOBJS win32security.$ac_objext" |   *) LIBOBJS="$LIBOBJS win32security.$ac_objext" | ||||||
|   | |||||||
| @@ -1876,8 +1876,6 @@ AC_REPLACE_FUNCS(m4_normalize([ | |||||||
| 	getpeereid | 	getpeereid | ||||||
| 	inet_aton | 	inet_aton | ||||||
| 	mkdtemp | 	mkdtemp | ||||||
| 	pread |  | ||||||
| 	pwrite |  | ||||||
| 	strlcat | 	strlcat | ||||||
| 	strlcpy | 	strlcpy | ||||||
| 	strnlen | 	strnlen | ||||||
| @@ -1943,6 +1941,8 @@ if test "$PORTNAME" = "win32"; then | |||||||
|   AC_LIBOBJ(win32error) |   AC_LIBOBJ(win32error) | ||||||
|   AC_LIBOBJ(win32link) |   AC_LIBOBJ(win32link) | ||||||
|   AC_LIBOBJ(win32ntdll) |   AC_LIBOBJ(win32ntdll) | ||||||
|  |   AC_LIBOBJ(win32pread) | ||||||
|  |   AC_LIBOBJ(win32pwrite) | ||||||
|   AC_LIBOBJ(win32security) |   AC_LIBOBJ(win32security) | ||||||
|   AC_LIBOBJ(win32setlocale) |   AC_LIBOBJ(win32setlocale) | ||||||
|   AC_LIBOBJ(win32stat) |   AC_LIBOBJ(win32stat) | ||||||
|   | |||||||
| @@ -2103,9 +2103,9 @@ qtext_store(const char *query, int query_len, | |||||||
| 	if (fd < 0) | 	if (fd < 0) | ||||||
| 		goto error; | 		goto error; | ||||||
|  |  | ||||||
| 	if (pg_pwrite(fd, query, query_len, off) != query_len) | 	if (pwrite(fd, query, query_len, off) != query_len) | ||||||
| 		goto error; | 		goto error; | ||||||
| 	if (pg_pwrite(fd, "\0", 1, off + query_len) != 1) | 	if (pwrite(fd, "\0", 1, off + query_len) != 1) | ||||||
| 		goto error; | 		goto error; | ||||||
|  |  | ||||||
| 	CloseTransientFile(fd); | 	CloseTransientFile(fd); | ||||||
|   | |||||||
| @@ -1149,7 +1149,7 @@ heap_xlog_logical_rewrite(XLogReaderState *r) | |||||||
| 	/* write out tail end of mapping file (again) */ | 	/* write out tail end of mapping file (again) */ | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE); | 	pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE); | ||||||
| 	if (pg_pwrite(fd, data, len, xlrec->offset) != len) | 	if (pwrite(fd, data, len, xlrec->offset) != len) | ||||||
| 	{ | 	{ | ||||||
| 		/* if write didn't set errno, assume problem is no disk space */ | 		/* if write didn't set errno, assume problem is no disk space */ | ||||||
| 		if (errno == 0) | 		if (errno == 0) | ||||||
|   | |||||||
| @@ -718,7 +718,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno) | |||||||
|  |  | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_SLRU_READ); | 	pgstat_report_wait_start(WAIT_EVENT_SLRU_READ); | ||||||
| 	if (pg_pread(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) | 	if (pread(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) | ||||||
| 	{ | 	{ | ||||||
| 		pgstat_report_wait_end(); | 		pgstat_report_wait_end(); | ||||||
| 		slru_errcause = SLRU_READ_FAILED; | 		slru_errcause = SLRU_READ_FAILED; | ||||||
| @@ -873,7 +873,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruWriteAll fdata) | |||||||
|  |  | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_SLRU_WRITE); | 	pgstat_report_wait_start(WAIT_EVENT_SLRU_WRITE); | ||||||
| 	if (pg_pwrite(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) | 	if (pwrite(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) | ||||||
| 	{ | 	{ | ||||||
| 		pgstat_report_wait_end(); | 		pgstat_report_wait_end(); | ||||||
| 		/* if write didn't set errno, assume problem is no disk space */ | 		/* if write didn't set errno, assume problem is no disk space */ | ||||||
|   | |||||||
| @@ -2189,7 +2189,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible) | |||||||
| 					INSTR_TIME_SET_CURRENT(start); | 					INSTR_TIME_SET_CURRENT(start); | ||||||
|  |  | ||||||
| 				pgstat_report_wait_start(WAIT_EVENT_WAL_WRITE); | 				pgstat_report_wait_start(WAIT_EVENT_WAL_WRITE); | ||||||
| 				written = pg_pwrite(openLogFile, from, nleft, startoffset); | 				written = pwrite(openLogFile, from, nleft, startoffset); | ||||||
| 				pgstat_report_wait_end(); | 				pgstat_report_wait_end(); | ||||||
|  |  | ||||||
| 				/* | 				/* | ||||||
| @@ -3011,7 +3011,7 @@ XLogFileInitInternal(XLogSegNo logsegno, TimeLineID logtli, | |||||||
| 		 * enough. | 		 * enough. | ||||||
| 		 */ | 		 */ | ||||||
| 		errno = 0; | 		errno = 0; | ||||||
| 		if (pg_pwrite(fd, zbuffer.data, 1, wal_segment_size - 1) != 1) | 		if (pwrite(fd, zbuffer.data, 1, wal_segment_size - 1) != 1) | ||||||
| 		{ | 		{ | ||||||
| 			/* if write didn't set errno, assume no disk space */ | 			/* if write didn't set errno, assume no disk space */ | ||||||
| 			save_errno = errno ? errno : ENOSPC; | 			save_errno = errno ? errno : ENOSPC; | ||||||
|   | |||||||
| @@ -1514,7 +1514,7 @@ WALRead(XLogReaderState *state, | |||||||
|  |  | ||||||
| 		/* Reset errno first; eases reporting non-errno-affecting errors */ | 		/* Reset errno first; eases reporting non-errno-affecting errors */ | ||||||
| 		errno = 0; | 		errno = 0; | ||||||
| 		readbytes = pg_pread(state->seg.ws_file, p, segbytes, (off_t) startoff); | 		readbytes = pread(state->seg.ws_file, p, segbytes, (off_t) startoff); | ||||||
|  |  | ||||||
| #ifndef FRONTEND | #ifndef FRONTEND | ||||||
| 		pgstat_report_wait_end(); | 		pgstat_report_wait_end(); | ||||||
|   | |||||||
| @@ -3260,7 +3260,7 @@ retry: | |||||||
| 	readOff = targetPageOff; | 	readOff = targetPageOff; | ||||||
|  |  | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_WAL_READ); | 	pgstat_report_wait_start(WAIT_EVENT_WAL_READ); | ||||||
| 	r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); | 	r = pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); | ||||||
| 	if (r != XLOG_BLCKSZ) | 	if (r != XLOG_BLCKSZ) | ||||||
| 	{ | 	{ | ||||||
| 		char		fname[MAXFNAMELEN]; | 		char		fname[MAXFNAMELEN]; | ||||||
|   | |||||||
| @@ -1822,7 +1822,7 @@ basebackup_read_file(int fd, char *buf, size_t nbytes, off_t offset, | |||||||
| 	int			rc; | 	int			rc; | ||||||
|  |  | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_BASEBACKUP_READ); | 	pgstat_report_wait_start(WAIT_EVENT_BASEBACKUP_READ); | ||||||
| 	rc = pg_pread(fd, buf, nbytes, offset); | 	rc = pread(fd, buf, nbytes, offset); | ||||||
| 	pgstat_report_wait_end(); | 	pgstat_report_wait_end(); | ||||||
|  |  | ||||||
| 	if (rc < 0) | 	if (rc < 0) | ||||||
|   | |||||||
| @@ -915,7 +915,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr, TimeLineID tli) | |||||||
| 		/* OK to write the logs */ | 		/* OK to write the logs */ | ||||||
| 		errno = 0; | 		errno = 0; | ||||||
|  |  | ||||||
| 		byteswritten = pg_pwrite(recvFile, buf, segbytes, (off_t) startoff); | 		byteswritten = pwrite(recvFile, buf, segbytes, (off_t) startoff); | ||||||
| 		if (byteswritten <= 0) | 		if (byteswritten <= 0) | ||||||
| 		{ | 		{ | ||||||
| 			char		xlogfname[MAXFNAMELEN]; | 			char		xlogfname[MAXFNAMELEN]; | ||||||
|   | |||||||
| @@ -2063,7 +2063,7 @@ FileRead(File file, char *buffer, int amount, off_t offset, | |||||||
|  |  | ||||||
| retry: | retry: | ||||||
| 	pgstat_report_wait_start(wait_event_info); | 	pgstat_report_wait_start(wait_event_info); | ||||||
| 	returnCode = pg_pread(vfdP->fd, buffer, amount, offset); | 	returnCode = pread(vfdP->fd, buffer, amount, offset); | ||||||
| 	pgstat_report_wait_end(); | 	pgstat_report_wait_end(); | ||||||
|  |  | ||||||
| 	if (returnCode < 0) | 	if (returnCode < 0) | ||||||
| @@ -2145,7 +2145,7 @@ FileWrite(File file, char *buffer, int amount, off_t offset, | |||||||
| retry: | retry: | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
| 	pgstat_report_wait_start(wait_event_info); | 	pgstat_report_wait_start(wait_event_info); | ||||||
| 	returnCode = pg_pwrite(VfdCache[file].fd, buffer, amount, offset); | 	returnCode = pwrite(VfdCache[file].fd, buffer, amount, offset); | ||||||
| 	pgstat_report_wait_end(); | 	pgstat_report_wait_end(); | ||||||
|  |  | ||||||
| 	/* if write didn't set errno, assume problem is no disk space */ | 	/* if write didn't set errno, assume problem is no disk space */ | ||||||
|   | |||||||
| @@ -1429,7 +1429,7 @@ AddToDataDirLockFile(int target_line, const char *str) | |||||||
| 	len = strlen(destbuffer); | 	len = strlen(destbuffer); | ||||||
| 	errno = 0; | 	errno = 0; | ||||||
| 	pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE); | 	pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE); | ||||||
| 	if (pg_pwrite(fd, destbuffer, len, 0) != len) | 	if (pwrite(fd, destbuffer, len, 0) != len) | ||||||
| 	{ | 	{ | ||||||
| 		pgstat_report_wait_end(); | 		pgstat_report_wait_end(); | ||||||
| 		/* if write didn't set errno, assume problem is no disk space */ | 		/* if write didn't set errno, assume problem is no disk space */ | ||||||
|   | |||||||
| @@ -312,10 +312,10 @@ test_sync(int writes_per_op) | |||||||
| 		for (ops = 0; alarm_triggered == false; ops++) | 		for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 		{ | 		{ | ||||||
| 			for (writes = 0; writes < writes_per_op; writes++) | 			for (writes = 0; writes < writes_per_op; writes++) | ||||||
| 				if (pg_pwrite(tmpfile, | 				if (pwrite(tmpfile, | ||||||
| 							  buf, | 						   buf, | ||||||
| 							  XLOG_BLCKSZ, | 						   XLOG_BLCKSZ, | ||||||
| 							  writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | 						   writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | ||||||
| 					die("write failed"); | 					die("write failed"); | ||||||
| 		} | 		} | ||||||
| 		STOP_TIMER; | 		STOP_TIMER; | ||||||
| @@ -338,10 +338,10 @@ test_sync(int writes_per_op) | |||||||
| 	for (ops = 0; alarm_triggered == false; ops++) | 	for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 	{ | 	{ | ||||||
| 		for (writes = 0; writes < writes_per_op; writes++) | 		for (writes = 0; writes < writes_per_op; writes++) | ||||||
| 			if (pg_pwrite(tmpfile, | 			if (pwrite(tmpfile, | ||||||
| 						  buf, | 					   buf, | ||||||
| 						  XLOG_BLCKSZ, | 					   XLOG_BLCKSZ, | ||||||
| 						  writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | 					   writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | ||||||
| 				die("write failed"); | 				die("write failed"); | ||||||
| 		fdatasync(tmpfile); | 		fdatasync(tmpfile); | ||||||
| 	} | 	} | ||||||
| @@ -363,10 +363,10 @@ test_sync(int writes_per_op) | |||||||
| 	for (ops = 0; alarm_triggered == false; ops++) | 	for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 	{ | 	{ | ||||||
| 		for (writes = 0; writes < writes_per_op; writes++) | 		for (writes = 0; writes < writes_per_op; writes++) | ||||||
| 			if (pg_pwrite(tmpfile, | 			if (pwrite(tmpfile, | ||||||
| 						  buf, | 					   buf, | ||||||
| 						  XLOG_BLCKSZ, | 					   XLOG_BLCKSZ, | ||||||
| 						  writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | 					   writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | ||||||
| 				die("write failed"); | 				die("write failed"); | ||||||
| 		if (fsync(tmpfile) != 0) | 		if (fsync(tmpfile) != 0) | ||||||
| 			die("fsync failed"); | 			die("fsync failed"); | ||||||
| @@ -387,10 +387,10 @@ test_sync(int writes_per_op) | |||||||
| 	for (ops = 0; alarm_triggered == false; ops++) | 	for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 	{ | 	{ | ||||||
| 		for (writes = 0; writes < writes_per_op; writes++) | 		for (writes = 0; writes < writes_per_op; writes++) | ||||||
| 			if (pg_pwrite(tmpfile, | 			if (pwrite(tmpfile, | ||||||
| 						  buf, | 					   buf, | ||||||
| 						  XLOG_BLCKSZ, | 					   XLOG_BLCKSZ, | ||||||
| 						  writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | 					   writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | ||||||
| 				die("write failed"); | 				die("write failed"); | ||||||
| 		if (pg_fsync_writethrough(tmpfile) != 0) | 		if (pg_fsync_writethrough(tmpfile) != 0) | ||||||
| 			die("fsync failed"); | 			die("fsync failed"); | ||||||
| @@ -419,10 +419,10 @@ test_sync(int writes_per_op) | |||||||
| 		for (ops = 0; alarm_triggered == false; ops++) | 		for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 		{ | 		{ | ||||||
| 			for (writes = 0; writes < writes_per_op; writes++) | 			for (writes = 0; writes < writes_per_op; writes++) | ||||||
| 				if (pg_pwrite(tmpfile, | 				if (pwrite(tmpfile, | ||||||
| 							  buf, | 						   buf, | ||||||
| 							  XLOG_BLCKSZ, | 						   XLOG_BLCKSZ, | ||||||
| 							  writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | 						   writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) | ||||||
|  |  | ||||||
| 					/* | 					/* | ||||||
| 					 * This can generate write failures if the filesystem has | 					 * This can generate write failures if the filesystem has | ||||||
| @@ -484,10 +484,10 @@ test_open_sync(const char *msg, int writes_size) | |||||||
| 		for (ops = 0; alarm_triggered == false; ops++) | 		for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 		{ | 		{ | ||||||
| 			for (writes = 0; writes < 16 / writes_size; writes++) | 			for (writes = 0; writes < 16 / writes_size; writes++) | ||||||
| 				if (pg_pwrite(tmpfile, | 				if (pwrite(tmpfile, | ||||||
| 							  buf, | 						   buf, | ||||||
| 							  writes_size * 1024, | 						   writes_size * 1024, | ||||||
| 							  writes * writes_size * 1024) != | 						   writes * writes_size * 1024) != | ||||||
| 					writes_size * 1024) | 					writes_size * 1024) | ||||||
| 					die("write failed"); | 					die("write failed"); | ||||||
| 		} | 		} | ||||||
| @@ -586,7 +586,7 @@ test_non_sync(void) | |||||||
| 	START_TIMER; | 	START_TIMER; | ||||||
| 	for (ops = 0; alarm_triggered == false; ops++) | 	for (ops = 0; alarm_triggered == false; ops++) | ||||||
| 	{ | 	{ | ||||||
| 		if (pg_pwrite(tmpfile, buf, XLOG_BLCKSZ, 0) != XLOG_BLCKSZ) | 		if (pwrite(tmpfile, buf, XLOG_BLCKSZ, 0) != XLOG_BLCKSZ) | ||||||
| 			die("write failed"); | 			die("write failed"); | ||||||
| 	} | 	} | ||||||
| 	STOP_TIMER; | 	STOP_TIMER; | ||||||
|   | |||||||
| @@ -375,11 +375,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, | |||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Error information from WALRead that both backend and frontend caller can |  * Error information from WALRead that both backend and frontend caller can | ||||||
|  * process.  Currently only errors from pg_pread can be reported. |  * process.  Currently only errors from pread can be reported. | ||||||
|  */ |  */ | ||||||
| typedef struct WALReadError | typedef struct WALReadError | ||||||
| { | { | ||||||
| 	int			wre_errno;		/* errno set by the last pg_pread() */ | 	int			wre_errno;		/* errno set by the last pread() */ | ||||||
| 	int			wre_off;		/* Offset we tried to read from. */ | 	int			wre_off;		/* Offset we tried to read from. */ | ||||||
| 	int			wre_req;		/* Bytes requested to be read. */ | 	int			wre_req;		/* Bytes requested to be read. */ | ||||||
| 	int			wre_read;		/* Bytes read by the last read(). */ | 	int			wre_read;		/* Bytes read by the last read(). */ | ||||||
|   | |||||||
| @@ -388,9 +388,6 @@ | |||||||
| /* Define to 1 if you have the `ppoll' function. */ | /* Define to 1 if you have the `ppoll' function. */ | ||||||
| #undef HAVE_PPOLL | #undef HAVE_PPOLL | ||||||
|  |  | ||||||
| /* Define to 1 if you have the `pread' function. */ |  | ||||||
| #undef HAVE_PREAD |  | ||||||
|  |  | ||||||
| /* Define to 1 if the PS_STRINGS thing exists. */ | /* Define to 1 if the PS_STRINGS thing exists. */ | ||||||
| #undef HAVE_PS_STRINGS | #undef HAVE_PS_STRINGS | ||||||
|  |  | ||||||
| @@ -406,9 +403,6 @@ | |||||||
| /* Have PTHREAD_PRIO_INHERIT. */ | /* Have PTHREAD_PRIO_INHERIT. */ | ||||||
| #undef HAVE_PTHREAD_PRIO_INHERIT | #undef HAVE_PTHREAD_PRIO_INHERIT | ||||||
|  |  | ||||||
| /* Define to 1 if you have the `pwrite' function. */ |  | ||||||
| #undef HAVE_PWRITE |  | ||||||
|  |  | ||||||
| /* Define to 1 if you have the <readline.h> header file. */ | /* Define to 1 if you have the <readline.h> header file. */ | ||||||
| #undef HAVE_READLINE_H | #undef HAVE_READLINE_H | ||||||
|  |  | ||||||
|   | |||||||
| @@ -417,25 +417,6 @@ extern char *mkdtemp(char *path); | |||||||
| extern int	inet_aton(const char *cp, struct in_addr *addr); | extern int	inet_aton(const char *cp, struct in_addr *addr); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * Windows and older Unix don't have pread(2) and pwrite(2).  We have |  | ||||||
|  * replacement functions, but they have slightly different semantics so we'll |  | ||||||
|  * use a name with a pg_ prefix to avoid confusion. |  | ||||||
|  */ |  | ||||||
| #ifdef HAVE_PREAD |  | ||||||
| #define pg_pread pread |  | ||||||
| #else |  | ||||||
| extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef HAVE_PWRITE |  | ||||||
| #define pg_pwrite pwrite |  | ||||||
| #else |  | ||||||
| extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| /* For pg_pwritev() and pg_preadv(), see port/pg_iovec.h. */ |  | ||||||
|  |  | ||||||
| #if !HAVE_DECL_STRLCAT | #if !HAVE_DECL_STRLCAT | ||||||
| extern size_t strlcat(char *dst, const char *src, size_t siz); | extern size_t strlcat(char *dst, const char *src, size_t siz); | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -562,4 +562,10 @@ typedef unsigned short mode_t; | |||||||
| #define HAVE_BUGGY_STRTOF 1 | #define HAVE_BUGGY_STRTOF 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /* in port/win32pread.c */ | ||||||
|  | extern ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); | ||||||
|  |  | ||||||
|  | /* in port/win32pwrite.c */ | ||||||
|  | extern ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); | ||||||
|  |  | ||||||
| #endif							/* PG_WIN32_PORT_H */ | #endif							/* PG_WIN32_PORT_H */ | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) | |||||||
| { | { | ||||||
| #ifdef HAVE_READV | #ifdef HAVE_READV | ||||||
| 	if (iovcnt == 1) | 	if (iovcnt == 1) | ||||||
| 		return pg_pread(fd, iov[0].iov_base, iov[0].iov_len, offset); | 		return pread(fd, iov[0].iov_base, iov[0].iov_len, offset); | ||||||
| 	if (lseek(fd, offset, SEEK_SET) < 0) | 	if (lseek(fd, offset, SEEK_SET) < 0) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	return readv(fd, iov, iovcnt); | 	return readv(fd, iov, iovcnt); | ||||||
| @@ -40,7 +40,7 @@ pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) | |||||||
|  |  | ||||||
| 	for (int i = 0; i < iovcnt; ++i) | 	for (int i = 0; i < iovcnt; ++i) | ||||||
| 	{ | 	{ | ||||||
| 		part = pg_pread(fd, iov[i].iov_base, iov[i].iov_len, offset); | 		part = pread(fd, iov[i].iov_base, iov[i].iov_len, offset); | ||||||
| 		if (part < 0) | 		if (part < 0) | ||||||
| 		{ | 		{ | ||||||
| 			if (i == 0) | 			if (i == 0) | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ pg_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset) | |||||||
| { | { | ||||||
| #ifdef HAVE_WRITEV | #ifdef HAVE_WRITEV | ||||||
| 	if (iovcnt == 1) | 	if (iovcnt == 1) | ||||||
| 		return pg_pwrite(fd, iov[0].iov_base, iov[0].iov_len, offset); | 		return pwrite(fd, iov[0].iov_base, iov[0].iov_len, offset); | ||||||
| 	if (lseek(fd, offset, SEEK_SET) < 0) | 	if (lseek(fd, offset, SEEK_SET) < 0) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	return writev(fd, iov, iovcnt); | 	return writev(fd, iov, iovcnt); | ||||||
| @@ -40,7 +40,7 @@ pg_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset) | |||||||
|  |  | ||||||
| 	for (int i = 0; i < iovcnt; ++i) | 	for (int i = 0; i < iovcnt; ++i) | ||||||
| 	{ | 	{ | ||||||
| 		part = pg_pwrite(fd, iov[i].iov_base, iov[i].iov_len, offset); | 		part = pwrite(fd, iov[i].iov_base, iov[i].iov_len, offset); | ||||||
| 		if (part < 0) | 		if (part < 0) | ||||||
| 		{ | 		{ | ||||||
| 			if (i == 0) | 			if (i == 0) | ||||||
|   | |||||||
| @@ -1,15 +1,12 @@ | |||||||
| /*-------------------------------------------------------------------------
 | /*-------------------------------------------------------------------------
 | ||||||
|  * |  * | ||||||
|  * pread.c |  * win32pread.c | ||||||
|  *	  Implementation of pread(2) for platforms that lack one. |  *	  Implementation of pread(2) for Windows. | ||||||
|  * |  * | ||||||
|  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group |  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  src/port/pread.c |  *	  src/port/win32pread.c | ||||||
|  * |  | ||||||
|  * Note that this implementation changes the current file position, unlike |  | ||||||
|  * the POSIX function, so we use the name pg_pread(). |  | ||||||
|  * |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| @@ -17,16 +14,11 @@ | |||||||
| 
 | 
 | ||||||
| #include "postgres.h" | #include "postgres.h" | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 |  | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #else |  | ||||||
| #include <unistd.h> |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| ssize_t | ssize_t | ||||||
| pg_pread(int fd, void *buf, size_t size, off_t offset) | pread(int fd, void *buf, size_t size, off_t offset) | ||||||
| { | { | ||||||
| #ifdef WIN32 |  | ||||||
| 	OVERLAPPED	overlapped = {0}; | 	OVERLAPPED	overlapped = {0}; | ||||||
| 	HANDLE		handle; | 	HANDLE		handle; | ||||||
| 	DWORD		result; | 	DWORD		result; | ||||||
| @@ -49,10 +41,4 @@ pg_pread(int fd, void *buf, size_t size, off_t offset) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return result; | 	return result; | ||||||
| #else |  | ||||||
| 	if (lseek(fd, offset, SEEK_SET) < 0) |  | ||||||
| 		return -1; |  | ||||||
| 
 |  | ||||||
| 	return read(fd, buf, size); |  | ||||||
| #endif |  | ||||||
| } | } | ||||||
| @@ -1,15 +1,12 @@ | |||||||
| /*-------------------------------------------------------------------------
 | /*-------------------------------------------------------------------------
 | ||||||
|  * |  * | ||||||
|  * pwrite.c |  * win32pwrite.c | ||||||
|  *	  Implementation of pwrite(2) for platforms that lack one. |  *	  Implementation of pwrite(2) for Windows. | ||||||
|  * |  * | ||||||
|  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group |  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group | ||||||
|  * |  * | ||||||
|  * IDENTIFICATION |  * IDENTIFICATION | ||||||
|  *	  src/port/pwrite.c |  *	  src/port/win32pwrite.c | ||||||
|  * |  | ||||||
|  * Note that this implementation changes the current file position, unlike |  | ||||||
|  * the POSIX function, so we use the name pg_pwrite(). |  | ||||||
|  * |  * | ||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| @@ -17,16 +14,11 @@ | |||||||
| 
 | 
 | ||||||
| #include "postgres.h" | #include "postgres.h" | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 |  | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #else |  | ||||||
| #include <unistd.h> |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| ssize_t | ssize_t | ||||||
| pg_pwrite(int fd, const void *buf, size_t size, off_t offset) | pwrite(int fd, const void *buf, size_t size, off_t offset) | ||||||
| { | { | ||||||
| #ifdef WIN32 |  | ||||||
| 	OVERLAPPED	overlapped = {0}; | 	OVERLAPPED	overlapped = {0}; | ||||||
| 	HANDLE		handle; | 	HANDLE		handle; | ||||||
| 	DWORD		result; | 	DWORD		result; | ||||||
| @@ -46,10 +38,4 @@ pg_pwrite(int fd, const void *buf, size_t size, off_t offset) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return result; | 	return result; | ||||||
| #else |  | ||||||
| 	if (lseek(fd, offset, SEEK_SET) < 0) |  | ||||||
| 		return -1; |  | ||||||
| 
 |  | ||||||
| 	return write(fd, buf, size); |  | ||||||
| #endif |  | ||||||
| } | } | ||||||
| @@ -104,13 +104,15 @@ sub mkvcbuild | |||||||
| 	  getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c | 	  getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c | ||||||
| 	  snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c | 	  snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c | ||||||
| 	  dirent.c getopt.c getopt_long.c | 	  dirent.c getopt.c getopt_long.c | ||||||
| 	  pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c | 	  preadv.c pwritev.c pg_bitutils.c | ||||||
| 	  pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c | 	  pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c | ||||||
| 	  pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c | 	  pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c | ||||||
| 	  strerror.c tar.c | 	  strerror.c tar.c | ||||||
| 	  win32dlopen.c | 	  win32dlopen.c | ||||||
| 	  win32env.c win32error.c | 	  win32env.c win32error.c | ||||||
| 	  win32link.c | 	  win32link.c | ||||||
|  | 	  win32pread.c | ||||||
|  | 	  win32pwrite.c | ||||||
| 	  win32ntdll.c | 	  win32ntdll.c | ||||||
| 	  win32security.c win32setlocale.c win32stat.c); | 	  win32security.c win32setlocale.c win32stat.c); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -324,13 +324,11 @@ sub GenerateFiles | |||||||
| 		HAVE_POSIX_FALLOCATE        => undef, | 		HAVE_POSIX_FALLOCATE        => undef, | ||||||
| 		HAVE_PPC_LWARX_MUTEX_HINT   => undef, | 		HAVE_PPC_LWARX_MUTEX_HINT   => undef, | ||||||
| 		HAVE_PPOLL                  => undef, | 		HAVE_PPOLL                  => undef, | ||||||
| 		HAVE_PREAD                  => undef, |  | ||||||
| 		HAVE_PS_STRINGS             => undef, | 		HAVE_PS_STRINGS             => undef, | ||||||
| 		HAVE_PTHREAD                => undef, | 		HAVE_PTHREAD                => undef, | ||||||
| 		HAVE_PTHREAD_BARRIER_WAIT   => undef, | 		HAVE_PTHREAD_BARRIER_WAIT   => undef, | ||||||
| 		HAVE_PTHREAD_IS_THREADED_NP => undef, | 		HAVE_PTHREAD_IS_THREADED_NP => undef, | ||||||
| 		HAVE_PTHREAD_PRIO_INHERIT   => undef, | 		HAVE_PTHREAD_PRIO_INHERIT   => undef, | ||||||
| 		HAVE_PWRITE                 => undef, |  | ||||||
| 		HAVE_READLINE_H             => undef, | 		HAVE_READLINE_H             => undef, | ||||||
| 		HAVE_READLINE_HISTORY_H     => undef, | 		HAVE_READLINE_HISTORY_H     => undef, | ||||||
| 		HAVE_READLINE_READLINE_H    => undef, | 		HAVE_READLINE_READLINE_H    => undef, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user